初学Tikz 作图的朋友也许觉得给图形填充颜色很费事儿,尤其是那些不规则图形的颜色填充。

事实上,只要你掌握一个基本思想和三个填充技巧,图形颜色填充就会变得易如反掌!下面我们详细介绍这些方法,学会本文中的各个例子,再复杂的颜色填充问题都不在话下了!

本文较长,需要的朋友可以收藏备查!

基本思想

由曲线段(折线段)首尾相连得到的封闭图形都可以通过命令\filldraw[fill=<color>]将它填充为设定的颜色<color>

值得注意的是,如果折线段(曲线段)的起点和终点没有连起来,使用上述命令填充颜色时, Tikz会自动将起点和终点用线段连结从而将其封闭,然后用设定的颜色填充。例如,一段圆弧使用上述命令时,填充以后得到一个弓形。

下面的例子,就是用这种基本思想实现的。

初学者掌握这个基本思想,就可以应付一些简单图形的颜色填充了。

如果需要对一些复杂的不规则图形进行填充则需要学习下面的三大填充技巧。

填充技巧一:剪裁(clip)

命令\clip 顾名思义就是“剪裁”的意思,它和\draw的区别就是:它不画出后面的路径,而是用这个路径对后面的作图进行剪裁。

说得通俗一点,例如\clip(-1,-1)rectangle(1,1)就是剪出一块正方形的画布,后面所有的作图命令作出的图形将只显示这个正方形内部的部分。

注意:

  • 如果要画出剪裁的路径可以在命令\clip后面添加draw选项,例如,
    \clip[draw](-1,-1)rectangle(1,1)
  • 如果希望剪裁命令只是作用在某个局部,那么使用scope环境将它们包裹起来。

下面的例子给我们直观地显示\clip命令的效果:

\begin{tikzpicture}\draw[fill=blue02,opacity=0.9](-1,-1)rectangle(1,1);\draw[fill=red01,opacity=0.9](-1,0)circle(1);\begin{scope}\clip[draw](3,-1)rectangle(5,1);\draw[fill=red01,opacity=0.9](3,0)circle(1);\end{scope}\begin{scope}\clip[draw](8,0)circle(1);\draw[fill=blue02,opacity=0.9](8,-1)rectangle(10,1);\end{scope}
\end{tikzpicture}

图形:

例1

\begin{tikzpicture}
\begin{scope}\clip(0,-1)circle(1);\draw [draw=gray,fill=red!30](-1,-1)arc(-90:0:1)--(-1,0)--cycle;\draw[draw=gray,fill=red!30](0,0)arc(180:270:1)--(1,0)--cycle;
\end{scope}
\begin{scope}[rotate=180]\clip(0,-1)circle(1);\draw [draw=gray,fill=red!30](-1,-1)arc(-90:0:1)--(-1,0)--cycle;\draw[draw=gray,fill=red!30](0,0)arc(180:270:1)--(1,0)--cycle;
\end{scope}
\clip[draw](-1,-1)rectangle(1,1);
\draw[gray](0,-1)circle(1)(0,1)circle(1);
\end{tikzpicture}

图形:

填充技巧二:奇偶性法则(even odd rule)

奇偶性法则是颜色填充的黄金法则。妙用奇偶性法则可以大大简化作图代码。

奇偶性法则:使用\filldraw[fill=<color>,even odd rule]命令作图时,如果选项里有even odd rule, 那么

当几条路径有重叠时,那么重叠部分属于奇数条路经时将被着色,重叠部分属于偶数条路经时将不被着色。

一个简单容易理解的例子如下:

例2

\begin{tikzpicture}[scale=1,
pattern1/.style={draw=red,pattern color=red!60,pattern=north east lines},
]
\filldraw[thick,pattern1,even odd rule](0,0)circle(1.5 cm)(2,0)circle(1.5 cm);
\end{tikzpicture}

图形:

例3 用奇偶性法则重画例1.

\begin{tikzpicture}\filldraw[fill=orange!30,even odd rule](-1,-1)rectangle(1,1)(-1,-1)rectangle(1,1)(0,0)arc(0:-90:1)arc(180:90:1)arc(180:270:1)arc(0:90:1)arc(180:90:1)arc(360:270:1)arc(0:90:1)arc(180:270:1);
\end{tikzpicture}

图形:

例4 太极图

\begin{tikzpicture}\filldraw [draw=black,fill=black, even odd rule](2,0)arc[radius=2cm,start angle=0,end angle=180](0,0)arc[radius=1cm,start angle=0,end angle=180](0,0)arc[radius=1cm,start angle=180,end angle=360](1,0)circle(5pt);\draw(0,0)circle(2cm);\draw[fill=black](-1,0)circle(5pt);
\end{tikzpicture}

图形:

填充技巧三:图层(layer)

图层的技巧很容易理解,后画的图形着色将覆盖先画的图形的着色。利用这种特点可以非常方便地实现不规则图形的颜色填充。

如果要使重叠区域的几种颜色混合,可以设置填充颜色的透明度:例如设置opacity=0.6,那么重叠区域的颜色将以混合后的颜色显示。

例5

\tikzset{help line/.style={gray,thin},every path/.style={draw}}\begin{tikzpicture}%\draw[help line](-2.5,-2.5)grid(2.5,2.5);
%  \draw(-2.5,0)--(2.5,0)(0,-2.5)--(0,2.5);\draw[fill=red01,opacity=0.8](-1.3,0)circle(1.8);\draw[fill=blue03,opacity=0.8](1.3,0)circle(1.8);\draw[fill=blue02,opacity=0.8](0,1.3)circle(1.8);\draw[fill=yellow01,opacity=0.8](0,-1.3)circle(1.8);\node at (-2.2,0){\color{white}1};\node at (-1,1){\color{white}2};\node at (0,2){\color{white}3};\node at (1,1){\color{white}4};\node at (2.2,0){\color{white}5};\node at (0,0.8){\color{white}6};\node at (-0.8,0){\color{white}7};\node at (0,0){\color{white}8};\node at (0.8,0){\color{white}9};\node at (1,-1){\color{white}10};\node at (0,-0.8){\color{white}11};\node at (-1,-1){\color{white}12};\node at (0,-2){\color{white}13};
\end{tikzpicture}

图形:

例6

\begin{tikzpicture}[every path/.style={draw}]%\draw[help line] (-5,-5)grid(5,5);
%  \draw (-5,0)--(5,0)(0,-5)--(0,5);\begin{scope}[rotate=45]\draw[fill=pink01,opacity=0.8](0,0)ellipse[x radius=2,y radius=1];\draw[fill=green01,opacity=0.8](-0.3,1)ellipse[x radius=1.9,y radius=0.8];\end{scope}\begin{scope}\draw[rotate around={135:(-2,0)},fill=green02,opacity=0.6](-2,0)ellipse[x radius=2,y radius=1];\draw[rotate around={135:(-2,0)},fill=blue01,opacity=0.6](-2.3,-1)ellipse[x radius=1.9,y radius=0.8];
\end{scope}\node at (-1.6,1.3){1};
\node at (-1,1){2};
\node at (-0.4,1.3){3};
\node at (-2,0.8){4};
\node at (-1.5,0.5){5};
\node at (-1,-0.2){6};
\node at (-0.5,0.5){7};
\node at (0,0.8){8};
\node at (0.8,0.5){9};
\node at (0,-0.5){10};
\node at (-1,-1.2){11};
\node at (-1.9,-0.5){12};
\node at (-2.8,0.5){13};
\end{tikzpicture}

图形:

填充技巧四:以图案填充(patterns)

在作一些与面积有关的平面图形以及在画表示集合的交、并、补等关系的韦恩图时,常常使用斜线填充某些部分,这是用图案填充的例子。利用Tikz预定义好的几十种图案可以非常方便的实现图案填充。

使用图案填充的要点有:

  • 使用图案填充时,要调用patters库,就是在导言区添加下面的语句:
    \usetikzlibrary{patterns}.
  • 选用某种图案:pattern=<name>
  • 设置图案颜色:pattern color=<color>
  • 常见的图案选项有:
名称 形状
horizontal lines 水平线
vertical lines 竖直线
north east lines 右上-左下斜线
north west lines 左上-右下斜线
grid 水平格子
crosshatch 倾斜格子
dots 水平点
crosshatch dots 斜点
fivepointed stars 五角星
sixpointed stars 六角星
bricks 砖形
checkerboard 棋盘形状

例7 斜线填充例1中的图形

\begin{tikzpicture}\filldraw[pattern color=red!30,pattern=,even odd rule](-1,-1)rectangle(1,1)(-1,-1)rectangle(1,1)(0,0)arc(0:-90:1)arc(180:90:1)arc(180:270:1)arc(0:90:1)arc(180:90:1)arc(360:270:1)arc(0:90:1)arc(180:270:1);
\end{tikzpicture}

图形:

例8 砖形图案填充

本例来自pgfmanual说明文档。

\begin{tikzpicture}
\def\mypath{(0,0) -- +(0,1) arc (180:0:1.5cm) -- +(0,-1)}
\fill [red!80!black] \mypath;
\pattern[pattern color=white,pattern=bricks] \mypath;
\end{tikzpicture}

图形:

填充技巧五:以渐变色填充(shade)

使用渐变色填充的两个基本命令是\shade\shadedraw, 两者的区别是前者只用渐变色填充而不画出路径(轮廓),后者是先填充然后画出路径(轮廓)。

使用渐变填充也要先调用库文件,即在导言区添加命令:\usetikzlibrary{shadings}

常用的渐变填充有下面四种:

  • (1)线性axis
  • (2)辐射:radical
  • (3) 球形:ball
  • (4) 色轮:colorwheel

前三种默认填充颜色都是“灰-白”渐变,线性填充默认为从上到下渐变。

其它填充选项见下表:

例9 渐变色填充举例

本例来自pgfmanual说明文档。

\begin{tikzpicture}\draw[top color=red] (0,0) rectangle (2,1);\draw[bottom color=red] (3,0) rectangle (5,1);\draw[middle color=red] (6,0) rectangle (8,1);\draw[left color=red] (9,0) rectangle (11,1);\draw[right color=red] (12,0) rectangle (14,1);\draw[inner color=red] (0,-2) rectangle (2,-1);\draw[outer color=red] (3,-2) rectangle (5,-1);\shade[shading=color wheel black center](7,-2)circle(1.5);\shade[shading=color wheel white center](10.5,-2)circle(1.5);
\end{tikzpicture}

图形:

今天的介绍就到这里,喜欢的话欢迎点赞、留言和分享,谢谢啦!

【LaTeX微信交流加群:】

如果你希望交流 LaTeX 使用或者Tikz 作图或者Beamer制作幻灯片方面的问题,请先添加作者微信:niltxz,然后加入作者的LaTeX+TikZ+Beamer 交流微信群。

Tikz作图教程:说说图形颜色填充那些事儿相关推荐

  1. Tikz作图教程:如何画流程图?——从一个简单的例子谈起

    今天我们来谈谈如何画流程图.广义的流程图是指流经一个系统的信息流.观点流或部件流的图形代表. 流程图主要由两种元素构成:文本框和连接线段(通常带有箭头).Tikz画这两类元素的工具是node和--线段 ...

  2. Tikz作图教程:图论中环的画法

    Tikz作图教程:图论中环的画法 今天我们来介绍基于Tikz的图论图形绘制宏包:tkz-graph.学会三个基本作图命令和若干选项参数,就能非常方便地绘制各种图论中的图形. 一个图里面有三类要素:顶点 ...

  3. Tikz作图教程:动手 VS 动脑? 97行代码 VS 6行代码?

    在学习Tikz的过程中,当我们对基本代码有一定熟悉之后,作图思路就是更重要的事情了.本文借一个例子谈谈作图思路的问题. 昨天在网上看到这样一幅图形: 看上去挺复杂的一个图,心里琢磨如果用Tikz来画, ...

  4. Tikz 作图教程:pgfplots 宏包三维数据的可视化绘图

    前一篇推文讲解了使用pgfplots 宏包导入二维数据和可视化绘图的方法.今天我们来介绍一下科研工作者常常用到的三维数据的导入与绘图的方法. 当一个函数关系式中出现了两个自变量时,我们需要用空间曲面来 ...

  5. Tikz作图教程:pgfplots宏包二维数据可视化的数据导入方法

    pgfplots 绘图思想简介 下面一段介绍来自pgfplots说明文档的引言部分,它对pgfplots的绘图思想作了清晰地描述: 科研工作者在交流研究结果.论文时,将数据可视化往往是必要和方便的. ...

  6. Tikz作图教程:两个漂亮的示意图,兼谈 Tikz 中的文本框——node 的高级用法

    先上两个漂亮的示意图: node是Tikz绘图中的一个非常重要的概念.我们可以用它给图形元素添加标签,绘制图的顶点,绘制流程图中的文本框等等. 那么,什么是node呢?pgfmanual中的解释是: ...

  7. Tikz作图教程:pgfplots宏包—三维数据散点图,完美重构文献美图

    三组散点实验数据,彼此相差不大,如何对比它们的差异呢?我们来看一幅来自文献的图: 作者别处心裁地将它们画在三维空间的三个平行的平面上,每个平面设置了三种不透明颜色,六条曲线设置不同的颜色.标注,图形下 ...

  8. Tikz作图教程:堆叠柱形图+折线图+误差线

    今天我们来介绍使用基于Tikz的pgfplots宏包绘制堆叠图.折线图和误差线的组合图形. 作图分析 本图的难点在于: 堆叠柱形图属于 ybar stacked类型的图,而折线图和误差线作图是另一种类 ...

  9. TikZ作图教程:图论篇—树图的绘制

    作者:Daniel 时间:2020年6月4日 本文介绍一个简单树图的绘制方法,领悟其中的思路以后,举一反三就可以画出更复杂的图了. 前一篇文章介绍了Tikz作图的优点:专业.精致.与LaTeX完美融合 ...

最新文章

  1. 高并发或高负载下的系统设计
  2. java 方法执行结束局部变量释放_JAVA-方法在执行过程中,JVM的内存分配和变化情况,栈(stack)的情况浅析...
  3. 织梦本地调试运行PHP不显示图片,织梦dedecms不能下载远程图片实现图片本地化解决方法...
  4. 从程序媛到微软全球 AKS 女掌门人,技术女神驾到!
  5. 多页面之间传递数据的方法
  6. 多重背包单调队列优化思路_多重背包问题
  7. 信息系统项目的应急预案方案_从环评到验收、排污许可证、应急预案,都应在项目什么阶段开展? 先后顺序是什么?...
  8. npm安装失败,哪位大神帮忙看一下
  9. 写给Git初学者的7个建议
  10. 浏览器从输入到输出的过程与原理一
  11. Qt编程之QtScript
  12. highchart 曲线图
  13. [C]我使用蜂鸣器敲了一首《极乐净土》
  14. java 工作流开发框架比较
  15. sla java_Grafana中滑动窗口的Prometheus正常运行时间或SLA百分比
  16. python--列表、数组扁平化
  17. 扔掉Windows 中的盗版软件,使用免费正版软件
  18. 微信小程序实现一些优惠券/卡券
  19. word2013中插入图片显示不全
  20. TM遥感影像波段/通道bands

热门文章

  1. 《魔兽世界》10个让你感动流泪的故事_马立杰_新浪博客
  2. Python代码在Pycharm中不起作用,但在Jupiter Notebook中执行良好
  3. 电量监测程序 c语言,基于单片机的电量检测系统设计方案.doc
  4. 夏普比率excel_在Excel中计算比率
  5. 850是什么意思_【铲车850代表什么意思】专区-850-铲车-铁甲网
  6. 极部落TrueChain公链训练营_长沙站[湘链技术社区]
  7. Python 伪开发者对于搜狐云景的测评
  8. greenDao小坑一个
  9. 维沃丫3手机微信无法连接服务器1.104,手机微信网络连接不可用?教你4个方法,轻松解决网络问题!...
  10. 工人级无人机,现在和未来可能都不会有垄断者出现