diff --git a/docs/_images/index_11_02.png b/docs/_images/index_11_02.png new file mode 100644 index 0000000..f1f2803 Binary files /dev/null and b/docs/_images/index_11_02.png differ diff --git a/docs/_images/index_12_0.png b/docs/_images/index_12_0.png index fee7cbd..b7f24aa 100644 Binary files a/docs/_images/index_12_0.png and b/docs/_images/index_12_0.png differ diff --git a/docs/_images/index_12_01.png b/docs/_images/index_12_01.png index 5605d5f..c962fba 100644 Binary files a/docs/_images/index_12_01.png and b/docs/_images/index_12_01.png differ diff --git a/docs/_images/index_14_01.png b/docs/_images/index_14_01.png index 0e4a367..5db20dd 100644 Binary files a/docs/_images/index_14_01.png and b/docs/_images/index_14_01.png differ diff --git a/docs/_images/index_14_03.png b/docs/_images/index_14_03.png new file mode 100644 index 0000000..1897ec9 Binary files /dev/null and b/docs/_images/index_14_03.png differ diff --git a/docs/_images/index_17_01.png b/docs/_images/index_17_01.png index 6eb8262..fcbc857 100644 Binary files a/docs/_images/index_17_01.png and b/docs/_images/index_17_01.png differ diff --git a/docs/_images/index_17_02.png b/docs/_images/index_17_02.png new file mode 100644 index 0000000..ca7223c Binary files /dev/null and b/docs/_images/index_17_02.png differ diff --git a/docs/_images/index_19_01.png b/docs/_images/index_19_01.png index fcbc857..7d39af1 100644 Binary files a/docs/_images/index_19_01.png and b/docs/_images/index_19_01.png differ diff --git a/docs/_images/index_19_02.png b/docs/_images/index_19_02.png new file mode 100644 index 0000000..6eb8262 Binary files /dev/null and b/docs/_images/index_19_02.png differ diff --git a/docs/_images/index_21_02.png b/docs/_images/index_21_02.png index 7d39af1..c5ba250 100644 Binary files a/docs/_images/index_21_02.png and b/docs/_images/index_21_02.png differ diff --git a/docs/_images/index_21_1.png b/docs/_images/index_21_1.png new file mode 100644 index 0000000..3a77703 Binary files /dev/null and b/docs/_images/index_21_1.png differ diff --git a/docs/_images/index_23_0.png b/docs/_images/index_23_0.png index a7f6388..f33a233 100644 Binary files a/docs/_images/index_23_0.png and b/docs/_images/index_23_0.png differ diff --git a/docs/_images/index_23_01.png b/docs/_images/index_23_01.png index c5ba250..11d8154 100644 Binary files a/docs/_images/index_23_01.png and b/docs/_images/index_23_01.png differ diff --git a/docs/_images/index_23_02.png b/docs/_images/index_23_02.png index 484e934..12b0cdc 100644 Binary files a/docs/_images/index_23_02.png and b/docs/_images/index_23_02.png differ diff --git a/docs/_images/index_25_01.png b/docs/_images/index_25_01.png index 11d8154..ff9aaba 100644 Binary files a/docs/_images/index_25_01.png and b/docs/_images/index_25_01.png differ diff --git a/docs/_images/index_25_02.png b/docs/_images/index_25_02.png index 78ce045..29a9b88 100644 Binary files a/docs/_images/index_25_02.png and b/docs/_images/index_25_02.png differ diff --git a/docs/_images/index_27_0.png b/docs/_images/index_27_0.png index ff98478..7f3c8bf 100644 Binary files a/docs/_images/index_27_0.png and b/docs/_images/index_27_0.png differ diff --git a/docs/_images/index_27_01.png b/docs/_images/index_27_01.png index ff9aaba..5197fd6 100644 Binary files a/docs/_images/index_27_01.png and b/docs/_images/index_27_01.png differ diff --git a/docs/_images/index_27_02.png b/docs/_images/index_27_02.png index f5e28df..484e934 100644 Binary files a/docs/_images/index_27_02.png and b/docs/_images/index_27_02.png differ diff --git a/docs/_images/index_29_0.png b/docs/_images/index_29_0.png index 2035786..78ce045 100644 Binary files a/docs/_images/index_29_0.png and b/docs/_images/index_29_0.png differ diff --git a/docs/_images/index_31_01.png b/docs/_images/index_31_01.png new file mode 100644 index 0000000..9d6e31b Binary files /dev/null and b/docs/_images/index_31_01.png differ diff --git a/docs/_images/index_33_01.png b/docs/_images/index_33_01.png new file mode 100644 index 0000000..d892206 Binary files /dev/null and b/docs/_images/index_33_01.png differ diff --git a/docs/_images/index_35_0.png b/docs/_images/index_35_0.png new file mode 100644 index 0000000..2eb74a4 Binary files /dev/null and b/docs/_images/index_35_0.png differ diff --git a/docs/_images/index_37_01.png b/docs/_images/index_37_01.png new file mode 100644 index 0000000..fe7c273 Binary files /dev/null and b/docs/_images/index_37_01.png differ diff --git a/docs/_images/index_39_0.png b/docs/_images/index_39_0.png index 68a2a12..b6d4afe 100644 Binary files a/docs/_images/index_39_0.png and b/docs/_images/index_39_0.png differ diff --git a/docs/_images/index_3_0.png b/docs/_images/index_3_0.png index 4bfa79a..3fb94b5 100644 Binary files a/docs/_images/index_3_0.png and b/docs/_images/index_3_0.png differ diff --git a/docs/_images/index_3_03.png b/docs/_images/index_3_03.png new file mode 100644 index 0000000..687ba25 Binary files /dev/null and b/docs/_images/index_3_03.png differ diff --git a/docs/_images/index_5_0.png b/docs/_images/index_5_0.png index 07682b3..bf4e8cb 100644 Binary files a/docs/_images/index_5_0.png and b/docs/_images/index_5_0.png differ diff --git a/docs/_images/index_5_02.png b/docs/_images/index_5_02.png new file mode 100644 index 0000000..df6adb3 Binary files /dev/null and b/docs/_images/index_5_02.png differ diff --git a/docs/_images/index_7_0.png b/docs/_images/index_7_0.png index 81bb3fa..247774b 100644 Binary files a/docs/_images/index_7_0.png and b/docs/_images/index_7_0.png differ diff --git a/docs/_images/index_7_03.png b/docs/_images/index_7_03.png new file mode 100644 index 0000000..bb37240 Binary files /dev/null and b/docs/_images/index_7_03.png differ diff --git a/docs/_images/index_9_0.png b/docs/_images/index_9_0.png index b377a2d..2bfc2a3 100644 Binary files a/docs/_images/index_9_0.png and b/docs/_images/index_9_0.png differ diff --git a/docs/_images/index_9_02.png b/docs/_images/index_9_02.png index 1897ec9..f7ce619 100644 Binary files a/docs/_images/index_9_02.png and b/docs/_images/index_9_02.png differ diff --git a/docs/_sources/第一回:Matplotlib初相识/index.md.txt b/docs/_sources/第一回:Matplotlib初相识/index.md.txt index f374653..a798aa4 100644 --- a/docs/_sources/第一回:Matplotlib初相识/index.md.txt +++ b/docs/_sources/第一回:Matplotlib初相识/index.md.txt @@ -167,6 +167,3 @@ ax.legend() ; - 请思考两种绘图模式的优缺点和各自适合的使用场景 - 在第五节绘图模板中我们是以OO模式作为例子展示的,请思考并写一个pyplot绘图模式的简单模板 -## 参考资料 - -[1.matplotlib官网用户指南](https://matplotlib.org/stable/tutorials/introductory/usage.html) \ No newline at end of file diff --git a/docs/_sources/第五回:样式色彩秀芳华/index.md.txt b/docs/_sources/第五回:样式色彩秀芳华/index.md.txt index 14f3945..c8f94b0 100644 --- a/docs/_sources/第五回:样式色彩秀芳华/index.md.txt +++ b/docs/_sources/第五回:样式色彩秀芳华/index.md.txt @@ -10,7 +10,7 @@ kernelspec: 第五回详细介绍matplotlib中样式和颜色的使用,绘图样式和颜色是丰富可视化图表的重要手段,因此熟练掌握本章可以让可视化图表变得更美观,突出重点和凸显艺术性。 -关于绘图样式,常见的有4种方法,分别是修改预定义样式,自定义样式,rcparams和matplotlibrc文件。 +关于绘图样式,常见的有3种方法,分别是修改预定义样式,自定义样式和rcparams。 关于颜色使用,本章介绍了常见的5种表示单色颜色的基本方法,以及colormap多色显示的方法。 ## 一、matplotlib的绘图样式(style) @@ -135,24 +135,6 @@ plt.plot([1,2,3,4],[2,3,4,5]); - - - - -### 4.修改matplotlibrc文件 - -由于matplotlib是使用matplotlibrc文件来控制样式的,也就是上一节提到的rc setting,所以我们还可以通过修改matplotlibrc文件的方式改变样式。 - - -```{code-cell} ipython3 -# 查找matplotlibrc文件的路径 -mpl.matplotlib_fname() -``` - -找到路径后,就可以直接编辑样式文件了,打开后看到的文件格式大致是这样的,文件中列举了所有的样式参数,找到想要修改的参数,比如lines.linewidth: 8,并将前面的注释符号去掉,此时再绘图发现样式以及生效了。 - -![](https://img-blog.csdnimg.cn/20201124005855980.PNG) - ## 二、matplotlib的色彩设置(color) 在可视化中,如何选择合适的颜色和搭配组合也是需要仔细考虑的,色彩选择要能够反映出可视化图像的主旨。 @@ -265,21 +247,9 @@ plt.scatter(x,y,c=x,cmap='RdPu'); ``` - - - - - - - - - 在以下官网页面可以查询上述五种colormap的字符串表示和颜色图的对应关系 [https://matplotlib.org/stable/tutorials/colors/colormaps.html](https://matplotlib.org/stable/tutorials/colors/colormaps.html) - -## 参考资料 -[1.matplotlib官网样式使用指南](https://matplotlib.org/stable/tutorials/introductory/customizing.html?highlight=rcparams) -[2.matplotlib官网色彩使用指南](https://matplotlib.org/stable/tutorials/colors/colors.html#sphx-glr-tutorials-colors-colors-py) - +## 思考题 +- 学习如何自定义colormap,并将其应用到任意一个数据集中,绘制一幅图像,注意colormap的类型要和数据集的特性相匹配,并做简单解释 diff --git a/docs/_sources/第四回:文字图例尽眉目/index.md.txt b/docs/_sources/第四回:文字图例尽眉目/index.md.txt index f1bfdc8..679c7ef 100644 --- a/docs/_sources/第四回:文字图例尽眉目/index.md.txt +++ b/docs/_sources/第四回:文字图例尽眉目/index.md.txt @@ -9,217 +9,211 @@ kernelspec: # 第四回:文字图例尽眉目 +```{code-cell} ipython3 +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +import matplotlib.dates as mdates +import datetime +``` ## 一、Figure和Axes上的文本 Matplotlib具有广泛的文本支持,包括对数学表达式的支持、对栅格和矢量输出的TrueType支持、具有任意旋转的换行分隔文本以及Unicode支持。 +### 1.文本API示例 + 下面的命令是介绍了通过pyplot API和objected-oriented API分别创建文本的方式。 +| pyplot API | OO API | description | +| ---------- | ------- | ------------ | +| `text` | `text` | 在子图axes的任意位置添加文本| +| `annotate` | `annotate` | 在子图axes的任意位置添加注解,包含指向性的箭头| +| `xlabel` | `set_xlabel` | 为子图axes添加x轴标签 | +| `ylabel` | `set_ylabel` | 为子图axes添加y轴标签 | +| `title` | `set_title` | 为子图axes添加标题 | +| `figtext` | `text` | 在画布figure的任意位置添加文本 | +| `suptitle` | `suptitle` | 为画布figure添加标题 | -| pyplot API | OO API | description | -| ---------- | ---------- | --------------------------- | -| text | text | 在 Axes的任意位置添加text | -| title | set_title | 在 Axes添加title | -| figtext | text | 在Figure的任意位置添加text. | -| suptitle | suptitle | 在 Figure添加title | -| xlabel | set_xlabel | 在Axes的x-axis添加label | -| ylabel | set_ylabel | 在Axes的y-axis添加label | - -### 1.text -pyplot API:matplotlib.pyplot.text(x, y, s, fontdict=None, \*\*kwargs) -OO API:Axes.text(self, x, y, s, fontdict=None, \*\*kwargs) -**参数**:此方法接受以下描述的参数: -s:此参数是要添加的文本。 -xy:此参数是放置文本的点(x,y)。 -fontdict:此参数是一个可选参数,并且是一个覆盖默认文本属性的字典。如果fontdict为None,则由rcParams确定默认值。 -**返回值**:此方法返回作为创建的文本实例的文本。 - -fontdict主要参数具体介绍,更多参数请参考[官网说明](https://matplotlib.org/api/text_api.html?highlight=text#matplotlib.text.Text): - - - -| Property | Description | -| ----------------------------------------- | :----------------------------------------------------------- | -| alpha | float or None 该参数指透明度,越接近0越透明,越接近1越不透明 | -| backgroundcolor | color | -| bbox | dict with properties for patches.FancyBboxPatch 这个是用来设置text周围的box外框 | -| color or c | color 指的是字体的颜色 | -| fontfamily or family | {FONTNAME, 'serif', 'sans-serif', 'cursive', 'fantasy', 'monospace'} 该参数指的是字体的类型 | -| fontproperties or font or font_properties | font_manager.FontProperties or str or pathlib.Path | -| fontsize or size | float or {'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'} 该参数指字体大小 | -| fontstretch or stretch | {a numeric value in range 0-1000, 'ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded'} 该参数是指从字体中选择正常、压缩或扩展的字体 | -| fontstyle or style | {'normal', 'italic', 'oblique'} 该参数是指字体的样式是否倾斜等 | -| fontweight or weight | {a numeric value in range 0-1000, 'ultralight', 'light', 'normal', 'regular', 'book', 'medium', 'roman', 'semibold', 'demibold', 'demi', 'bold', 'heavy', 'extra bold', 'black'} | -| horizontalalignment or ha | {'center', 'right', 'left'} 该参数是指选择文本左对齐右对齐还是居中对齐 | -| label | object | -| linespacing | float (multiple of font size) | -| position | (float, float) | -| rotation | float or {'vertical', 'horizontal'} 该参数是指text逆时针旋转的角度,“horizontal”等于0,“vertical”等于90。我们可以根据自己设定来选择合适角度 | -| verticalalignment or va | {'center', 'top', 'bottom', 'baseline', 'center_baseline'} | - - +通过一个综合例子,以OO模式展示这些API是如何控制一个图像中各部分的文本,在之后的章节我们再详细分析这些api的使用技巧 ```{code-cell} ipython3 -import numpy as np -import matplotlib.pyplot as plt -from matplotlib.font_manager import FontProperties -import numpy as np + +fig = plt.figure() +ax = fig.add_subplot() + + +# 分别为figure和ax设置标题,注意两者的位置是不同的 +fig.suptitle('bold figure suptitle', fontsize=14, fontweight='bold') +ax.set_title('axes title') + +# 设置x和y轴标签 +ax.set_xlabel('xlabel') +ax.set_ylabel('ylabel') + +# 设置x和y轴显示范围均为0到10 +ax.axis([0, 10, 0, 10]) + +# 在子图上添加文本 +ax.text(3, 8, 'boxed italics text in data coords', style='italic', + bbox={'facecolor': 'red', 'alpha': 0.5, 'pad': 10}) + +# 在画布上添加文本,一般在子图上添加文本是更常见的操作,这种方法很少用 +fig.text(0.4,0.8,'This is text for figure') + +ax.plot([2], [1], 'o') +# 添加注解 +ax.annotate('annotate', xy=(2, 1), xytext=(3, 4),arrowprops=dict(facecolor='black', shrink=0.05)); ``` +​ + + +### 2.text - 子图上的文本 + +text的调用方式为`Axes.text(x, y, s, fontdict=None, **kwargs) ` +其中`x`,`y`为文本出现的位置,默认状态下即为当前坐标系下的坐标值, +`s`为文本的内容, +`fontdict`是可选参数,用于覆盖默认的文本属性, +`**kwargs`为关键字参数,也可以用于传入文本样式参数 + +重点解释下fontdict和\*\*kwargs参数,这两种方式都可以用于调整呈现的文本样式,最终效果是一样的,不仅text方法,其他文本方法如set_xlabel,set_title等同样适用这两种方式修改样式。通过一个例子演示这两种方法是如何使用的。 + + ```{code-cell} ipython3 -#fontdict学习的案例 -#学习的过程中请尝试更换不同的fontdict字典的内容,以便于更好的掌握 -#---------设置字体样式,分别是字体,颜色,宽度,大小 -font1 = {'family': 'SimSun',#华文楷体 - 'alpha':0.7,#透明度 - 'color': 'purple', - 'weight': 'normal', - 'size': 16, - } -font2 = {'family': 'Times New Roman', - 'color': 'red', - 'weight': 'normal', - 'size': 16, - } -font3 = {'family': 'serif', - 'color': 'blue', - 'weight': 'bold', - 'size': 14, - } -font4 = {'family': 'Calibri', - 'color': 'navy', - 'weight': 'normal', - 'size': 17, - } -#-----------四种不同字体显示风格----- - -#-------建立函数---------- -x = np.linspace(0.0, 5.0, 100) -y = np.cos(2*np.pi*x) * np.exp(-x/3) -#-------绘制图像,添加标注---------- -plt.plot(x, y, '--') -plt.title('震荡曲线', fontdict=font1) -#------添加文本在指定的坐标处------------ -plt.text(2, 0.65, r'$\cos(2 \pi x) \exp(-x/3)$', fontdict=font2) -#---------设置坐标标签 -plt.xlabel('Y=time (s)', fontdict=font3) -plt.ylabel('X=voltage(mv)', fontdict=font4) - -# 调整图像边距 -plt.subplots_adjust(left=0.15) -plt.show() +fig = plt.figure(figsize=(10,3)) +axes = fig.subplots(1,2) + +# 使用关键字参数修改文本样式 +axes[0].text(0.3, 0.8, 'modify by **kwargs', style='italic', + bbox={'facecolor': 'red', 'alpha': 0.5, 'pad': 10}); + +# 使用fontdict参数修改文本样式 +font = {'bbox':{'facecolor': 'red', 'alpha': 0.5, 'pad': 10}, 'style':'italic'} +axes[1].text(0.3, 0.8, 'modify by fontdict', fontdict=font); ``` +​ + +​ -### 2.title和set_title -pyplot API:matplotlib.pyplot.title(label, fontdict=None, loc=None, pad=None, \*, y=None, \*\*kwargs) -OO API:Axes.set_title(self, label, fontdict=None, loc=None, pad=None, \*, y=None, \*\*kwargs) -该命令是用来设置axes的标题。 -**参数**:此方法接受以下描述的参数: -label:str,此参数是要添加的文本 -fontdict:dict,此参数是控制title文本的外观,默认fontdict如下: -```python -{'fontsize': rcParams['axes.titlesize'], - 'fontweight': rcParams['axes.titleweight'], - 'color': rcParams['axes.titlecolor'], - 'verticalalignment': 'baseline', - 'horizontalalignment': loc} -``` -loc:str,{'center', 'left', 'right'}默认为center -pad:float,该参数是指标题偏离图表顶部的距离,默认为6。 -y:float,该参数是title所在axes垂向的位置。默认值为1,即title位于axes的顶部。 -kwargs:该参数是指可以设置的一些奇特文本的属性。 -**返回值**:此方法返回作为创建的title实例的文本。 +matplotlib中所有支持的样式参数请参考[官网文档说明](https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text),大多数时候需要用到的时候再查询即可。 -### 3.figtext和text -pyplot API:matplotlib.pyplot.figtext(x, y, s, fontdict=None, \*\*kwargs) -OO API:text(self, x, y, s, fontdict=None,\*\*kwargs) -**参数**:此方法接受以下描述的参数: -x,y:float,此参数是指在figure中放置文本的位置。一般取值是在\[0,1\]范围内。使用transform关键字可以更改坐标系。 -s:str,此参数是指文本 -fontdict:dict,此参数是一个可选参数,并且是一个覆盖默认文本属性的字典。如果fontdict为None,则由rcParams确定默认值。 -**返回值**:此方法返回作为创建的文本实例的文本。 +下表列举了一些常用的参数供参考。 -### 4.suptitle -pyplot API:matplotlib.pyplot.suptitle(t, \*\*kwargs) -OO API:suptitle(self, t, \*\*kwargs) -**参数**:此方法接受以下描述的参数: -t: str,标题的文本 -x:float,默认值是0.5.该参数是指文本在figure坐标系下的x坐标 -y:float,默认值是0.95.该参数是指文本在figure坐标系下的y坐标 -horizontalalignment, ha:该参数是指选择文本水平对齐方式,有三种选择{'center', 'left', right'},默认值是 'center' -verticalalignment, va:该参数是指选择文本垂直对齐方式,有四种选择{'top', 'center', 'bottom', 'baseline'},默认值是 'top' -fontsize, size:该参数是指文本的大小,默认值是依据rcParams的设置:rcParams["figure.titlesize"] (default: 'large') -fontweight, weight:该参数是用来设置字重。默认值是依据rcParams的设置:rcParams["figure.titleweight"] (default: 'normal') -fontproperties:None or dict,该参数是可选参数,如果该参数被指定,字体的大小将从该参数的默认值中提取。 -**返回值**:此方法返回作为创建的title实例的文本。 +| Property | Description | +| ------------------------ | :-------------------------- | +| `alpha` |float or None 透明度,越接近0越透明,越接近1越不透明 | +| `backgroundcolor` | color 文本的背景颜色 | +| `bbox` | dict with properties for patches.FancyBboxPatch 用来设置text周围的box外框 | +| `color` or c | color 字体的颜色 | +| `fontfamily` or family | {FONTNAME, 'serif', 'sans-serif', 'cursive', 'fantasy', 'monospace'} 字体的类型| +| `fontsize` or size | float or {'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'} 字体大小| +| `fontstyle` or style | {'normal', 'italic', 'oblique'} 字体的样式是否倾斜等 | +| `fontweight` or weight | {a numeric value in range 0-1000, 'ultralight', 'light', 'normal', 'regular', 'book', 'medium', 'roman', 'semibold', 'demibold', 'demi', 'bold', 'heavy', 'extra bold', 'black'} 文本粗细| +| `horizontalalignment` or ha | {'center', 'right', 'left'} 选择文本左对齐右对齐还是居中对齐 | +| `linespacing` | float (multiple of font size) 文本间距 | +| `rotation` | float or {'vertical', 'horizontal'} 指text逆时针旋转的角度,“horizontal”等于0,“vertical”等于90 | +| `verticalalignment` or va | {'center', 'top', 'bottom', 'baseline', 'center_baseline'} 文本在垂直角度的对齐方式 | -### 5.xlabel和ylabel -pyplot API:matplotlib.pyplot.xlabel(xlabel, fontdict=None, labelpad=None, \*, loc=None, \*\*kwargs) -     matplotlib.pyplot.ylabel(ylabel, fontdict=None, labelpad=None,\*, loc=None, \*\*kwargs) -OO API:  Axes.set_xlabel(self, xlabel, fontdict=None, labelpad=None, \*, loc=None, \*\*kwargs) -     Axes.set_ylabel(self, ylabel, fontdict=None, labelpad=None,\*, loc=None, \*\*kwargs) -**参数**:此方法接受以下描述的参数: -xlabel或者ylabel:label的文本 -labelpad:设置label距离轴(axis)的距离 -loc:{'left', 'center', 'right'},默认为center -\*\*kwargs:[文本](https://matplotlib.org/api/text_api.html#matplotlib.text.Text)属性 -**返回值**:此方法返回作为创建的xlabel和ylabel实例的文本。 + + +### 3.xlabel和ylabel - 子图的x,y轴标签 + +xlabel的调用方式为`Axes.set_xlabel(xlabel, fontdict=None, labelpad=None, *, loc=None, **kwargs)` +ylabel方式类似,这里不重复写出。 +其中`xlabel`即为标签内容, +`fontdict`和`**kwargs`用来修改样式,上一小节已介绍, +`labelpad`为标签和坐标轴的距离,默认为4, +`loc`为标签位置,可选的值为'left', 'center', 'right'之一,默认为居中 ```{code-cell} ipython3 -#文本属性的输入一种是通过**kwargs属性这种方式,一种是通过操作 matplotlib.font_manager.FontProperties 方法 -#该案例中对于x_label采用**kwargs调整字体属性,y_label则采用 matplotlib.font_manager.FontProperties 方法调整字体属性 -#该链接是FontProperties方法的介绍 https://matplotlib.org/api/font_manager_api.html#matplotlib.font_manager.FontProperties -x1 = np.linspace(0.0, 5.0, 100) -y1 = np.cos(2 * np.pi * x1) * np.exp(-x1) +# 观察labelpad和loc参数的使用效果 +fig = plt.figure(figsize=(10,3)) +axes = fig.subplots(1,2) +axes[0].set_xlabel('xlabel',labelpad=20,loc='left') -font = FontProperties() -font.set_family('serif') -font.set_name('Times New Roman') -font.set_style('italic') - -fig, ax = plt.subplots(figsize=(5, 3)) -fig.subplots_adjust(bottom=0.15, left=0.2) -ax.plot(x1, y1) -ax.set_xlabel('time [s]', fontsize='large', fontweight='bold') -ax.set_ylabel('Damped oscillation [V]', fontproperties=font) - -plt.show() +# loc参数仅能提供粗略的位置调整,如果想要更精确的设置标签的位置,可以使用position参数+horizontalalignment参数来定位 +# position由一个元组过程,第一个元素0.2表示x轴标签在x轴的位置,第二个元素对于xlabel其实是无意义的,随便填一个数都可以 +# horizontalalignment='left'表示左对齐,这样设置后x轴标签就能精确定位在x=0.2的位置处 +axes[1].set_xlabel('xlabel', position=(0.2, _), horizontalalignment='left'); ``` +​ +​ + + +### 4.title和suptitle - 子图和画布的标题 + +title的调用方式为`Axes.set_title(label, fontdict=None, loc=None, pad=None, *, y=None, **kwargs)` +其中label为子图标签的内容,`fontdict`,`loc`,`**kwargs`和之前小节相同不重复介绍 +`pad`是指标题偏离图表顶部的距离,默认为6 +`y`是title所在子图垂向的位置。默认值为1,即title位于子图的顶部。 + +suptitle的调用方式为`figure.suptitle(t, **kwargs)` +其中`t`为画布的标题内容 + + +```{code-cell} ipython3 +# 观察pad参数的使用效果 +fig = plt.figure(figsize=(10,3)) +fig.suptitle('This is figure title',y=1.2) # 通过参数y设置高度 +axes = fig.subplots(1,2) +axes[0].set_title('This is title',pad=15) +axes[1].set_title('This is title',pad=6); +``` + + +​ + +​ + + +### 5.annotate - 子图的注解 + +annotate的调用方式为`Axes.annotate(text, xy, *args, **kwargs)` +其中`text`为注解的内容, +`xy`为注解箭头指向的坐标, +其他常用的参数包括: +`xytext`为注解文字的坐标, +`xycoords`用来定义xy参数的坐标系, +`textcoords`用来定义xytext参数的坐标系, +`arrowprops`用来定义指向箭头的样式 +annotate的参数非常复杂,这里仅仅展示一个简单的例子,更多参数可以查看[官方文档中的annotate介绍](https://matplotlib.org/stable/tutorials/text/annotations.html#plotting-guide-annotation) + + +```{code-cell} ipython3 +fig = plt.figure() +ax = fig.add_subplot() +ax.annotate("", + xy=(0.2, 0.2), xycoords='data', + xytext=(0.8, 0.8), textcoords='data', + arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=0.2") + ); +``` + + +​ + +​ ### 6.字体的属性设置 字体设置一般有全局字体设置和自定义局部字体设置两种方法。 - -```{code-cell} ipython3 -#首先可以查看matplotlib所有可用的字体 -from matplotlib import font_manager -font_family = font_manager.fontManager.ttflist -font_name_list = [i.name for i in font_family] -for font in font_name_list[:10]: - print(f'{font}\n') -``` - -​ - - [为方便在图中加入合适的字体,可以尝试了解中文字体的英文名称,该链接告诉了常用中文的英文名称](https://www.cnblogs.com/chendc/p/9298832.html) ```{code-cell} ipython3 #该block讲述如何在matplotlib里面,修改字体默认属性,完成全局字体的更改。 -import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimSun'] # 指定默认字体为新宋体。 plt.rcParams['axes.unicode_minus'] = False # 解决保存图像时 负号'-' 显示为方块和报错的问题。 ``` @@ -227,111 +221,20 @@ plt.rcParams['axes.unicode_minus'] = False # 解决保存图像时 负号'- ```{code-cell} ipython3 #局部字体的修改方法1 -import matplotlib.pyplot as plt -import matplotlib.font_manager as fontmg - x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] plt.plot(x, label='小示例图标签') -# 直接用字体的名字。 +# 直接用字体的名字 plt.xlabel('x 轴名称参数', fontproperties='Microsoft YaHei', fontsize=16) # 设置x轴名称,采用微软雅黑字体 plt.ylabel('y 轴名称参数', fontproperties='Microsoft YaHei', fontsize=14) # 设置Y轴名称 plt.title('坐标系的标题', fontproperties='Microsoft YaHei', fontsize=20) # 设置坐标系标题的字体 -plt.legend(loc='lower right', prop={"family": 'Microsoft YaHei'}, fontsize=10); # 小示例图的字体设置 +plt.legend(loc='lower right', prop={"family": 'Microsoft YaHei'}, fontsize=10) ; # 小示例图的字体设置 ``` +​ - - - - -```{code-cell} ipython3 -#局部字体的修改方法2 -import matplotlib.pyplot as plt -import matplotlib.font_manager as fontmg - -x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] -plt.plot(x, label='小示例图标签') -#fname为你系统中的字体库路径 -my_font1 = fontmg.FontProperties(fname=r'C:\Windows\Fonts\simhei.ttf') # 读取系统中的 黑体 字体。 -my_font2 = fontmg.FontProperties(fname=r'C:\Windows\Fonts\simkai.ttf') # 读取系统中的 楷体 字体。 -# fontproperties 设置中文显示,fontsize 设置字体大小 -plt.xlabel('x 轴名称参数', fontproperties=my_font1, fontsize=16) # 设置x轴名称 -plt.ylabel('y 轴名称参数', fontproperties=my_font1, fontsize=14) # 设置Y轴名称 -plt.title('坐标系的标题', fontproperties=my_font2, fontsize=20) # 标题的字体设置 -plt.legend(loc='lower right', prop=my_font1, fontsize=10); # 小示例图的字体设置 - -``` - - - - - - -### 7.数学表达式 -在文本标签中使用数学表达式。有关MathText的概述,请参见 [写数学表达式](https://matplotlib.org/tutorials/text/mathtext.html#sphx-glr-tutorials-text-mathtext-py),但由于数学表达式的练习想必我们都在markdown语法和latex语法中多少有接触,故在此不继续展开,愿意深入学习的可以参看官方文档.下面是一个官方案例,供参考了解。 - - -```{code-cell} ipython3 -import numpy as np -import matplotlib.pyplot as plt -t = np.arange(0.0, 2.0, 0.01) -s = np.sin(2*np.pi*t) - -plt.plot(t, s) -plt.title(r'$\alpha_i > \beta_i$', fontsize=20) -plt.text(1, -0.6, r'$\sum_{i=0}^\infty x_i$', fontsize=20) -plt.text(0.6, 0.6, r'$\mathcal{A}\mathrm{sin}(2 \omega t)$', - fontsize=20) -plt.xlabel('time (s)') -plt.ylabel('volts (mV)') -plt.show() -``` - - - - - - -```{code-cell} ipython3 -#这是对前七节学习内容的总结案例 -import matplotlib -import matplotlib.pyplot as plt - -fig = plt.figure() -ax = fig.add_subplot(111) -fig.subplots_adjust(top=0.85) - -# 分别在figure和subplot上设置title -fig.suptitle('bold figure suptitle', fontsize=14, fontweight='bold') -ax.set_title('axes title') - -ax.set_xlabel('xlabel') -ax.set_ylabel('ylabel') - -# 设置x-axis和y-axis的范围都是[0, 10] -ax.axis([0, 10, 0, 10]) - -ax.text(3, 8, 'boxed italics text in data coords', style='italic', - bbox={'facecolor': 'red', 'alpha': 0.5, 'pad': 10}) - -ax.text(2, 6, r'an equation: $E=mc^2$', fontsize=15) -font1 = {'family': 'Times New Roman', - 'color': 'purple', - 'weight': 'normal', - 'size': 10, - } -ax.text(3, 2, 'unicode: Institut für Festkörperphysik',fontdict=font1) -ax.text(0.95, 0.01, 'colored text in axes coords', - verticalalignment='bottom', horizontalalignment='right', - transform=ax.transAxes, - color='green', fontsize=15) - -plt.show() -``` - - +​ ## 二、Tick上的文本 @@ -343,9 +246,6 @@ plt.show() ```{code-cell} ipython3 -import matplotlib.pyplot as plt -import numpy as np -import matplotlib x1 = np.linspace(0.0, 5.0, 100) y1 = np.cos(2 * np.pi * x1) * np.exp(-x1) ``` @@ -356,12 +256,13 @@ y1 = np.cos(2 * np.pi * x1) * np.exp(-x1) fig, axs = plt.subplots(2, 1, figsize=(5, 3), tight_layout=True) axs[0].plot(x1, y1) axs[1].plot(x1, y1) -axs[1].xaxis.set_ticks(np.arange(0., 10.1, 2.)) -plt.show() +axs[1].xaxis.set_ticks(np.arange(0., 10.1, 2.)); ``` +​ +​ @@ -373,11 +274,13 @@ axs[1].plot(x1, y1) ticks = np.arange(0., 8.1, 2.) tickla = [f'{tick:1.2f}' for tick in ticks] axs[1].xaxis.set_ticks(ticks) -axs[1].xaxis.set_ticklabels(tickla) -plt.show() +axs[1].xaxis.set_ticklabels(tickla); ``` +​ + +​ @@ -397,12 +300,16 @@ axs[1].set_xticks([0,1,2,3,4,5,6])#要将x轴的刻度放在数据范围中的 axs[1].set_xticklabels(['zero','one', 'two', 'three', 'four', 'five','six'],#设置刻度对应的标签 rotation=30, fontsize='small')#rotation选项设定x刻度标签倾斜30度。 axs[1].xaxis.set_ticks_position('bottom')#set_ticks_position()方法是用来设置刻度所在的位置,常用的参数有bottom、top、both、none -print(axs[1].xaxis.get_ticklines()) -plt.show() +print(axs[1].xaxis.get_ticklines()); ``` -​ + + + + + + ### 2.Tick Locators and Formatters @@ -428,13 +335,13 @@ formatter = matplotlib.ticker.FormatStrFormatter('-%1.1f') axs[1, 0].xaxis.set_major_formatter(formatter) formatter = matplotlib.ticker.FormatStrFormatter('%1.5f') -axs[1, 1].xaxis.set_major_formatter(formatter) - -plt.show() +axs[1, 1].xaxis.set_major_formatter(formatter); ``` +​ + ```{code-cell} ipython3 @@ -448,12 +355,13 @@ def formatoddticks(x, pos): fig, ax = plt.subplots(figsize=(5, 3), tight_layout=True) ax.plot(x1, y1) -ax.xaxis.set_major_formatter(formatoddticks) -plt.show() +ax.xaxis.set_major_formatter(formatoddticks); ``` +​ +​ #### b) Tick Locators @@ -486,21 +394,19 @@ axs[1, 0].xaxis.set_major_locator(locator) locator = matplotlib.ticker.FixedLocator([0,7,14,21,28]) -axs[1, 1].xaxis.set_major_locator(locator) - -plt.show() +axs[1, 1].xaxis.set_major_locator(locator); ``` +​ +​ 此外`matplotlib.dates` 模块还提供了特殊的设置日期型刻度格式和位置的方式 ```{code-cell} ipython3 -import matplotlib.dates as mdates -import datetime # 特殊的日期型locator和formatter locator = mdates.DayLocator(bymonthday=[1,15,25]) formatter = mdates.DateFormatter('%b %d') @@ -511,158 +417,117 @@ ax.xaxis.set_major_formatter(formatter) base = datetime.datetime(2017, 1, 1, 0, 0, 1) time = [base + datetime.timedelta(days=x) for x in range(len(x1))] ax.plot(time, y1) -ax.tick_params(axis='x', rotation=70) -plt.show() +ax.tick_params(axis='x', rotation=70); ``` +​ -**其他进阶案例** +## 三、legend(图例) - -```{code-cell} ipython3 -#这个案例中展示了如何进行坐标轴的移动,如何更改刻度值的样式 -import matplotlib.pyplot as plt -import numpy as np -x = np.linspace(-3,3,50) -y1 = 2*x+1 -y2 = x**2 -plt.figure() -plt.plot(x,y2) -plt.plot(x,y1,color='red',linewidth=1.0,linestyle = '--') -plt.xlim((-3,5)) -plt.ylim((-3,5)) -plt.xlabel('x') -plt.ylabel('y') -new_ticks1 = np.linspace(-3,5,5) -plt.xticks(new_ticks1) -plt.yticks([-2,0,2,5],[r'$one\ shu$',r'$\alpha$',r'$three$',r'four']) -''' -上一行代码是将y轴上的小标改成文字,其中,空格需要增加\,即'\ ',$可将格式更改成数字模式,如果需要输入数学形式的α,则需要用\转换,即\alpha -如果使用面向对象的命令进行画图,那么下面两行代码可以实现与 plt.yticks([-2,0,2,5],[r'$one\ shu$',r'$\alpha$',r'$three$',r'four']) 同样的功能 -axs.set_yticks([-2,0,2,5]) -axs.set_yticklabels([r'$one\ shu$',r'$\alpha$',r'$three$',r'four']) -''' -ax = plt.gca()#gca = 'get current axes' 获取现在的轴 -''' -ax = plt.gca()是获取当前的axes,其中gca代表的是get current axes。 -fig=plt.gcf是获取当前的figure,其中gcf代表的是get current figure。 - -许多函数都是对当前的Figure或Axes对象进行处理, -例如plt.plot()实际上会通过plt.gca()获得当前的Axes对象ax,然后再调用ax.plot()方法实现真正的绘图。 - -而在本例中则可以通过ax.spines方法获得当前顶部和右边的轴并将其颜色设置为不可见 -然后将左边轴和底部的轴所在的位置重新设置 -最后再通过set_ticks_position方法设置ticks在x轴或y轴的位置,本示例中因所设置的bottom和left是ticks在x轴或y轴的默认值,所以这两行的代码也可以不写 -''' -ax.spines['top'].set_color('none') -ax.spines['right'].set_color('none') -ax.spines['left'].set_position(('data',0)) -ax.spines['bottom'].set_position(('data',0))#axes 百分比 -ax.xaxis.set_ticks_position('bottom') #设置ticks在x轴的位置 -ax.yaxis.set_ticks_position('left') #设置ticks在y轴的位置 -plt.show() -``` - - - - - -## 三、[legend](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.legend.html#matplotlib.pyplot.legend)(图例) - -图例的设置会使用一些常见术语,为了清楚起见,这些术语在此处进行说明: -** legend entry(图例条目)** -图例有一个或多个legend entries组成。一个entry由一个key和一个label组成。 -** legend key(图例键)** -每个 legend label左面的colored/patterned marker(彩色/图案标记) -** legend label(图例标签)** -描述由key来表示的handle的文本 -** legend handle(图例句柄)** -用于在图例中生成适当图例条目的原始对象 +在具体学习图例之前,首先解释几个术语: +**legend entry(图例条目)** +每个图例由一个或多个legend entries组成。一个entry包含一个key和其对应的label。 +**legend key(图例键)** +每个legend label左面的colored/patterned marker(彩色/图案标记) +**legend label(图例标签)** +描述由key来表示的handle的文本 +**legend handle(图例句柄)** +用于在图例中生成适当图例条目的原始对象 以下面这个图为例,右侧的方框中的共有两个legend entry;两个legend key,分别是一个蓝色和一个黄色的legend key;两个legend label,一个名为‘Line up’和一个名为‘Line Down’的legend label +![](https://img-blog.csdnimg.cn/1442273f150044139d54b6c2c6384e37.png) -常用的几个参数: - -(1)设置图列位置 - -plt.legend(loc='upper center') 等同于plt.legend(loc=9),对应关系如下表。 - - - -| loc by number | loc by text | -| ------------- | -------------- | -| 0 | 'best' | -| 1 | 'upper right' | -| 2 | 'upper left' | -| 3 | 'lower left' | -| 4 | 'lower right' | -| 5 | 'right' | -| 6 | 'center left' | -| 7 | 'center right' | -| 8 | 'lower center' | -| 9 | 'upper center' | -| 10 | 'center' | - - -(2)设置图例字体大小 - -fontsize : int or float or {‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’, ‘x-large’, ‘xx-large’} - -(3)设置图例边框及背景 - -plt.legend(loc='best',frameon=False) #去掉图例边框 -plt.legend(loc='best',edgecolor='blue') #设置图例边框颜色 -plt.legend(loc='best',facecolor='blue') #设置图例背景颜色,若无边框,参数无效 - -(4)设置图例标题 - -legend = plt.legend(["CH", "US"], title='China VS Us') - -(5)设置图例名字及对应关系 - -legend = plt.legend([p1, p2], ["CH", "US"]) +图例的绘制同样有OO模式和pyplot模式两种方式,写法都是一样的,使用legend()即可调用。 +以下面的代码为例,在使用legend方法时,我们可以手动传入两个变量,句柄和标签,用以指定条目中的特定绘图对象和显示的标签值。 +当然通常更简单的操作是不传入任何参数,此时matplotlib会自动寻找合适的图例条目。 ```{code-cell} ipython3 -line_up, = plt.plot([1, 2, 3], label='Line 2') -line_down, = plt.plot([3, 2, 1], label='Line 1') -plt.legend([line_up, line_down], ['Line Up', 'Line Down'],loc=5, title='line',frameon=False);#loc参数设置图例所在的位置,title设置图例的标题,frameon参数将图例边框给去掉 +fig, ax = plt.subplots() +line_up, = ax.plot([1, 2, 3], label='Line 2') +line_down, = ax.plot([3, 2, 1], label='Line 1') +ax.legend(handles = [line_up, line_down], labels = ['Line Up', 'Line Down']); ``` +legend其他常用的几个参数如下: + +**设置图例位置** +loc参数接收一个字符串或数字表示图例出现的位置 +ax.legend(loc='upper center') 等同于ax.legend(loc=9) +| Location String | Location Code | +| --------------- | ------------- | +| 'best' | 0 | +| 'upper right' | 1 | +| 'upper left' | 2 | +| 'lower left' | 3 | +| 'lower right' | 4 | +| 'right' | 5 | +| 'center left' | 6 | +| 'center right' | 7 | +| 'lower center' | 8 | +| 'upper center' | 9 | +| 'center' | 10 | ```{code-cell} ipython3 -#这个案例是显示多图例legend -import matplotlib.pyplot as plt -import numpy as np -x = np.random.uniform(-1, 1, 4) -y = np.random.uniform(-1, 1, 4) -p1, = plt.plot([1,2,3]) -p2, = plt.plot([3,2,1]) -l1 = plt.legend([p2, p1], ["line 2", "line 1"], loc='upper left') - -p3 = plt.scatter(x[0:2], y[0:2], marker = 'D', color='r') -p4 = plt.scatter(x[2:], y[2:], marker = 'D', color='g') -# 下面这行代码由于添加了新的legend,所以会将l1从legend中给移除 -plt.legend([p3, p4], ['label', 'label1'], loc='lower right', scatterpoints=1) -# 为了保留之前的l1这个legend,所以必须要通过plt.gca()获得当前的axes,然后将l1作为单独的artist -plt.gca().add_artist(l1); +fig,axes = plt.subplots(1,4,figsize=(10,4)) +for i in range(4): + axes[i].plot([0.5],[0.5]) + axes[i].legend(labels='a',loc=i) # 观察loc参数传入不同值时图例的位置 +fig.tight_layout() ``` +​ + +​ +**设置图例边框及背景** -## 参考资料 +```{code-cell} ipython3 +fig = plt.figure(figsize=(10,3)) +axes = fig.subplots(1,3) +for i, ax in enumerate(axes): + ax.plot([1,2,3],label=f'ax {i}') +axes[0].legend(frameon=False) #去掉图例边框 +axes[1].legend(edgecolor='blue') #设置图例边框颜色 +axes[2].legend(facecolor='gray'); #设置图例背景颜色,若无边框,参数无效 +``` -[1.matplotlib官网文字使用指南](https://matplotlib.org/stable/tutorials/text/text_intro.html#sphx-glr-tutorials-text-text-intro-py -) + +​ + + +**设置图例标题** + + +```{code-cell} ipython3 +fig,ax =plt.subplots() +ax.plot([1,2,3],label='label') +ax.legend(title='legend title'); +``` + + +​ + +​ + + +## 思考题 +- 请尝试使用两种方式模仿画出下面的图表(重点是柱状图上的标签),本文学习的text方法和matplotlib自带的柱状图标签方法bar_label +![](https://img-blog.csdnimg.cn/99bc6e007eb34fc09015589d56c6eafc.png) + + +```{code-cell} ipython3 + +``` diff --git a/docs/index.html b/docs/index.html index 925f18f..5d3a991 100644 --- a/docs/index.html +++ b/docs/index.html @@ -199,7 +199,6 @@
  • 四、两种绘图接口
  • 五、通用绘图模板
  • 思考题
  • -
  • 参考资料
  • 第二回:艺术画笔见乾坤
  • 第五回:样式色彩秀芳华
  • diff --git a/docs/searchindex.js b/docs/searchindex.js index f6d9f16..4b6d4ac 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["index","\u7b2c\u4e00\u56de\uff1aMatplotlib\u521d\u76f8\u8bc6/index","\u7b2c\u4e09\u56de\uff1a\u5e03\u5c40\u683c\u5f0f\u5b9a\u65b9\u5706/index","\u7b2c\u4e8c\u56de\uff1a\u827a\u672f\u753b\u7b14\u89c1\u4e7e\u5764/index","\u7b2c\u4e94\u56de\uff1a\u6837\u5f0f\u8272\u5f69\u79c0\u82b3\u534e/index","\u7b2c\u56db\u56de\uff1a\u6587\u5b57\u56fe\u4f8b\u5c3d\u7709\u76ee/index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["index.md","\u7b2c\u4e00\u56de\uff1aMatplotlib\u521d\u76f8\u8bc6\\index.md","\u7b2c\u4e09\u56de\uff1a\u5e03\u5c40\u683c\u5f0f\u5b9a\u65b9\u5706\\index.md","\u7b2c\u4e8c\u56de\uff1a\u827a\u672f\u753b\u7b14\u89c1\u4e7e\u5764\\index.md","\u7b2c\u4e94\u56de\uff1a\u6837\u5f0f\u8272\u5f69\u79c0\u82b3\u534e\\index.md","\u7b2c\u56db\u56de\uff1a\u6587\u5b57\u56fe\u4f8b\u5c3d\u7709\u76ee\\index.md"],objects:{},objnames:{},objtypes:{},terms:{"01":[3,5],"03":2,"05":[2,3],"0f0f0f":4,"0f0f0f80":4,"0x23155916dc0":1,"10":[2,3,4,5],"100":[1,3,5],"1000":[2,3,5],"101":3,"111":[3,5],"125":3,"14":5,"15":[3,5],"150":2,"16":[2,3,4,5],"162":3,"17":[3,5],"1f":[3,5],"20":[2,3,4,5],"200":2,"2017":5,"21":5,"211":3,"24":4,"25":[3,5],"26":4,"28":5,"2d":1,"2f":[3,5],"30":[3,5],"324":3,"343182":3,"360":3,"45":3,"50":[4,5],"536818":3,"54":3,"5f":5,"65":5,"70":[2,5],"75":2,"775x0":3,"85":5,"90":[3,5],"95":[3,5],"class":3,"default":[3,4,5],"float":5,"for":[2,3,5],"if":[2,5],"import":[1,2,3,4,5],"in":[2,3,5],"int":[3,5],"new":5,"return":5,"true":[2,3,5],"with":5,_classic_test_patch:4,abcd:2,add:3,add_artist:5,add_ax:3,add_collect:3,add_gridspec:2,add_lin:3,add_patch:3,add_subplot:[2,3,5],ai:3,align:3,all:3,alpha:[2,3,4,5],alpha_i:5,an:5,anchor:2,and:4,angl:3,annot:2,antialias:3,api:[1,5],arang:[3,5],area:2,arg:3,arrai:3,arrow:2,arrowprop:2,artist:5,as:[1,2,3,4,5],ascend:3,aspect:3,ast_node_interact:3,astyp:3,at:1,autoloc:5,autopct:3,avail:4,ax1:3,ax2:3,ax:[1,2,3,5],axes:[0,1,2,4],axesimag:3,axessubplot:3,axhlin:2,axi:[1,5],axlin:2,axs:[2,3,5],axvlin:2,backend_bas:3,backgroundcolor:5,bar:[2,3],barh:2,barsabov:3,barstack:3,base:5,baselin:5,bbox:5,bessel:3,best:[2,5],beta_i:5,bicub:3,bilinear:3,bin:3,black:[2,4,5],block:5,blue:[2,3,4,5],bmh:4,bold:5,book:5,bool:3,both:[3,5],bottom:[3,5],box:5,bright:4,by:5,bymonthdai:5,calibri:5,canva:3,capsiz:3,capstyl:3,capthick:3,catrom:3,center:[2,3,5],center_baselin:5,ch:5,china:5,circl:3,circlecollect:3,classic:4,close:3,cmap:[2,3,4],co:3,code:2,color:[0,2,3,5],colorblind10:4,colorblind:4,colorhexa:4,column:3,com:4,condens:5,contain:[0,1],coord:5,core:3,cos:5,count:3,counterclock:3,cubic:1,current:[3,5],cursiv:5,cut:3,cyan:4,cyclic:4,dai:5,damp:5,dark:4,dark_background:4,darkgrid:4,dash_capstyl:3,dash_joinstyl:3,data:[3,4,5],data_interv:3,datafram:3,date:5,dateformatt:5,datetim:5,dayloc:5,deep:4,def:5,dejavu:5,delax:3,demi:5,demibold:5,demo:4,densiti:3,descript:5,df:3,df_cnt:3,dict:[2,5],displai:5,diverg:4,dog:3,down:5,drawn:3,drawstyl:3,drop:3,echart:4,ecolor:3,edgecolor:[2,3,5],elinewidth:3,els:[2,5],ensur:3,entri:5,enumer:5,equal:3,equat:5,error:3,errorbar:3,erroreveri:3,exp:5,expand:5,explod:3,extent:3,extra:5,facecolor:[2,3,5],fals:[2,3,5],famili:5,fancybboxpatch:5,fantasi:5,fast:4,fenzu:3,festk:5,fig1:3,fig:[1,2,3,5],figsiz:[2,3,5],figur:[0,2],figurecanva:3,figureimag:3,file:4,fill:3,fillstyl:3,filternorm:3,filterrad:3,findal:3,first:3,five:5,fivethirtyeight:4,fixedloc:5,flat:[3,5],fmt:3,fname:5,font1:5,font2:5,font3:5,font4:5,font:[2,5],font_famili:5,font_manag:5,font_manager_api:5,font_name_list:5,font_properti:5,fontdict:5,fontfamili:5,fontmanag:5,fontmg:5,fontnam:5,fontproperti:5,fontsiz:[2,5],fontstretch:5,fontstyl:5,fontweight:5,format:5,formatoddtick:5,formatstrformatt:[3,5],formatt:3,four:5,frame:3,frameon:5,frog:3,from:[3,5],fuchsia:3,full:3,funcformatt:5,gaussian:3,gca:5,gcf:5,get:5,get_data_interv:3,get_ticklabel:3,get_ticklin:[3,5],get_tickloc:3,get_view_interv:3,ggplot:4,grayscal:4,green:[2,3,4,5],grid:[2,3],gridlin:3,ha:5,ham:3,han:3,handl:5,hatch:3,head_length:2,head_width:2,heavi:5,height:3,height_ratio:2,hermit:3,hist:[2,3],histtyp:3,hog:3,horizont:5,horizontalalign:5,hsv:2,html:[4,5],http:[4,5],imlim:3,imshow:3,include_lowest:3,index:3,indexloc:5,infti:5,inplac:3,institut:5,interactiveshel:3,interp_method:3,interpol:3,ipython:[1,3],is:3,ital:5,joinstyl:3,jupyt:1,kaiser:3,kei:5,kwarg:[3,5],l1:5,label1:[3,5],label2:3,label:[1,2,3,5],labelcolor:3,labeldist:3,labelleft:3,labelpad:5,labelright:3,labels:4,lambda:3,lanczo:3,larg:5,latex:5,left:[2,3,5],legend:[0,1,2,3],len:[3,5],lib:4,light:5,lightgoldenrodyellow:3,lightslategrai:3,limit:3,line1:2,line2d:[1,5],line:[1,4,5],line_down:5,line_up:5,linear:[1,3],linearloc:5,linespac:5,linestyl:[1,3,4,5],linewidth:[1,3,4,5],linspac:[1,3,5],list:[2,5],loc:[2,3,5],locat:3,log:[2,3],lolim:3,lower:[2,5],lw:3,magenta:4,major:3,map:3,markdown:5,marker:[3,5],markeredgecolor:3,markeredgewidth:3,markerfacecolor:3,markerfacecoloralt:3,markers:[3,4],markeveri:3,mathcal:5,mathrm:5,mathtext:5,matlab:1,matplotlib:[0,2,5],matplotlib_fnam:4,max:3,maxi:3,maxnloc:5,mc:5,mdate:5,medium:5,method:3,microsoft:5,mid:3,min:3,mini:3,minor:3,miscellan:4,mitchel:3,mono:5,monospac:5,mpl:[1,4],mplstyle:4,multipl:5,multipleloc:5,mute:4,mv:5,my_font1:5,my_font2:5,name:5,navi:5,nbin:5,ncol:[2,3],nearest:3,new_ticks1:5,none:[3,5],norm:3,normal:[3,5],notebook:[1,4],np:[1,2,3,4,5],nrow:[2,3],number:5,numer:5,numpi:[1,2,3,4,5],numtick:5,object:[0,1,5],obliqu:5,odd:5,of:5,offset:5,omega:5,one:[3,5],oo:[1,5],or:5,org:[4,5],orient:[1,5],origin:3,oscil:5,p1:5,p2:5,p3:5,p4:5,packag:4,pad:5,palett:4,panda:[1,2,3],paper:4,pastel:4,patch:5,patchcollect:3,path:5,pathcollect:3,pathlib:5,pattern:5,pctdistanc:3,pd:[2,3],person:4,pi:[2,3,5],pickradiu:3,pie:[2,3],plot:[1,2,3,4,5],plotnonfinit:3,plt:[1,3,4,5],polar:2,pos:5,posit:5,poster:4,present:4,primit:0,print:[3,4,5],project:2,prop:5,properti:5,purpl:5,pycharmproject:4,pyplot:[1,2,3,4,5],python:[1,4],quadrat:1,quadric:3,qualit:4,radiu:3,rand:[2,3],randint:3,randn:[2,4],random:[2,3,4,5],rang:[2,3,5],ratio:3,rc:[1,4],rcparam:[2,5],rdpu:4,re:3,rect:3,red:[2,3,4,5],regular:5,regularpolycollect:3,render:3,resampl:3,reset_index:3,right:[2,3,5],ring:3,roman:5,rotat:[2,5],rotatelabel:3,rotation_mod:2,row:3,rperphysik:5,san:[2,5],scatter:[2,3,4,5],scatterpoint:5,score:3,seaborn:[1,4],sector:3,self:[3,5],semi:5,semibold:5,sequenti:4,serif:[2,5],set:4,set_antialias:3,set_arrai:3,set_color:[3,5],set_facecolor:3,set_famili:5,set_fonts:3,set_major_formatt:[3,5],set_major_loc:5,set_markeredgewidth:3,set_markers:3,set_minor_formatt:5,set_minor_loc:5,set_nam:5,set_posit:5,set_rot:3,set_styl:5,set_tick:5,set_tick_param:3,set_ticklabel:5,set_ticks_posit:5,set_titl:[1,2,3],set_xlabel:[1,2,5],set_xlim:[2,3],set_xscal:2,set_xtick:5,set_xticklabel:5,set_ylabel:[1,2,5],set_ylim:[2,3],set_yscal:2,set_ytick:5,set_yticklabel:5,setp:3,shadow:3,shape:3,sharei:2,sharex:2,shell:1,show:[1,3,5],shu:5,simhei:[2,5],simkai:5,simpl:1,simsun:5,sin:[3,5],sinc:3,site:4,six:5,size:[2,3,5],skywat:4,small:5,solarize_light2:4,solid_capstyl:3,solid_joinstyl:3,sort_valu:3,spec:2,spine:5,spline16:3,spline36:3,stabl:4,stack:3,startangl:3,step1:1,step2:1,step3:1,step4:1,step5:1,step:3,stepfil:3,stixgener:5,stixsizefoursym:5,stixsizeonesym:5,str:[3,5],stretch:5,string:2,strmethodformatt:5,style:[0,1,5],sub1:2,sub2:2,sub3:2,sub4:2,sub5:2,subplot:[1,3,5],subplot_kw:3,subplots_adjust:5,sum:3,sum_:5,suptitl:2,tableau:4,talk:4,tan:4,text:[2,3],textprop:3,that:3,the:3,theta1:3,theta2:3,theta:2,three:5,tick1:3,tick1lin:3,tick2:3,tick2lin:3,tick:[0,1,4],tick_param:5,ticker:[3,5],tickla:5,ticklabel:5,ticklin:5,tight_layout:[2,3,5],time:5,timedelta:5,titl:1,titlecolor:5,titles:[4,5],titleweight:5,top:5,transax:5,transform:5,trick:1,truetyp:5,ttf:5,ttflist:5,tupl:3,tutori:4,two:[3,5],ultra:5,ultralight:5,unicod:5,unicode_minu:[2,5],uniform:5,up:5,uplim:3,upper:[2,5],url:3,us:5,use:4,user:4,va:5,valu:5,value_count:3,vert:3,vertic:5,verticalalign:5,view_interv:3,viridi:3,vmax:3,vmin:3,volt:5,voltag:5,vs:5,web:1,wedgeprop:3,weight:5,which:3,white:4,whitegrid:4,width:3,width_ratio:2,window:[1,5],www:4,x1:5,x_i:5,x_label:5,xaxi:[3,5],xdata:3,xerr:3,xlabel:[1,3],xlim:[3,5],xlolim:3,xscal:3,xtick:[3,4,5],xuplim:3,xx:5,xy:[2,3,5],xytext:2,y1:[3,5],y2:[3,5],y_label:5,yahei:5,yaxi:[3,5],ydata:3,yellow:[2,3,4],yerr:3,ylabel:[1,3],ylim:5,ytick:[3,4,5],zero:5,zip:3},titles:["Content","\u7b2c\u4e00\u56de\uff1aMatplotlib\u521d\u76f8\u8bc6","\u7b2c\u4e09\u56de\uff1a\u5e03\u5c40\u683c\u5f0f\u5b9a\u65b9\u5706","\u7b2c\u4e8c\u56de\uff1a\u827a\u672f\u753b\u7b14\u89c1\u4e7e\u5764","\u7b2c\u4e94\u56de\uff1a\u6837\u5f0f\u8272\u5f69\u79c0\u82b3\u534e","\u7b2c\u56db\u56de\uff1a\u6587\u5b57\u56fe\u4f8b\u5c3d\u7709\u76ee"],titleterms:{"2dline":3,and:5,api:3,artist:3,axes:[3,5],axi:3,collect:3,color:4,colormap:4,contain:3,content:0,figtext:5,figur:[1,3,5],formatt:5,gridspec:2,hex:4,imag:3,legend:5,line2d:3,line:3,locat:5,matplotlib:[1,3,4],matplotlibrc:4,object:3,patch:3,plt:2,polygon:3,primit:3,rcparam:4,rectangl:3,rgb:4,rgba:4,set_titl:5,style:4,stylesheet:4,subplot:2,suptitl:5,text:5,tick:[3,5],titl:5,wedg:3,xlabel:5,ylabel:5}}) \ No newline at end of file +Search.setIndex({docnames:["index","\u7b2c\u4e00\u56de\uff1aMatplotlib\u521d\u76f8\u8bc6/index","\u7b2c\u4e09\u56de\uff1a\u5e03\u5c40\u683c\u5f0f\u5b9a\u65b9\u5706/index","\u7b2c\u4e8c\u56de\uff1a\u827a\u672f\u753b\u7b14\u89c1\u4e7e\u5764/index","\u7b2c\u4e94\u56de\uff1a\u6837\u5f0f\u8272\u5f69\u79c0\u82b3\u534e/index","\u7b2c\u56db\u56de\uff1a\u6587\u5b57\u56fe\u4f8b\u5c3d\u7709\u76ee/index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["index.md","\u7b2c\u4e00\u56de\uff1aMatplotlib\u521d\u76f8\u8bc6\\index.md","\u7b2c\u4e09\u56de\uff1a\u5e03\u5c40\u683c\u5f0f\u5b9a\u65b9\u5706\\index.md","\u7b2c\u4e8c\u56de\uff1a\u827a\u672f\u753b\u7b14\u89c1\u4e7e\u5764\\index.md","\u7b2c\u4e94\u56de\uff1a\u6837\u5f0f\u8272\u5f69\u79c0\u82b3\u534e\\index.md","\u7b2c\u56db\u56de\uff1a\u6587\u5b57\u56fe\u4f8b\u5c3d\u7709\u76ee\\index.md"],objects:{},objnames:{},objtypes:{},terms:{"01":3,"03":2,"05":[2,3,5],"0f0f0f":4,"0f0f0f80":4,"0x23155916dc0":1,"10":[2,3,4,5],"100":[1,3,5],"1000":[2,3,5],"101":3,"111":3,"125":3,"14":5,"15":[3,5],"150":2,"16":[2,3,4,5],"162":3,"17":3,"1f":[3,5],"20":[2,3,4,5],"200":2,"2017":5,"21":5,"211":3,"24":4,"25":[3,5],"26":4,"28":5,"2d":1,"2f":[3,5],"30":[3,5],"324":3,"343182":3,"360":3,"45":3,"50":4,"536818":3,"54":3,"5f":5,"70":[2,5],"75":2,"775x0":3,"90":[3,5],"95":3,"class":3,"default":[3,4],"float":5,"for":[2,3,5],"if":[2,5],"import":[1,2,3,4,5],"in":[2,3,5],"int":3,"return":5,"true":[2,3,5],"with":5,_classic_test_patch:4,abcd:2,add:3,add_ax:3,add_collect:3,add_gridspec:2,add_lin:3,add_patch:3,add_subplot:[2,3,5],ai:3,align:3,all:3,alpha:[2,3,4,5],anchor:2,and:4,angl:3,annot:2,antialias:3,api:1,arang:[3,5],arc3:5,area:2,arg:[3,5],arrai:3,arrow:2,arrowprop:[2,5],arrowstyl:5,as:[1,2,3,4,5],ascend:3,aspect:3,ast_node_interact:3,astyp:3,at:1,autoloc:5,autopct:3,avail:4,ax1:3,ax2:3,ax:[1,2,3,5],axes:[0,1,2,4],axesimag:3,axessubplot:3,axhlin:2,axi:[1,5],axlin:2,axs:[2,3,5],axvlin:2,backend_bas:3,backgroundcolor:5,bar:[2,3],bar_label:5,barh:2,barsabov:3,barstack:3,base:5,baselin:5,bbox:5,bessel:3,best:[2,5],bicub:3,bilinear:3,bin:3,black:[2,4,5],block:5,blue:[2,3,4,5],bmh:4,bold:5,book:5,bool:3,both:[3,5],bottom:[3,5],box:5,bright:4,by:5,bymonthdai:5,canva:3,capsiz:3,capstyl:3,capthick:3,catrom:3,center:[2,3,5],center_baselin:5,circl:3,circlecollect:3,classic:4,close:3,cmap:[2,3,4],co:3,code:[2,5],color:[0,2,3,5],colorblind10:4,colorblind:4,colorhexa:4,column:3,com:4,connectionstyl:5,contain:[0,1],coord:5,core:3,cos:5,count:3,counterclock:3,cubic:1,current:3,cursiv:5,cut:3,cyan:4,cyclic:4,dai:5,dark:4,dark_background:4,darkgrid:4,dash_capstyl:3,dash_joinstyl:3,data:[3,5],data_interv:3,datafram:3,date:5,dateformatt:5,datetim:5,dayloc:5,deep:4,def:5,delax:3,demi:5,demibold:5,densiti:3,descript:5,df:3,df_cnt:3,dict:[2,5],diverg:4,dog:3,down:5,drawn:3,drawstyl:3,drop:3,echart:4,ecolor:3,edgecolor:[2,3,5],elinewidth:3,els:[2,5],ensur:3,entri:5,enumer:5,equal:3,error:3,errorbar:3,erroreveri:3,exp:5,explod:3,extent:3,extra:5,facecolor:[2,3,5],fals:[2,3,5],famili:5,fancybboxpatch:5,fantasi:5,fast:4,fenzu:3,fig1:3,fig:[1,2,3,5],figsiz:[2,3,5],figtext:5,figur:[0,2],figurecanva:3,figureimag:3,file:4,fill:3,fillstyl:3,filternorm:3,filterrad:3,findal:3,first:3,five:5,fivethirtyeight:4,fixedloc:5,flat:[3,5],fmt:3,font:[2,5],fontdict:5,fontfamili:5,fontnam:5,fontproperti:5,fontsiz:[2,5],fontstyl:5,fontweight:5,format:5,formatoddtick:5,formatstrformatt:[3,5],formatt:3,four:5,frame:3,frameon:5,frog:3,from:3,fuchsia:3,full:3,funcformatt:5,gaussian:3,get_data_interv:3,get_ticklabel:3,get_ticklin:[3,5],get_tickloc:3,get_view_interv:3,ggplot:4,grai:5,grayscal:4,green:[2,3,4],grid:[2,3],gridlin:3,ha:5,ham:3,han:3,handl:5,hatch:3,head_length:2,head_width:2,heavi:5,height:3,height_ratio:2,hermit:3,hist:[2,3],histtyp:3,hog:3,horizont:5,horizontalalign:5,hsv:2,html:4,http:4,imlim:3,imshow:3,include_lowest:3,index:3,indexloc:5,inplac:3,interactiveshel:3,interp_method:3,interpol:3,ipython:[1,3],is:[3,5],ital:5,joinstyl:3,jupyt:1,kaiser:3,kei:5,kwarg:[3,5],label1:3,label2:3,label:[1,2,3,5],labelcolor:3,labeldist:3,labelleft:3,labelpad:5,labelright:3,labels:4,lambda:3,lanczo:3,larg:5,left:[2,3,5],legend:[0,1,2,3],len:[3,5],light:5,lightgoldenrodyellow:3,lightslategrai:3,limit:3,line1:2,line2d:[1,5],line:[1,4,5],line_down:5,line_up:5,linear:[1,3],linearloc:5,linespac:5,linestyl:[1,3,4],linewidth:[1,3,4],linspac:[1,3,5],list:[2,5],loc:[2,3,5],locat:3,log:[2,3],lolim:3,lower:[2,5],lw:3,magenta:4,major:3,map:3,marker:[3,5],markeredgecolor:3,markeredgewidth:3,markerfacecolor:3,markerfacecoloralt:3,markers:[3,4],markeveri:3,matlab:1,matplotlib:[0,2,5],max:3,maxi:3,maxnloc:5,mdate:5,medium:5,method:3,microsoft:5,mid:3,min:3,mini:3,minor:3,miscellan:4,mitchel:3,modifi:5,monospac:5,mpl:[1,4],mplstyle:4,multipl:5,multipleloc:5,mute:4,nbin:5,ncol:[2,3],nearest:3,none:[3,5],norm:3,normal:[3,5],notebook:[1,4],np:[1,2,3,4,5],nrow:[2,3],numer:5,numpi:[1,2,3,4,5],numtick:5,object:[0,1,5],obliqu:5,odd:5,of:5,offset:5,one:[3,5],oo:[1,5],or:5,org:4,orient:[1,5],origin:3,pad:5,palett:4,panda:[1,2,3],paper:4,pastel:4,patch:5,patchcollect:3,pathcollect:3,pattern:5,pctdistanc:3,pd:[2,3],pi:[2,3,5],pickradiu:3,pie:[2,3],plot:[1,2,3,4,5],plotnonfinit:3,plt:[1,3,4,5],polar:2,pos:5,posit:5,poster:4,present:4,primit:0,print:[3,4,5],project:2,prop:5,properti:5,pyplot:[1,2,3,4,5],python:[1,4],quadrat:1,quadric:3,qualit:4,rad:5,radiu:3,rand:[2,3],randint:3,randn:[2,4],random:[2,3,4],rang:[2,3,5],ratio:3,rc:[1,4],rcparam:[2,5],rdpu:4,re:3,rect:3,red:[2,3,4,5],regular:5,regularpolycollect:3,render:3,resampl:3,reset_index:3,right:[2,3,5],ring:3,roman:5,rotat:[2,5],rotatelabel:3,rotation_mod:2,row:3,san:[2,5],scatter:[2,3,4],score:3,seaborn:[1,4],sector:3,self:3,semibold:5,sequenti:4,serif:[2,5],set_antialias:3,set_arrai:3,set_color:3,set_facecolor:3,set_fonts:3,set_major_formatt:[3,5],set_major_loc:5,set_markeredgewidth:3,set_markers:3,set_minor_formatt:5,set_minor_loc:5,set_rot:3,set_tick:5,set_tick_param:3,set_ticklabel:5,set_ticks_posit:5,set_titl:[1,2,3,5],set_xlabel:[1,2,5],set_xlim:[2,3],set_xscal:2,set_xtick:5,set_xticklabel:5,set_ylabel:[1,2,5],set_ylim:[2,3],set_yscal:2,setp:3,shadow:3,shape:3,sharei:2,sharex:2,shell:1,show:[1,3],shrink:5,simhei:2,simpl:1,simsun:5,sin:3,sinc:3,six:5,size:[2,3,5],small:5,solarize_light2:4,solid_capstyl:3,solid_joinstyl:3,sort_valu:3,spec:2,spline16:3,spline36:3,stabl:4,stack:3,startangl:3,step1:1,step2:1,step3:1,step4:1,step5:1,step:3,stepfil:3,str:3,string:[2,5],strmethodformatt:5,style:[0,1,5],sub1:2,sub2:2,sub3:2,sub4:2,sub5:2,subplot:[1,3,5],subplot_kw:3,sum:3,suptitl:2,tableau:4,talk:4,tan:4,text:[2,3],textcoord:5,textprop:3,that:3,the:3,theta1:3,theta2:3,theta:2,thi:5,three:5,tick1:3,tick1lin:3,tick2:3,tick2lin:3,tick:[0,1,4],tick_param:5,ticker:[3,5],tickla:5,ticklabel:5,ticklin:5,tight_layout:[2,3,5],time:5,timedelta:5,titl:1,titles:4,top:5,trick:1,truetyp:5,tupl:3,tutori:4,two:[3,5],ultralight:5,unicod:5,unicode_minu:[2,5],up:5,uplim:3,upper:[2,5],url:3,use:4,va:5,valu:5,value_count:3,vert:3,vertic:5,verticalalign:5,view_interv:3,viridi:3,vmax:3,vmin:3,web:1,wedgeprop:3,weight:5,which:3,white:4,whitegrid:4,width:3,width_ratio:2,window:1,www:4,x1:5,xaxi:[3,5],xdata:3,xerr:3,xlabel:[1,3],xlim:3,xlolim:3,xscal:3,xtick:[3,4],xuplim:3,xx:5,xy:[2,3,5],xycoord:5,xytext:[2,5],y1:[3,5],y2:3,yahei:5,yaxi:3,ydata:3,yellow:[2,3,4],yerr:3,ylabel:[1,3],ytick:[3,4],zero:5,zip:3},titles:["Content","\u7b2c\u4e00\u56de\uff1aMatplotlib\u521d\u76f8\u8bc6","\u7b2c\u4e09\u56de\uff1a\u5e03\u5c40\u683c\u5f0f\u5b9a\u65b9\u5706","\u7b2c\u4e8c\u56de\uff1a\u827a\u672f\u753b\u7b14\u89c1\u4e7e\u5764","\u7b2c\u4e94\u56de\uff1a\u6837\u5f0f\u8272\u5f69\u79c0\u82b3\u534e","\u7b2c\u56db\u56de\uff1a\u6587\u5b57\u56fe\u4f8b\u5c3d\u7709\u76ee"],titleterms:{"2dline":3,and:5,annot:5,api:[3,5],artist:3,axes:[3,5],axi:3,collect:3,color:4,colormap:4,contain:3,content:0,figur:[1,3,5],formatt:5,gridspec:2,hex:4,imag:3,legend:5,line2d:3,line:3,locat:5,matplotlib:[1,3,4],object:3,patch:3,plt:2,polygon:3,primit:3,rcparam:4,rectangl:3,rgb:4,rgba:4,style:4,stylesheet:4,subplot:2,suptitl:5,text:5,tick:[3,5],titl:5,wedg:3,xlabel:5,ylabel:5}}) \ No newline at end of file diff --git a/docs/第一回:Matplotlib初相识/index.html b/docs/第一回:Matplotlib初相识/index.html index 998cf00..05c339c 100644 --- a/docs/第一回:Matplotlib初相识/index.html +++ b/docs/第一回:Matplotlib初相识/index.html @@ -216,11 +216,6 @@ 思考题 -
  • - - 参考资料 - -
  • @@ -383,10 +378,6 @@
  • 在第五节绘图模板中我们是以OO模式作为例子展示的,请思考并写一个pyplot绘图模式的简单模板

  • -
    -

    参考资料

    -

    1.matplotlib官网用户指南

    -
    diff --git a/docs/第五回:样式色彩秀芳华/index.html b/docs/第五回:样式色彩秀芳华/index.html index ea9c331..497c45f 100644 --- a/docs/第五回:样式色彩秀芳华/index.html +++ b/docs/第五回:样式色彩秀芳华/index.html @@ -205,11 +205,6 @@ 3.设置rcparams -
  • - - 4.修改matplotlibrc文件 - -
  • @@ -251,7 +246,7 @@
  • - 参考资料 + 思考题
  • @@ -268,7 +263,7 @@

    第五回:样式色彩秀芳华

    第五回详细介绍matplotlib中样式和颜色的使用,绘图样式和颜色是丰富可视化图表的重要手段,因此熟练掌握本章可以让可视化图表变得更美观,突出重点和凸显艺术性。
    -关于绘图样式,常见的有4种方法,分别是修改预定义样式,自定义样式,rcparams和matplotlibrc文件。
    +关于绘图样式,常见的有3种方法,分别是修改预定义样式,自定义样式和rcparams。
    关于颜色使用,本章介绍了常见的5种表示单色颜色的基本方法,以及colormap多色显示的方法。

    一、matplotlib的绘图样式(style)

    @@ -398,25 +393,6 @@ ytick.labelsize : 16

    -
    -

    4.修改matplotlibrc文件

    -

    由于matplotlib是使用matplotlibrc文件来控制样式的,也就是上一节提到的rc setting,所以我们还可以通过修改matplotlibrc文件的方式改变样式。

    -
    -
    -
    # 查找matplotlibrc文件的路径
    -mpl.matplotlib_fname()
    -
    -
    -
    -
    -
    'c:\\users\\skywater\\pycharmprojects\\personal\\demo\\lib\\site-packages\\matplotlib\\mpl-data\\matplotlibrc'
    -
    -
    -
    -
    -

    找到路径后,就可以直接编辑样式文件了,打开后看到的文件格式大致是这样的,文件中列举了所有的样式参数,找到想要修改的参数,比如lines.linewidth: 8,并将前面的注释符号去掉,此时再绘图发现样式以及生效了。

    -

    -

    二、matplotlib的色彩设置(color)

    @@ -446,7 +422,7 @@ ytick.labelsize : 16

    -../_images/index_19_01.png +../_images/index_17_01.png
    @@ -461,7 +437,7 @@ ytick.labelsize : 16

    -../_images/index_21_02.png +../_images/index_19_01.png

    RGB颜色和HEX颜色之间是可以一一对应的,以下网址提供了两种色彩表示方法的转换工具。
    @@ -477,7 +453,7 @@ ytick.labelsize : 16

    -../_images/index_23_01.png +../_images/index_21_02.png
    @@ -491,7 +467,7 @@ ytick.labelsize : 16

    -../_images/index_25_01.png +../_images/index_23_01.png
    @@ -505,7 +481,7 @@ ytick.labelsize : 16

    -../_images/index_27_01.png +../_images/index_25_01.png

    @@ -531,7 +507,7 @@ ytick.labelsize : 16

    -../_images/index_29_0.png +../_images/index_27_01.png

    在以下官网页面可以查询上述五种colormap的字符串表示和颜色图的对应关系
    @@ -539,9 +515,10 @@ ytick.labelsize : 16

    -

    参考资料

    -

    1.matplotlib官网样式使用指南
    -2.matplotlib官网色彩使用指南

    +

    思考题

    +
    diff --git a/docs/第四回:文字图例尽眉目/index.html b/docs/第四回:文字图例尽眉目/index.html index 2286170..9db30a4 100644 --- a/docs/第四回:文字图例尽眉目/index.html +++ b/docs/第四回:文字图例尽眉目/index.html @@ -191,29 +191,29 @@ 一、Figure和Axes上的文本
  • @@ -234,7 +229,7 @@ @@ -280,9 +275,22 @@

    第四回:文字图例尽眉目

    +
    +
    +
    import matplotlib
    +import matplotlib.pyplot as plt
    +import numpy as np
    +import matplotlib.dates as mdates
    +import datetime
    +
    +
    +
    +

    一、Figure和Axes上的文本

    Matplotlib具有广泛的文本支持,包括对数学表达式的支持、对栅格和矢量输出的TrueType支持、具有任意旋转的换行分隔文本以及Unicode支持。

    +
    +

    1.文本API示例

    下面的命令是介绍了通过pyplot API和objected-oriented API分别创建文本的方式。

    @@ -292,42 +300,104 @@ - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + + + + +

    text

    text

    在 Axes的任意位置添加text

    text

    text

    在子图axes的任意位置添加文本

    title

    set_title

    在 Axes添加title

    annotate

    annotate

    在子图axes的任意位置添加注解,包含指向性的箭头

    figtext

    text

    在Figure的任意位置添加text.

    xlabel

    set_xlabel

    为子图axes添加x轴标签

    suptitle

    suptitle

    在 Figure添加title

    ylabel

    set_ylabel

    为子图axes添加y轴标签

    xlabel

    set_xlabel

    在Axes的x-axis添加label

    title

    set_title

    为子图axes添加标题

    ylabel

    set_ylabel

    在Axes的y-axis添加label

    figtext

    text

    在画布figure的任意位置添加文本

    suptitle

    suptitle

    为画布figure添加标题

    +

    通过一个综合例子,以OO模式展示这些API是如何控制一个图像中各部分的文本,在之后的章节我们再详细分析这些api的使用技巧

    +
    +
    +
    fig = plt.figure()
    +ax = fig.add_subplot()
    +
    +
    +# 分别为figure和ax设置标题,注意两者的位置是不同的
    +fig.suptitle('bold figure suptitle', fontsize=14, fontweight='bold')
    +ax.set_title('axes title')
    +
    +# 设置x和y轴标签
    +ax.set_xlabel('xlabel')
    +ax.set_ylabel('ylabel')
    +
    +# 设置x和y轴显示范围均为0到10
    +ax.axis([0, 10, 0, 10])
    +
    +# 在子图上添加文本
    +ax.text(3, 8, 'boxed italics text in data coords', style='italic',
    +        bbox={'facecolor': 'red', 'alpha': 0.5, 'pad': 10})
    +
    +# 在画布上添加文本,一般在子图上添加文本是更常见的操作,这种方法很少用
    +fig.text(0.4,0.8,'This is text for figure')
    +
    +ax.plot([2], [1], 'o')
    +# 添加注解
    +ax.annotate('annotate', xy=(2, 1), xytext=(3, 4),arrowprops=dict(facecolor='black', shrink=0.05));
    +
    +
    +
    +
    +../_images/index_3_03.png +
    +
    +

    +
    -

    1.text

    -

    pyplot API:matplotlib.pyplot.text(x, y, s, fontdict=None, **kwargs)
    -OO API:Axes.text(self, x, y, s, fontdict=None, **kwargs)
    -参数:此方法接受以下描述的参数:
    -s:此参数是要添加的文本。
    -xy:此参数是放置文本的点(x,y)。
    -fontdict:此参数是一个可选参数,并且是一个覆盖默认文本属性的字典。如果fontdict为None,则由rcParams确定默认值。
    -返回值:此方法返回作为创建的文本实例的文本。

    -

    fontdict主要参数具体介绍,更多参数请参考官网说明

    +

    2.text - 子图上的文本

    +

    text的调用方式为Axes.text(x, y, s, fontdict=None, **kwargs)
    +其中x,y为文本出现的位置,默认状态下即为当前坐标系下的坐标值,
    +s为文本的内容,
    +fontdict是可选参数,用于覆盖默认的文本属性,
    +**kwargs为关键字参数,也可以用于传入文本样式参数

    +

    重点解释下fontdict和**kwargs参数,这两种方式都可以用于调整呈现的文本样式,最终效果是一样的,不仅text方法,其他文本方法如set_xlabel,set_title等同样适用这两种方式修改样式。通过一个例子演示这两种方法是如何使用的。

    +
    +
    +
    fig = plt.figure(figsize=(10,3))
    +axes = fig.subplots(1,2)
    +
    +# 使用关键字参数修改文本样式
    +axes[0].text(0.3, 0.8, 'modify by **kwargs', style='italic',
    +        bbox={'facecolor': 'red', 'alpha': 0.5, 'pad': 10});
    +
    +# 使用fontdict参数修改文本样式
    +font = {'bbox':{'facecolor': 'red', 'alpha': 0.5, 'pad': 10}, 'style':'italic'}
    +axes[1].text(0.3, 0.8, 'modify by fontdict', fontdict=font);
    +
    +
    +
    +
    +../_images/index_5_02.png +
    +
    +

    +

    +

    matplotlib中所有支持的样式参数请参考官网文档说明,大多数时候需要用到的时候再查询即可。

    +

    下表列举了一些常用的参数供参考。

    @@ -335,247 +405,137 @@ fontdict:此参数是一个可选参数,并且是一个覆盖默认文本属 - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - - - - - - - - + +

    Property

    alpha

    float or None 该参数指透明度,越接近0越透明,越接近1越不透明

    alpha

    float or None 透明度,越接近0越透明,越接近1越不透明

    backgroundcolor

    color

    backgroundcolor

    color 文本的背景颜色

    bbox

    dict with properties for patches.FancyBboxPatch 这个是用来设置text周围的box外框

    bbox

    dict with properties for patches.FancyBboxPatch 用来设置text周围的box外框

    color or c

    color 指的是字体的颜色

    color or c

    color 字体的颜色

    fontfamily or family

    {FONTNAME, 'serif', 'sans-serif', 'cursive', 'fantasy', 'monospace'} 该参数指的是字体的类型

    fontfamily or family

    {FONTNAME, 'serif', 'sans-serif', 'cursive', 'fantasy', 'monospace'} 字体的类型

    fontproperties or font or font_properties

    font_manager.FontProperties or str or pathlib.Path

    fontsize or size

    float or {'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'} 字体大小

    fontsize or size

    float or {'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'} 该参数指字体大小

    fontstyle or style

    {'normal', 'italic', 'oblique'} 字体的样式是否倾斜等

    fontstretch or stretch

    {a numeric value in range 0-1000, 'ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded'} 该参数是指从字体中选择正常、压缩或扩展的字体

    fontweight or weight

    {a numeric value in range 0-1000, 'ultralight', 'light', 'normal', 'regular', 'book', 'medium', 'roman', 'semibold', 'demibold', 'demi', 'bold', 'heavy', 'extra bold', 'black'} 文本粗细

    fontstyle or style

    {'normal', 'italic', 'oblique'} 该参数是指字体的样式是否倾斜等

    horizontalalignment or ha

    {'center', 'right', 'left'} 选择文本左对齐右对齐还是居中对齐

    fontweight or weight

    {a numeric value in range 0-1000, 'ultralight', 'light', 'normal', 'regular', 'book', 'medium', 'roman', 'semibold', 'demibold', 'demi', 'bold', 'heavy', 'extra bold', 'black'}

    linespacing

    float (multiple of font size) 文本间距

    horizontalalignment or ha

    {'center', 'right', 'left'} 该参数是指选择文本左对齐右对齐还是居中对齐

    rotation

    float or {'vertical', 'horizontal'} 指text逆时针旋转的角度,“horizontal”等于0,“vertical”等于90

    label

    object

    linespacing

    float (multiple of font size)

    position

    (float, float)

    rotation

    float or {'vertical', 'horizontal'} 该参数是指text逆时针旋转的角度,“horizontal”等于0,“vertical”等于90。我们可以根据自己设定来选择合适角度

    verticalalignment or va

    {'center', 'top', 'bottom', 'baseline', 'center_baseline'}

    verticalalignment or va

    {'center', 'top', 'bottom', 'baseline', 'center_baseline'} 文本在垂直角度的对齐方式

    +
    +
    +

    3.xlabel和ylabel - 子图的x,y轴标签

    +

    xlabel的调用方式为Axes.set_xlabel(xlabel, fontdict=None, labelpad=None, *, loc=None, **kwargs)
    +ylabel方式类似,这里不重复写出。
    +其中xlabel即为标签内容,
    +fontdict**kwargs用来修改样式,上一小节已介绍,
    +labelpad为标签和坐标轴的距离,默认为4,
    +loc为标签位置,可选的值为'left', 'center', 'right'之一,默认为居中

    -
    import numpy as np
    -import matplotlib.pyplot as plt
    -from matplotlib.font_manager import FontProperties
    -import numpy as np
    -
    -
    -
    -
    -
    -
    -
    #fontdict学习的案例
    -#学习的过程中请尝试更换不同的fontdict字典的内容,以便于更好的掌握
    -#---------设置字体样式,分别是字体,颜色,宽度,大小
    -font1 = {'family': 'SimSun',#华文楷体
    -         'alpha':0.7,#透明度
    -        'color':  'purple',
    -        'weight': 'normal',
    -        'size': 16,
    -        }
    -font2 = {'family': 'Times New Roman',
    -        'color':  'red',
    -        'weight': 'normal',
    -        'size': 16,
    -        }
    -font3 = {'family': 'serif',
    -        'color':  'blue',
    -        'weight': 'bold',
    -        'size': 14,
    -        }
    -font4 = {'family': 'Calibri',
    -        'color':  'navy',
    -        'weight': 'normal',
    -        'size': 17,
    -        }
    -#-----------四种不同字体显示风格-----
    - 
    -#-------建立函数----------
    -x = np.linspace(0.0, 5.0, 100)
    -y = np.cos(2*np.pi*x) * np.exp(-x/3)
    -#-------绘制图像,添加标注----------
    -plt.plot(x, y, '--')
    -plt.title('震荡曲线', fontdict=font1)
    -#------添加文本在指定的坐标处------------
    -plt.text(2, 0.65, r'$\cos(2 \pi x) \exp(-x/3)$', fontdict=font2)
    -#---------设置坐标标签
    -plt.xlabel('Y=time (s)', fontdict=font3)
    -plt.ylabel('X=voltage(mv)', fontdict=font4)
    - 
    -# 调整图像边距
    -plt.subplots_adjust(left=0.15)
    -plt.show()
    +
    # 观察labelpad和loc参数的使用效果
    +fig = plt.figure(figsize=(10,3))
    +axes = fig.subplots(1,2)
    +axes[0].set_xlabel('xlabel',labelpad=20,loc='left')
    +
    +# loc参数仅能提供粗略的位置调整,如果想要更精确的设置标签的位置,可以使用position参数+horizontalalignment参数来定位
    +# position由一个元组过程,第一个元素0.2表示x轴标签在x轴的位置,第二个元素对于xlabel其实是无意义的,随便填一个数都可以
    +# horizontalalignment='left'表示左对齐,这样设置后x轴标签就能精确定位在x=0.2的位置处
    +axes[1].set_xlabel('xlabel', position=(0.2, _), horizontalalignment='left');
     
    -../_images/index_2_02.png +../_images/index_7_03.png
    +

    +

    -
    -

    2.title和set_title

    -

    pyplot API:matplotlib.pyplot.title(label, fontdict=None, loc=None, pad=None, *, y=None, **kwargs)
    -OO API:Axes.set_title(self, label, fontdict=None, loc=None, pad=None, *, y=None, **kwargs)
    -该命令是用来设置axes的标题。
    -参数:此方法接受以下描述的参数:
    -label:str,此参数是要添加的文本
    -fontdict:dict,此参数是控制title文本的外观,默认fontdict如下:

    -
    {'fontsize': rcParams['axes.titlesize'],
    - 'fontweight': rcParams['axes.titleweight'],
    - 'color': rcParams['axes.titlecolor'],
    - 'verticalalignment': 'baseline',
    - 'horizontalalignment': loc}
    -
    -
    -

    loc:str,{'center', 'left', 'right'}默认为center
    -pad:float,该参数是指标题偏离图表顶部的距离,默认为6。
    -y:float,该参数是title所在axes垂向的位置。默认值为1,即title位于axes的顶部。
    -kwargs:该参数是指可以设置的一些奇特文本的属性。
    -返回值:此方法返回作为创建的title实例的文本。

    -
    -
    -

    3.figtext和text

    -

    pyplot API:matplotlib.pyplot.figtext(x, y, s, fontdict=None, **kwargs)
    -OO API:text(self, x, y, s, fontdict=None,**kwargs)
    -参数:此方法接受以下描述的参数:
    -x,y:float,此参数是指在figure中放置文本的位置。一般取值是在[0,1]范围内。使用transform关键字可以更改坐标系。
    -s:str,此参数是指文本
    -fontdict:dict,此参数是一个可选参数,并且是一个覆盖默认文本属性的字典。如果fontdict为None,则由rcParams确定默认值。
    -返回值:此方法返回作为创建的文本实例的文本。

    -
    -
    -

    4.suptitle

    -

    pyplot API:matplotlib.pyplot.suptitle(t, **kwargs)
    -OO API:suptitle(self, t, **kwargs)
    -参数:此方法接受以下描述的参数:
    -t: str,标题的文本
    -x:float,默认值是0.5.该参数是指文本在figure坐标系下的x坐标
    -y:float,默认值是0.95.该参数是指文本在figure坐标系下的y坐标
    -horizontalalignment, ha:该参数是指选择文本水平对齐方式,有三种选择{'center', 'left', right'},默认值是 'center'
    -verticalalignment, va:该参数是指选择文本垂直对齐方式,有四种选择{'top', 'center', 'bottom', 'baseline'},默认值是 'top'
    -fontsize, size:该参数是指文本的大小,默认值是依据rcParams的设置:rcParams["figure.titlesize"] (default: 'large')
    -fontweight, weight:该参数是用来设置字重。默认值是依据rcParams的设置:rcParams["figure.titleweight"] (default: 'normal')
    -fontproperties:None or dict,该参数是可选参数,如果该参数被指定,字体的大小将从该参数的默认值中提取。
    -返回值:此方法返回作为创建的title实例的文本。

    -
    -
    -

    5.xlabel和ylabel

    -

    pyplot API:matplotlib.pyplot.xlabel(xlabel, fontdict=None, labelpad=None, *, loc=None, **kwargs)
    -     matplotlib.pyplot.ylabel(ylabel, fontdict=None, labelpad=None,*, loc=None, **kwargs)
    -OO API:  Axes.set_xlabel(self, xlabel, fontdict=None, labelpad=None, *, loc=None, **kwargs)
    -     Axes.set_ylabel(self, ylabel, fontdict=None, labelpad=None,*, loc=None, **kwargs)
    -参数:此方法接受以下描述的参数:
    -xlabel或者ylabel:label的文本
    -labelpad:设置label距离轴(axis)的距离
    -loc:{'left', 'center', 'right'},默认为center
    -**kwargs:文本属性
    -返回值:此方法返回作为创建的xlabel和ylabel实例的文本。

    +
    +

    4.title和suptitle - 子图和画布的标题

    +

    title的调用方式为Axes.set_title(label, fontdict=None, loc=None, pad=None, *, y=None, **kwargs)
    +其中label为子图标签的内容,fontdict,loc,**kwargs和之前小节相同不重复介绍
    +pad是指标题偏离图表顶部的距离,默认为6
    +y是title所在子图垂向的位置。默认值为1,即title位于子图的顶部。

    +

    suptitle的调用方式为figure.suptitle(t, **kwargs)
    +其中t为画布的标题内容

    -
    #文本属性的输入一种是通过**kwargs属性这种方式,一种是通过操作 matplotlib.font_manager.FontProperties 方法
    -#该案例中对于x_label采用**kwargs调整字体属性,y_label则采用 matplotlib.font_manager.FontProperties 方法调整字体属性
    -#该链接是FontProperties方法的介绍 https://matplotlib.org/api/font_manager_api.html#matplotlib.font_manager.FontProperties
    -x1 = np.linspace(0.0, 5.0, 100)
    -y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
    -
    -font = FontProperties()
    -font.set_family('serif')
    -font.set_name('Times New Roman')
    -font.set_style('italic')
    -
    -fig, ax = plt.subplots(figsize=(5, 3))
    -fig.subplots_adjust(bottom=0.15, left=0.2)
    -ax.plot(x1, y1)
    -ax.set_xlabel('time [s]', fontsize='large', fontweight='bold')
    -ax.set_ylabel('Damped oscillation [V]', fontproperties=font)
    -
    -plt.show()
    +
    # 观察pad参数的使用效果
    +fig = plt.figure(figsize=(10,3))
    +fig.suptitle('This is figure title',y=1.2) # 通过参数y设置高度
    +axes = fig.subplots(1,2)
    +axes[0].set_title('This is title',pad=15)
    +axes[1].set_title('This is title',pad=6);
     
    -../_images/index_4_02.png +../_images/index_9_02.png
    +

    +

    +
    +
    +

    5.annotate - 子图的注解

    +

    annotate的调用方式为Axes.annotate(text, xy, *args, **kwargs)
    +其中text为注解的内容,
    +xy为注解箭头指向的坐标,
    +其他常用的参数包括:
    +xytext为注解文字的坐标,
    +xycoords用来定义xy参数的坐标系,
    +textcoords用来定义xytext参数的坐标系,
    +arrowprops用来定义指向箭头的样式
    +annotate的参数非常复杂,这里仅仅展示一个简单的例子,更多参数可以查看官方文档中的annotate介绍

    +
    +
    +
    fig = plt.figure()
    +ax = fig.add_subplot()
    +ax.annotate("",
    +            xy=(0.2, 0.2), xycoords='data',
    +            xytext=(0.8, 0.8), textcoords='data',
    +            arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=0.2")
    +            );
    +
    +
    +
    +
    +../_images/index_11_02.png +
    +
    +

    +

    6.字体的属性设置

    字体设置一般有全局字体设置和自定义局部字体设置两种方法。

    -
    -
    -
    #首先可以查看matplotlib所有可用的字体
    -from matplotlib import font_manager
    -font_family = font_manager.fontManager.ttflist
    -font_name_list = [i.name for i in font_family]
    -for font in font_name_list[:10]:
    -    print(f'{font}\n')
    -
    -
    -
    -
    -
    STIXGeneral
    -
    -DejaVu Sans Mono
    -
    -DejaVu Sans
    -
    -DejaVu Sans Mono
    -
    -STIXGeneral
    -
    -DejaVu Serif Display
    -
    -STIXSizeOneSym
    -
    -DejaVu Serif
    -
    -STIXSizeFourSym
    -
    -STIXGeneral
    -
    -
    -
    -
    -

    为方便在图中加入合适的字体,可以尝试了解中文字体的英文名称,该链接告诉了常用中文的英文名称

    #该block讲述如何在matplotlib里面,修改字体默认属性,完成全局字体的更改。
    -import matplotlib.pyplot as plt
     plt.rcParams['font.sans-serif'] = ['SimSun']    # 指定默认字体为新宋体。
     plt.rcParams['axes.unicode_minus'] = False      # 解决保存图像时 负号'-' 显示为方块和报错的问题。
     
    @@ -585,130 +545,34 @@ STIXGeneral
    #局部字体的修改方法1
    -import matplotlib.pyplot as plt
    -import matplotlib.font_manager as fontmg
    -
     x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
     plt.plot(x, label='小示例图标签')
     
    -# 直接用字体的名字。
    +# 直接用字体的名字
     plt.xlabel('x 轴名称参数', fontproperties='Microsoft YaHei', fontsize=16)         # 设置x轴名称,采用微软雅黑字体
     plt.ylabel('y 轴名称参数', fontproperties='Microsoft YaHei', fontsize=14)         # 设置Y轴名称
     plt.title('坐标系的标题',  fontproperties='Microsoft YaHei', fontsize=20)         # 设置坐标系标题的字体
    -plt.legend(loc='lower right', prop={"family": 'Microsoft YaHei'}, fontsize=10);    # 小示例图的字体设置
    +plt.legend(loc='lower right', prop={"family": 'Microsoft YaHei'}, fontsize=10) ;   # 小示例图的字体设置
     
    -../_images/index_9_02.png -
    -
    -
    -
    -
    #局部字体的修改方法2
    -import matplotlib.pyplot as plt
    -import matplotlib.font_manager as fontmg
    -
    -x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    -plt.plot(x, label='小示例图标签')
    -#fname为你系统中的字体库路径
    -my_font1 = fontmg.FontProperties(fname=r'C:\Windows\Fonts\simhei.ttf')      # 读取系统中的 黑体 字体。
    -my_font2 = fontmg.FontProperties(fname=r'C:\Windows\Fonts\simkai.ttf')      # 读取系统中的 楷体 字体。
    -# fontproperties 设置中文显示,fontsize 设置字体大小
    -plt.xlabel('x 轴名称参数', fontproperties=my_font1, fontsize=16)       # 设置x轴名称
    -plt.ylabel('y 轴名称参数', fontproperties=my_font1, fontsize=14)       # 设置Y轴名称
    -plt.title('坐标系的标题',  fontproperties=my_font2, fontsize=20)       # 标题的字体设置
    -plt.legend(loc='lower right', prop=my_font1, fontsize=10);              # 小示例图的字体设置
    -
    -
    -
    -
    -../_images/index_10_02.png -
    -
    -
    -
    -

    7.数学表达式

    -

    在文本标签中使用数学表达式。有关MathText的概述,请参见 写数学表达式,但由于数学表达式的练习想必我们都在markdown语法和latex语法中多少有接触,故在此不继续展开,愿意深入学习的可以参看官方文档.下面是一个官方案例,供参考了解。

    -
    -
    -
    import numpy as np
    -import matplotlib.pyplot as plt
    -t = np.arange(0.0, 2.0, 0.01)
    -s = np.sin(2*np.pi*t)
    -
    -plt.plot(t, s)
    -plt.title(r'$\alpha_i > \beta_i$', fontsize=20)
    -plt.text(1, -0.6, r'$\sum_{i=0}^\infty x_i$', fontsize=20)
    -plt.text(0.6, 0.6, r'$\mathcal{A}\mathrm{sin}(2 \omega t)$',
    -         fontsize=20)
    -plt.xlabel('time (s)')
    -plt.ylabel('volts (mV)')
    -plt.show()
    -
    -
    -
    -
    -../_images/index_12_03.png -
    -
    -
    -
    -
    #这是对前七节学习内容的总结案例
    -import matplotlib
    -import matplotlib.pyplot as plt
    -
    -fig = plt.figure()
    -ax = fig.add_subplot(111)
    -fig.subplots_adjust(top=0.85)
    -
    -# 分别在figure和subplot上设置title
    -fig.suptitle('bold figure suptitle', fontsize=14, fontweight='bold')
    -ax.set_title('axes title')
    -
    -ax.set_xlabel('xlabel')
    -ax.set_ylabel('ylabel')
    -
    -# 设置x-axis和y-axis的范围都是[0, 10]
    -ax.axis([0, 10, 0, 10])
    -
    -ax.text(3, 8, 'boxed italics text in data coords', style='italic',
    -        bbox={'facecolor': 'red', 'alpha': 0.5, 'pad': 10})
    -
    -ax.text(2, 6, r'an equation: $E=mc^2$', fontsize=15)
    -font1 = {'family': 'Times New Roman',
    -        'color':  'purple',
    -        'weight': 'normal',
    -        'size': 10,
    -        }
    -ax.text(3, 2, 'unicode: Institut für Festkörperphysik',fontdict=font1)
    -ax.text(0.95, 0.01, 'colored text in axes coords',
    -        verticalalignment='bottom', horizontalalignment='right',
    -        transform=ax.transAxes,
    -        color='green', fontsize=15)
    -
    -plt.show()
    -
    -
    -
    -
    -../_images/index_13_0.png +../_images/index_14_03.png
    +

    +

    二、Tick上的文本

    设置tick(刻度)和ticklabel(刻度标签)也是可视化中经常需要操作的步骤,matplotlib既提供了自动生成刻度和刻度标签的模式(默认状态),同时也提供了许多让使用者灵活设置的方式。

    -
    -

    1.简单模式

    +
    +

    1.简单模式

    可以使用axis的set_ticks方法手动设置标签位置,使用axis的set_ticklabels方法手动设置标签格式

    -
    import matplotlib.pyplot as plt
    -import numpy as np
    -import matplotlib
    -x1 = np.linspace(0.0, 5.0, 100)
    +
    x1 = np.linspace(0.0, 5.0, 100)
     y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
     
    @@ -720,15 +584,16 @@ STIXGeneral fig, axs = plt.subplots(2, 1, figsize=(5, 3), tight_layout=True) axs[0].plot(x1, y1) axs[1].plot(x1, y1) -axs[1].xaxis.set_ticks(np.arange(0., 10.1, 2.)) -plt.show() +axs[1].xaxis.set_ticks(np.arange(0., 10.1, 2.));
    -../_images/index_16_02.png +../_images/index_17_02.png
    +

    +

    # 使用axis的set_ticklabels方法手动设置标签格式的例子
    @@ -738,15 +603,16 @@ STIXGeneral
     ticks = np.arange(0., 8.1, 2.)
     tickla = [f'{tick:1.2f}' for tick in ticks]
     axs[1].xaxis.set_ticks(ticks)
    -axs[1].xaxis.set_ticklabels(tickla)
    -plt.show()
    +axs[1].xaxis.set_ticklabels(tickla);
     
    -../_images/index_17_01.png +../_images/index_19_02.png
    +

    +

    #一般绘图时会自动创建刻度,而如果通过上面的例子使用set_ticks创建刻度可能会导致tick的范围与所绘制图形的范围不一致的问题。
    @@ -764,8 +630,7 @@ STIXGeneral
     axs[1].set_xticklabels(['zero','one', 'two', 'three', 'four', 'five','six'],#设置刻度对应的标签
                        rotation=30, fontsize='small')#rotation选项设定x刻度标签倾斜30度。
     axs[1].xaxis.set_ticks_position('bottom')#set_ticks_position()方法是用来设置刻度所在的位置,常用的参数有bottom、top、both、none
    -print(axs[1].xaxis.get_ticklines())
    -plt.show()
    +print(axs[1].xaxis.get_ticklines());
     
    @@ -773,10 +638,9 @@ STIXGeneral
    <a list of 14 Line2D ticklines objects>
     
    -../_images/index_18_1.png +../_images/index_21_1.png
    -

    2.Tick Locators and Formatters

    @@ -799,16 +663,15 @@ STIXGeneral axs[1, 0].xaxis.set_major_formatter(formatter) formatter = matplotlib.ticker.FormatStrFormatter('%1.5f') -axs[1, 1].xaxis.set_major_formatter(formatter) - -plt.show() +axs[1, 1].xaxis.set_major_formatter(formatter);
    -../_images/index_20_01.png +../_images/index_23_02.png
    +

    # 接收函数的例子
    @@ -821,15 +684,16 @@ STIXGeneral
     
     fig, ax = plt.subplots(figsize=(5, 3), tight_layout=True)
     ax.plot(x1, y1)
    -ax.xaxis.set_major_formatter(formatoddticks)
    -plt.show()
    +ax.xaxis.set_major_formatter(formatoddticks);
     
    -../_images/index_21_03.png +../_images/index_25_02.png
    +

    +

    b) Tick Locators

    @@ -859,22 +723,20 @@ locator=plt.LinearLocator(numticks=5)#线性划分5等分,4个刻度

    locator = matplotlib.ticker.FixedLocator([0,7,14,21,28]) -axs[1, 1].xaxis.set_major_locator(locator) - -plt.show() +axs[1, 1].xaxis.set_major_locator(locator);
    -../_images/index_23_02.png +../_images/index_27_02.png
    +

    +

    此外matplotlib.dates 模块还提供了特殊的设置日期型刻度格式和位置的方式

    -
    import matplotlib.dates as mdates
    -import datetime
    -# 特殊的日期型locator和formatter
    +
    # 特殊的日期型locator和formatter
     locator = mdates.DayLocator(bymonthday=[1,15,25])
     formatter = mdates.DateFormatter('%b %d')
     
    @@ -884,176 +746,149 @@ locator=plt.LinearLocator(numticks=5)#线性划分5等分,4个刻度

    base = datetime.datetime(2017, 1, 1, 0, 0, 1) time = [base + datetime.timedelta(days=x) for x in range(len(x1))] ax.plot(time, y1) -ax.tick_params(axis='x', rotation=70) -plt.show() +ax.tick_params(axis='x', rotation=70);
    -../_images/index_25_02.png -
    -
    -

    其他进阶案例

    -
    -
    -
    #这个案例中展示了如何进行坐标轴的移动,如何更改刻度值的样式
    -import matplotlib.pyplot as plt
    -import numpy as np
    -x = np.linspace(-3,3,50)
    -y1 = 2*x+1
    -y2 = x**2
    -plt.figure()
    -plt.plot(x,y2)
    -plt.plot(x,y1,color='red',linewidth=1.0,linestyle = '--')
    -plt.xlim((-3,5))
    -plt.ylim((-3,5))
    -plt.xlabel('x')
    -plt.ylabel('y')
    -new_ticks1 = np.linspace(-3,5,5)
    -plt.xticks(new_ticks1)
    -plt.yticks([-2,0,2,5],[r'$one\ shu$',r'$\alpha$',r'$three$',r'four'])
    -'''
    -上一行代码是将y轴上的小标改成文字,其中,空格需要增加\,即'\ ',$可将格式更改成数字模式,如果需要输入数学形式的α,则需要用\转换,即\alpha
    -如果使用面向对象的命令进行画图,那么下面两行代码可以实现与 plt.yticks([-2,0,2,5],[r'$one\ shu$',r'$\alpha$',r'$three$',r'four']) 同样的功能
    -axs.set_yticks([-2,0,2,5])
    -axs.set_yticklabels([r'$one\ shu$',r'$\alpha$',r'$three$',r'four'])
    -'''
    -ax = plt.gca()#gca = 'get current axes' 获取现在的轴
    -'''
    -ax = plt.gca()是获取当前的axes,其中gca代表的是get current axes。
    -fig=plt.gcf是获取当前的figure,其中gcf代表的是get current figure。
    -
    -许多函数都是对当前的Figure或Axes对象进行处理,
    -例如plt.plot()实际上会通过plt.gca()获得当前的Axes对象ax,然后再调用ax.plot()方法实现真正的绘图。
    -
    -而在本例中则可以通过ax.spines方法获得当前顶部和右边的轴并将其颜色设置为不可见
    -然后将左边轴和底部的轴所在的位置重新设置
    -最后再通过set_ticks_position方法设置ticks在x轴或y轴的位置,本示例中因所设置的bottom和left是ticks在x轴或y轴的默认值,所以这两行的代码也可以不写
    -'''
    -ax.spines['top'].set_color('none')
    -ax.spines['right'].set_color('none')
    -ax.spines['left'].set_position(('data',0))
    -ax.spines['bottom'].set_position(('data',0))#axes 百分比
    -ax.xaxis.set_ticks_position('bottom')   #设置ticks在x轴的位置
    -ax.yaxis.set_ticks_position('left')     #设置ticks在y轴的位置
    -plt.show()
    -
    -
    -
    -
    -../_images/index_27_02.png +../_images/index_29_0.png
    +

    -

    三、legend(图例)

    -

    图例的设置会使用一些常见术语,为了清楚起见,这些术语在此处进行说明: -** legend entry(图例条目)** -图例有一个或多个legend entries组成。一个entry由一个key和一个label组成。 -** legend key(图例键)** -每个 legend label左面的colored/patterned marker(彩色/图案标记) -** legend label(图例标签)** -描述由key来表示的handle的文本 -** legend handle(图例句柄)** +

    三、legend(图例)

    +

    在具体学习图例之前,首先解释几个术语:
    +legend entry(图例条目)
    +每个图例由一个或多个legend entries组成。一个entry包含一个key和其对应的label。
    +legend key(图例键)
    +每个legend label左面的colored/patterned marker(彩色/图案标记)
    +legend label(图例标签)
    +描述由key来表示的handle的文本
    +legend handle(图例句柄)
    用于在图例中生成适当图例条目的原始对象

    以下面这个图为例,右侧的方框中的共有两个legend entry;两个legend key,分别是一个蓝色和一个黄色的legend key;两个legend label,一个名为‘Line up’和一个名为‘Line Down’的legend label

    -

    常用的几个参数:

    -

    (1)设置图列位置

    -

    plt.legend(loc='upper center') 等同于plt.legend(loc=9),对应关系如下表。

    +

    +

    图例的绘制同样有OO模式和pyplot模式两种方式,写法都是一样的,使用legend()即可调用。
    +以下面的代码为例,在使用legend方法时,我们可以手动传入两个变量,句柄和标签,用以指定条目中的特定绘图对象和显示的标签值。
    +当然通常更简单的操作是不传入任何参数,此时matplotlib会自动寻找合适的图例条目。

    +
    +
    +
    fig, ax = plt.subplots()
    +line_up, = ax.plot([1, 2, 3], label='Line 2')
    +line_down, = ax.plot([3, 2, 1], label='Line 1')
    +ax.legend(handles = [line_up, line_down], labels = ['Line Up', 'Line Down']);
    +
    +
    +
    +
    +../_images/index_31_01.png +
    +
    +

    legend其他常用的几个参数如下:

    +

    设置图例位置
    +loc参数接收一个字符串或数字表示图例出现的位置
    +ax.legend(loc='upper center') 等同于ax.legend(loc=9)

    - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + +

    loc by number

    loc by text

    Location String

    Location Code

    0

    'best'

    'best'

    0

    1

    'upper right'

    'upper right'

    1

    2

    'upper left'

    'upper left'

    2

    3

    'lower left'

    'lower left'

    3

    4

    'lower right'

    'lower right'

    4

    5

    'right'

    'right'

    5

    6

    'center left'

    'center left'

    6

    7

    'center right'

    'center right'

    7

    8

    'lower center'

    'lower center'

    8

    9

    'upper center'

    'upper center'

    9

    10

    'center'

    'center'

    10

    -

    (2)设置图例字体大小

    -

    fontsize : int or float or {‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’, ‘x-large’, ‘xx-large’}

    -

    (3)设置图例边框及背景

    -

    plt.legend(loc='best',frameon=False) #去掉图例边框
    -plt.legend(loc='best',edgecolor='blue') #设置图例边框颜色
    -plt.legend(loc='best',facecolor='blue') #设置图例背景颜色,若无边框,参数无效

    -

    (4)设置图例标题

    -

    legend = plt.legend(["CH", "US"], title='China VS Us')

    -

    (5)设置图例名字及对应关系

    -

    legend = plt.legend([p1, p2], ["CH", "US"])

    -
    line_up, = plt.plot([1, 2, 3], label='Line 2')
    -line_down, = plt.plot([3, 2, 1], label='Line 1')
    -plt.legend([line_up, line_down], ['Line Up', 'Line Down'],loc=5, title='line',frameon=False);#loc参数设置图例所在的位置,title设置图例的标题,frameon参数将图例边框给去掉
    +
    fig,axes = plt.subplots(1,4,figsize=(10,4))
    +for i in range(4):
    +    axes[i].plot([0.5],[0.5])
    +    axes[i].legend(labels='a',loc=i)  # 观察loc参数传入不同值时图例的位置
    +fig.tight_layout()
     
    -../_images/index_29_01.png +../_images/index_33_01.png
    +

    +

    +

    设置图例边框及背景

    -
    #这个案例是显示多图例legend
    -import matplotlib.pyplot as plt
    -import numpy as np
    -x = np.random.uniform(-1, 1, 4)
    -y = np.random.uniform(-1, 1, 4)
    -p1, = plt.plot([1,2,3])
    -p2, = plt.plot([3,2,1])
    -l1 = plt.legend([p2, p1], ["line 2", "line 1"], loc='upper left')
    - 
    -p3 = plt.scatter(x[0:2], y[0:2], marker = 'D', color='r')
    -p4 = plt.scatter(x[2:], y[2:], marker = 'D', color='g')
    -# 下面这行代码由于添加了新的legend,所以会将l1从legend中给移除
    -plt.legend([p3, p4], ['label', 'label1'], loc='lower right', scatterpoints=1)
    -# 为了保留之前的l1这个legend,所以必须要通过plt.gca()获得当前的axes,然后将l1作为单独的artist
    -plt.gca().add_artist(l1);
    +
    fig = plt.figure(figsize=(10,3))
    +axes = fig.subplots(1,3)
    +for i, ax in enumerate(axes):
    +    ax.plot([1,2,3],label=f'ax {i}')
    +axes[0].legend(frameon=False) #去掉图例边框
    +axes[1].legend(edgecolor='blue') #设置图例边框颜色
    +axes[2].legend(facecolor='gray'); #设置图例背景颜色,若无边框,参数无效
     
    -../_images/index_30_0.png +../_images/index_35_0.png
    +

    +

    设置图例标题

    +
    +
    +
    fig,ax =plt.subplots()
    +ax.plot([1,2,3],label='label')
    +ax.legend(title='legend title');
    +
    - +
    +../_images/index_37_01.png +
    +
    +

    +

    +
    +
    +

    思考题

    +
      +
    • 请尝试使用两种方式模仿画出下面的图表(重点是柱状图上的标签),本文学习的text方法和matplotlib自带的柱状图标签方法bar_label +

    • +
    diff --git a/第一回:Matplotlib初相识.ipynb b/notebook/第一回:Matplotlib初相识.ipynb similarity index 99% rename from 第一回:Matplotlib初相识.ipynb rename to notebook/第一回:Matplotlib初相识.ipynb index 3c0a934..aaa6331 100644 --- a/第一回:Matplotlib初相识.ipynb +++ b/notebook/第一回:Matplotlib初相识.ipynb @@ -322,15 +322,6 @@ "- 在第五节绘图模板中我们是以OO模式作为例子展示的,请思考并写一个pyplot绘图模式的简单模板" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 参考资料\n", - "\n", - "[1.matplotlib官网用户指南](https://matplotlib.org/stable/tutorials/introductory/usage.html)" - ] - }, { "cell_type": "code", "execution_count": null, diff --git a/第三回:布局格式定方圆.ipynb b/notebook/第三回:布局格式定方圆.ipynb similarity index 100% rename from 第三回:布局格式定方圆.ipynb rename to notebook/第三回:布局格式定方圆.ipynb diff --git a/第二回:艺术画笔见乾坤.ipynb b/notebook/第二回:艺术画笔见乾坤.ipynb similarity index 100% rename from 第二回:艺术画笔见乾坤.ipynb rename to notebook/第二回:艺术画笔见乾坤.ipynb diff --git a/第五回:样式色彩秀芳华.ipynb b/notebook/第五回:样式色彩秀芳华.ipynb similarity index 90% rename from 第五回:样式色彩秀芳华.ipynb rename to notebook/第五回:样式色彩秀芳华.ipynb index 97d5313..cc7045f 100644 --- a/第五回:样式色彩秀芳华.ipynb +++ b/notebook/第五回:样式色彩秀芳华.ipynb @@ -12,7 +12,7 @@ "metadata": {}, "source": [ "第五回详细介绍matplotlib中样式和颜色的使用,绘图样式和颜色是丰富可视化图表的重要手段,因此熟练掌握本章可以让可视化图表变得更美观,突出重点和凸显艺术性。 \n", - "关于绘图样式,常见的有4种方法,分别是修改预定义样式,自定义样式,rcparams和matplotlibrc文件。 \n", + "关于绘图样式,常见的有3种方法,分别是修改预定义样式,自定义样式和rcparams。 \n", "关于颜色使用,本章介绍了常见的5种表示单色颜色的基本方法,以及colormap多色显示的方法。" ] }, @@ -350,44 +350,6 @@ "plt.plot([1,2,3,4],[2,3,4,5])" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 4.修改matplotlibrc文件" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "由于matplotlib是使用matplotlibrc文件来控制样式的,也就是上一节提到的rc setting,所以我们还可以通过修改matplotlibrc文件的方式改变样式。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# 查找matplotlibrc文件的路径\n", - "mpl.matplotlib_fname()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "找到路径后,就可以直接编辑样式文件了,打开后看到的文件格式大致是这样的,文件中列举了所有的样式参数,找到想要修改的参数,比如lines.linewidth: 8,并将前面的注释符号去掉,此时再绘图发现样式以及生效了。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![](https://img-blog.csdnimg.cn/20201124005855980.PNG)" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -681,76 +643,6 @@ "plt.scatter(x,y,c=x,cmap='RdPu')" ] }, - { - "cell_type": "code", - "execution_count": 75, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 75, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
    " - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# 这里展示一个偏态数据的例子,生产数据常常是右偏居多,此时发现由于数据有明显偏斜,导致使用colormap时无法看出显示较好的区分度\n", - "from scipy.stats import skewnorm\n", - "x = skewnorm.rvs(20, size=50)\n", - "y = np.random.randn(50)\n", - "plt.scatter(x,y,c=x,cmap='RdPu')" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 76, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
    " - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# 使用对数后再绘制散点图,得到了更好的色彩区分度\n", - "x_norm = np.log(x)\n", - "plt.scatter(x_norm,y,c=x_norm,cmap='RdPu')" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -763,17 +655,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 作业" + "## 思考题" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "1)查阅matplotlib官网,列举出Sequential,Diverging,Cyclic,Qualitative,Miscellaneous分别有哪些内置的colormap,并以`代码绘图`的形式展现出来\n", - "\n", - "2)学习如何自定义colormap,并将其应用到任意一个数据集中,绘制一幅图像,注意colormap的类型要和数据集的特性相匹配,并做简单解释" + "- 学习如何自定义colormap,并将其应用到任意一个数据集中,绘制一幅图像,注意colormap的类型要和数据集的特性相匹配,并做简单解释" ] }, { diff --git a/第四回:文字图例尽眉目.ipynb b/notebook/第四回:文字图例尽眉目.ipynb similarity index 92% rename from 第四回:文字图例尽眉目.ipynb rename to notebook/第四回:文字图例尽眉目.ipynb index 79aba69..f40ba8d 100644 --- a/第四回:文字图例尽眉目.ipynb +++ b/notebook/第四回:文字图例尽眉目.ipynb @@ -746,15 +746,11 @@ ] }, { - "attachments": { - "image.png": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD4CAYAAADiry33AAAgAElEQVR4Ae2dB3wUxffAv/TeCUoPvXeE0BHpVYpKEZGqAiqiCIgoIgqof6R3FFGK0nsXCF2KQEIv0kFCLyGk8f+8uz0980u5hLtce/P5XHZvdnbmzXc2b9/Nzr4HmpSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBKIH4Ek8SueOKWzZcv21NfXN3Ea01aUgBJQAh5A4MCBAzcBn+i6kjy6TGfniZLfv3+/s8XQ9pWAElACbkMgSZIkF2ISNmlMBzRfCSgBJaAEPIOAKnrPGEfthRJQAkogRgKq6GNEoweUgBJQAp5BQBW9Z4yj9kIJKAElECMBVfQxotEDSkAJKAHPIGCLok8N/AEcBo4CX0TT9VTAr8AZYC9gvTZysJF/EmgUzbmapQSUgBJQAg4kYMvyyidAPeAhkALYAawF9ljJ1R24AxQG2gOjgdeAksb3UkAuYBNQFIiwOld3lYASUAJKwIEEbLHonxpKXsQQRS8fybNOrYCfjIxFwEuAvIwl+QsAuVn8ZVj2VaxPtOv+tm/gygG7VqmVKQEloAQSg8C+87eZuu2sQ5qyRdFLw8mAQ8ANYKMxPWMtUG7gkpERDtwDsgHW+XL4spFnfa5lvxcgb0ntDwoKsuTZvg2+Dft/hJn1YcOnEBps+7laUgkoASXgJAIPn4Tz2fJAXpm6m3l7LxIcKirUvslWRS9TLeWBPIBY5KWjiBGdKwWx+mPKj3K66et0oLJ8fHyifYs3unP+zUubFfrsgYpvwK4JMLUG/LX93+O6pwSUgBJwMQLbTgXR6Ht/ft5zga41fFn7fi3SprRlRj1+HbFV0VtqvQtsBRpbMoytWOp5jX2RMhNw27DgLflyWG4UV6Oca7+vqTNBi3HQZSU8fQo/NYeV/SBEfmBoUgJKQAm4BoE7j0Lp/9shuvzwB2lSJmPR29X5vEUp0qWyv5KXHtui6MW8zmzgSQPUB05EwbUC6GLktQN+N+bxJV8ezsqqnAJAEWMFT5TT7fy1QG14ZxdU6wsHf4JJfnBynZ0b0eqUgBJQAvEj8PTpU9YEXKPB99tYcegq79YrzOr3alIpf5b4VRTP0rbcPnIaD1plnl5uDL8Bq4Dhxpy6KPNZwM/Gw1ax5EW5S5LlmFL+GCATT30SbcVNyrTQ6Cso1QZW9IX5r0HpdtBkNKTLboinGyWgBJRA4hC4cT+EocsDWX/0b8rkzsScblUpmStjojQe3Rx6ojQcWyOVKlV6alfvleGhsGMM+H8HqTNCk2+gdFtI4pLdjw2NHlMCSsDNCIgVv/DAZUasOsaT8Eg+aFCUHjULkDyZLRMqtnc2SZIksuRQnnP+T7LFov+fk9wuI3lKqDsISrQ0W/eLu0PAQmg2BjLJwiBNSkAJKAH7E7h0O5jBSwLYceYmVXyzMqptGQr6pLd/Q3HUaN9bShyNOf3wcyWh+0Zo+BWc2waT/cxLMiMjnS6aCqAElIDnEIiIfMoPO/6i4ff+HLp0ly9fLs2CXn5OUfJC1TsseuvrJ2kyqN4XijeFFe/Bqn4QuNi8WidbIeuSuq8ElIASiDeB038/YODiIxy8eJe6xXz4unUZcmWWdSzOS95l0VtzzlrQvAyzxXi4dhimVIed4yHC/i8rWDer+0pACXgmgbCISCZsPk2z8Tv46+Yjxr5Wnh/ffMHpSl5oe59Fb32NycPYSl2gSANY1R82DoWjS6HVRHhO3PNoUgJKQAnETSDg8j0GLDrMiesPaF42J8NaliJ7ellV7hrJey16a/4Zc0GH+dDuB7h7EabVhi1fQ7i46NGkBJSAEoieQEhYBCPXHqfVpB3cfhTK9M6VmNixokspeZHcuy1667ET616WXBaoC+sGwbbRcGyF2brPE+2KJeuzdV8JKAEvI7Dn3C3TihqZpulQJS+DmpQgUxrx+eh6SS36qGOSLhu0nQEdf4Mn981O0tZ9AqGPopbU70pACXghgQchYQxZGkD76XuQ1TXzelRlZJuyLqvkZYjUoo/pQi3aCHrvgU3DYM8kOLEKWo6HgnVjOkPzlYAS8HACW07c4JOlAfx9P8T00lP/hkUd4oTM3hjVoo+NqLxF23wMvLkaZFnmnFaw4l14LL7dNCkBJeAtBGT+vd+CP+k6ex/pUyVn8TvV+bR5SbdQ8jJGatHbcqX61jQ7Sds60uwC+dQG8w2geDNbztYySkAJuCkBcV+w6sg1hq04yr3HYbz/UhF6v1iIVMnF9Zf7JLXobR2rFGmgwXDosRnSZoMFHWFhV3iYgCAptrap5ZSAEnAaAZme6TnnAO/O/5PcWdKw6r2aJj817qbkBaBa9PG9jHJXhF5bYec48P8Gzm2BxqOh7KvqJC2+LLW8EnBBAmLF/7rvEl+tOY68BDWkaQlTUBB7OyFLzK6rok8IbXGSVmcAlGhhdpK2tBcELoLm30Mmia2iSQkoAXckcOHWIwYtDmD3uVv4FczKqDZl8c2ezh278h+ZdermPzji+SVHcei2HhqPgvM7YFJV2DcT1ElaPEFqcSXgXAKyTHLm9nM0GutP4JV7Jv8083r4eYSSF7Jq0T/r9SWrcfzegWJNYOX7sPpDCFgMLSdA9sLPWruerwSUgIMJnLz+gI8XH+Hwpbu8VDwHI1qXJmcm5zohs3eXbbHoJebrFuC4ETHq/WiEGAAcMj6BRhSprEa580CAcWx/NOd6RlYWX+i8DFpOhL+PmoOT7xirTtI8Y3S1Fx5IIDQ8krGbTtF8wnbEb/y49uWZ2aUynqbkZehsCbEkoQTlcxDIAEgUk5eN8IDRDX8L4AOgnnFQFL34ELgZXeHo8uweYSq6RhyZd/8arPnI/JJVznLQahI8X8aRLWrdSkAJxIOA+IgfuOgIJ/9+QKvyufiseUmyuZATsnh05Z+isUWYssWiv2YoeanwgWHZxxaWqQMw/5/WvXEnY0547Rd45Se4fxWm14XfR6iTNG+8FrTPLkXgcWgEX60+RpvJO03r4md1qcy49hXcXsnHBdkWi966Dl/AHygN3Lc+YOynBS4DMjktQcIl/QXcAZ4C04DpRn7UTS9APuTLl6/ShQsXoh53z+/Bt2H9J3B4PmQvZp67z1fVPfuiUisBNyaw6+xN04qai7eD6Vg1H4OaFCdjatd0QpYQzM9q0VvalECHi4F+MSh5KSfTNjutlLzk1QAqAk2APkBtS4VRtnIDkCmeyj4+PlEOufHXtFmh9VTotBjCguGHRrB2IDx56MadUtGVgPsQuB8SZvIy2XHGXsRJ7fyefqZVNZ6k5OMaDVtX3chtT5T8XGBJLJW2j2ba5qpR/gawFKhi/CqIpRoPPFSkPvTeDZu+gL1T4eQac/jCQpZHGR7YZ+2SEnAygU3H/mbIsgCCHjyhV+2CfFC/KGlSupf7AnsgtGWOXqZ3Zhlz82NiaTQTUAdYblVG3jSQB7iSZL8hIKtyvDOlygDNvoOuayFZSvi5NSzrA49lZkuTElAC9iJw6+ET3pv/Jz3m7CdL2pQs7V2DT5qW8EolL0xtsehl6qWz1RJJOe8TmUo3BmWqsW0NbACsHbc/Z1jxlrbmAeuM8t67yV8d3t4J20aZ49Se2QjN/s/8pq33UtGeK4FnJiDuC1YcvmpyQvbwSbjJgn+nbiFSJrfFpn3m5l22gvg+jE2Ujrj98sr4ULp6yOxG4XoAlGwFTb6FDHJ/1KQElEB8CFy9+5hPlwXy+4kblM+bmW/alaXoc5YJhfjU5J5lY3sYa4tF7569dhepc5WHnltg13jYOhrObYPGI6FcB3WS5i5jqHI6lUBk5FPm77vIyDUnTBGfhjYvyZvVfUmW1CXtWKewUkXvFOxRGk2WAmp9CMUNJ2nL3oGARdBiLGS2zJBFOUe/KgElgMRrHbT4CHv/uk2NwtkY2bos+bLJKm9N1gS8e+LKmoQr7PsUha7rzNM3F/fAJD/YO12dpLnC2KgMLkUgPCKS6f5naTzWn2PX7jO6bRl+6V5VlXwMo6QWfQxgnJadNClU7QUSs3ZVP1g7AAIXQ6uJkL2I08TShpWAqxA4fu0+Axcf4cjlezQo+RwjXi7NcxlTu4p4LimHWvQuOSxAlvzw+hJ4eQoEnYApNWD7/0FEmKtKrHIpAYcSeBIewZgNJ2kxYQdX7jxmYscKTO9cSZW8DdTVorcBktOKyGt85TtCoZfMlv3m4XB0qdlJmjhL06QEvITAwYt3TE7ITt94SJsKuZEHrlnSpfSS3j97N9Wif3aGjq9Bllu+Ogde/Rke/A3TX4RNwyAsxPFtawtKwIkEgkPDGb7yGG2n7OLRk3B+7PoCY14rr0o+nmOiFn08gTm1eMmWUKAWrP8UdnwPx1ea/d/nr+ZUsbRxJeAIAjvP3GTQkiNcuv2Yzn75+bhxMTJ4kBMyRzCLqU616GMi46r5abLAy5PM8/fhofBjY1j9ETwRD9KalID7E7j3OMw0TdNp5l6SJ03Kr738+PLl0qrkn2Fo1aJ/BnhOPbXwS2Ynab9/CXunwal1mNbdF67vVLG0cSXwLATWH73O0GWB3HoUytt1CtGvfhFSp/A+J2TPwjC6c9Wij46Ku+SlSg9NRkO3dZAiDfzSFpa+DeIDX5MScCMC4l2yz9yDvPXzAVMQkGW9a5j8xauSt88gqkVvH47OrSWfH7y1Hfy/hZ1j4cwmaPqd2XeOrNzRpARclIA4IVv65xWGrzpG8JMIPmpYlLfqFCJFMrVB7TlkqujtSdOZdaVIDS8NNSv3FX1hYRco3tzsFTPD886UTNtWAtESuHL3MUOWBrD1ZBAV85mdkBXO4T1OyKKF4qBMVfQOAuu0anOWhR6/w+4JsGUkTKoCjb6G8p3USZrTBkUbtiYgTsjm7r3AqLUnTPFFh7UoSedq6oTMmpG991XR25uoK9SXLDnU/MBwkvYuLO8DAQvNEa2ySNhfTUrAOQTOBj00OSHbd/4OtYpkN4X0y5tVnZA5ejR0IszRhJ1Zf/bC8OZq83z95f0wuRrsmQqREc6UStv2QgLihGzy1jM0Gbedk9cf8G27sszpVgVV8olzMdii6PMCW4xQgkeB96MRrS5wDzhkfD6zKtMYOAmcAQZZ5etuYhAQJ2lVekLvPZC/BqwbCD80hhsnEqN1bUMJcPTqPV6evJNv1p2kXrEcbOpfh1cq5yWJLhRItKvDlqmbcOBD4KAR//UAsBE4FkXK7UDzKHmyAHYS0AC4DOwDVkRzbpTT9KvdCWTOC50WwpHfzMp+Wi2o/THU7AfiD1+TErAzgZCwCCb8fpqp286Z4rZO6VSRJmVy2rkVrc4WArYo+muAfCTJ65fHgdw2KusqhiV/zjh/AdDKxnONU3RjNwJiQZV7DQrVMztJ2zICji0zu0DOVcFuzWhFSuDAhdt8vOgIZ4Me0bZiHoY2L0HmtOqEzFlXhi1TN9ayyZM80Qh7rTONfXG4chhYC5Qy8uSGcMmqrFj1khdd6gXsl09QUFB0xzXPXgTS+8Ars+G1ufDoJsyoBxs/g7DH9mpB6/FSAuJ4bNiKo7SbupuQsEh+6laF/3u1nCp5J18Ptlj0FhHTA4uBfsB9S6axlWmd/MBDoCmwDJAoGdG9rfM0yrmWr9MB+eDj4xNTGUtZ3dqDQInm4FsTNnwKO8fB8VXQcgL41rBH7VqHlxHwPxXE4CUBXL33mDf88jOgcXHSp4qPivEyYInYXVstepnEFSU/F1gSjXyi+EXJS1oDSPnsxry8PMy1pDzAVcsX3boAgTSZzVM3byyHyHCY3RRW9YeQqPdyF5BVRXBJAneDQ/lo4WHe+OEPUqVIym9vVeOLVqVVybvQaNlyuxWrfJYxNz8mBtnl1cu/wfT+g8zLyw3kFnDXsOwLAFeA9kDHGOrQbGcSKFjXcJL2FeyZbHaS1nwsFG3oTKm0bRcnsDbgGkOXH+VOcCh9XizEu/XUCZkrDpktil5+x3cGAoylk9KPT4B8RoemAu2AdwBZoSMTvaLQZfpFvvcF1gOyAucHQJZoanJFAinTQeOvoVRrEDcK816BMq9C41GQLpsrSqwyOYnAjQchfL78KGsDr1MqV0Z+6vYCpXJlcpI02mxcBKKbQ4/rHIcfr1Sp0tP9++W5rCanEQh/Yo5RK3FqU2eGpt9AqTbqRsFpA+IaDYsTskUHLjNi9XEeh0WY3Aj3rFVQnZC5wPAkSZJElr5Xjk4UWyz66M7TPE8nkDwVvPgJlGhptu4XdYOARdBsDGTUtdCePvzR9e/S7WA+WRrA9tM3ecE3C6PalqWQj6zR0OTqBFTRu/oIOVu+50tD903mefstX8GkqtDwS6j4hlr3zh6bRGpfnJDN2X2eb9afNC2jG96qFK9XzU/SpC45IZBIVNyrGVX07jVezpFWnKTVeA+KN4MV78HK9yBwkdlJWtaCzpFJW00UAmduPGDg4gAOXLhD7aI+fN26NHmyqBOyRIFvx0ZsXV5pxya1KrclkK0QdFkJzb+HK3/C5Oqwa6I6SXPbAY1Z8LCISCZtOUPTcTsQj5P/90o5fur6gir5mJG59BG16F16eFxQOHGSVrkbFGkEqz6ADUPg6BJoORGeK+mCAqtI8SUQeOWeyX3BsWv3aVYmJ8NalsInQ6r4VqPlXYiAWvQuNBhuJUqm3NDxV2g7C+6ch2m1YesoCA91q26osP8SECdko9edoNWknQQ9fMLU1ysxqVNFVfL/InLbPbXo3XboXEBwcZJWph3Iy1ZrB8LWkXBsuflN29yVXEBAFcFWAn/8ddsUEOTczUe8WjkPQ5qWJFNa9WpqKz9XL6cWvauPkDvIly47tJsFHRbA47swsz6sHwKhwe4gvVfL+PBJOEOXBfLqtN2ERkTyS/eqfNOunCp5D7sq1KL3sAF1aneKNYH81c2eMHdPhBOroeV4KFDbqWJp49ET2HLyBkOWBHDtfghda/jyUcNipFMnZNHDcvNctejdfABdTvzUmczLLmV1jqSfWsDK9yFEApBpcgUCdx6F0v/XQ3T9cR9pUyVn0dvV+bxFKVXyrjA4DpJBLXoHgfX6asWKf2cXbP0adk+CU+vNyzLF6tfkFALivmBNwHU+XxHI3eAw3qtXmD71CpMqubih0uTJBNSi9+TRdXbfUqaFhiPMb9amyQLz28Oi7uZgJ86Wzcva//t+CG/9fIA+8w6SM1MaVvStSf+GxVTJe8l1oBa9lwy0U7uZpxL02gY7vgf/b+Hs79DkG/OKHQ0Q7dChESv+t/2XTE7IQsMjGdykON1rFiB5MrXxHArexSpXRe9iA+Kx4iRPCXUHQokWZidpS3qY3SiIkzRZk6/J7gQu3gpm8NIj7DxziyoFsjKqTRkKqhMyu3N2hwr1tu4Oo+RJMsrbs903QqOv4dw2s5O0/T9AZKQn9dKpfYmIfMqsHX/RaKw/hy/dY8TLpVnQ00+VvFNHxbmN26LoJRTgFiPClAQNeT8akTsBR4zPLqCcVZnzVkFL1Mm8FRiv3U2aDKr1gd67IHcFsysFWZ1z66zXIrFXx0///YB2U3fx5apj+BXMyoYPavO6n3qatBdfd63HlqkbiRL1ISABwDMA4tx+I3DMqtN/AXWAO4Asq5Ag31Wtjr8I3LT6rrtKAMTz5Rsr4OAcc4DyKdXhxSHg1xvEY6YmmwnI/PvUbWeZ8PtpU6zWsa+Vp1X5XCTRZyA2M/Tkgrb8N10D5CPpgWHZy6SqtaIXK96S9gASBFyTEoibgCiiSl2gSANY/SFsHPqvkzTxha8pTgKHL91l4OIjnLj+gBblcvF5i5JkT69OyOIE50UFbJm6scbhC1QA9lpnRtnvDqy1ypPYsRuMXwK9rPKj7soxmdrZHxQUFPWYfvd0AhlzQft50O4HuHsJpteBLV+DhDTUFC2Bx6ERjFxznNaTd5qCc894ozITOlRQJR8tLe/OjE+IGIkZtg34ClgSAzaZopkM1ARuGWVyAVeBHMaUz7uAfwznm7I1ZmxsdLzg2KNbsH4wHPkVfIqbXSDnfcELOm57F/ecu2VyQnb+VjAdquRlUJMSZErjOk7IwsLCuHz5MiEhIbZ3SkvaRCB16tTkyZOHFCn+O972iBkrNS4G5sai5MsCM405eouSF8FFyUu6ASwFqsSl6I3yuvFWAumyQZvpULqt+UHtrAbg9w7U+xRSpvNWKqZ+PwgJY9TaE8zde5F8WdMyr0dVqhfO7nJMRMlnyJABX19ffU5gx9GR9yJu3bpluokWKFDA5pptmboRq3+WMTc/Joaa8xk3gM7AKasy8l8pD3AlyX5DIND4rhslEDuBoo2g9x5zoJM9k2FyNTi3NfZzPPjo7yf+puH3/sz/4yI9ahZgXb9aLqnkZQjEks+WLZsqeTtfj/JwXbjG95eSLQ9jawCiwAOAQ4bcnwCi3CVNBT4DshnTNpInK3UqA88ZVrzkSVvzgHWms/SPErCFQOqM0HyM2bpf8S7MaQUVOptdK6TJbEsNbl/m1sMnDF91jOWHrlL0ufRM7lSdCvmyuHy/dMWPY4YoIVxtUfQ7wBT8PTapewDyiZrORVlTH/W4flcCthHwrQHv7DQHN9k1AU5vNN8AJGC5hyb5mb7yyDWGrTiKTNm8/1IR+rxYmJTJbfkh7qFQtFsJIqBXTIKw6UlOIZAiDTQYDj02gwQ7WdARFr4JD+Xxj2el6/dC6DlnP+/N/5O8WdKw8t2afNCgqCr5BA5z+vSylgSuXr1Ku3btEliL+55mi0Xvvr1TyT2TQO6K0Gsr7BgL/t+Y5+0bj4Kyr4GbvyAkVvyCfZf4evVxwiIjGdK0BN1qFiBZ0vgskPPMYbdHr3LlysWiRYvsUZVb1aEWvVsNlwr7D4FkKaDOAHhrO2QrAkvfgrmvmNfg/1PIvXbO33xExxl7GbwkgFK5M7Lu/dr0rF1Qlbwdh/H8+fOULm1+EW/27Nm0adOGxo0bU6RIET7++ON/WtqwYQPVqlWjYsWKvPLKKzx8+PCfY+64o4reHUdNZf6XQI7i0G0dNB4NF3bCZD/4Y4ZbOUkTJ2Qz/M/ReJw/gVfuMbJNGeb39MM3u3cvJf13kB23d+jQIX799VcCAgJM20uXLnHz5k1GjBjBpk2bOHjwIJUrV2bMmJgWHDpONnvWrFM39qSpdTmHgDhJ83sbijU2hy1c8xEELoGWEyB7YefIZGOrJ68/4ONFhzl8+R71S+RgxMtleD5TahvP1mLPSuCll14iU6ZMpmpKlizJhQsXuHv3LseOHaNGDVlwCKGhoSbr/lnbcub5quidSV/bti+BLL7QeRkcmgvrPwGTk7TBUO1dl3OSJk7IJm05w+StZ8iQOgXjO1SgRdmcuu7cvldEnLWlSvWvT6BkyZIRHh6OPCdp0KAB8+fPj/N8dymgUzfuMlIqp20E5GFshdehzx9mR2mbhsHMenBdXgNxjXTo0l2aT9jOuM2naVomJ5v616FlOfU06RqjA35+fuzcuZMzZ86YRAoODubUKev3QF1FUtvlUEVvOyst6U4EMjwPr/0Cr/wE96/C9Lqw+UsIc57vleDQcEasOkabyTu5/zicWV0qM659BbKmS+lOZD1eVh8fH+RBbYcOHShbtqxJ8Z84ccKt++2Sa7bUqZlbX1OuJ3zwbVg/BA7Pg+xFzU7S8lmHS3C8yLvO3GTQkgAu3g6mU9V8DGxSnIyp/+uUyvFSJF4Lx48fp0SJEonXoJe1FB3f2JyaqUXvZReIV3Y3bVZoPQVeXwxhj+GHRrDmY3ji+CVz9x6HmbxMdpy5F1kKv6CXH1+1LuPRSt4rrzEX77Q+jHXxAVLx7EigcH3ovRs2D4c/psHJtdBiLBR+yY6N/FvVxmN/8+myAIIePOGt2gXpV78oaVIm+7eA7imBRCKgFn0igdZmXIRAqgzQ9Fvoug6Sp4Jf2sCy3vBYomDaJ918+IS+8w6aXBhkSZuSZX1qMLhpCVXy9sGrtSSAgFr0CYCmp3gAgfzV4O0dsG007BwHZzZB0++gZMsEd06W5YmHyS9WHuXhk3D6NyjK23UKqX+aBBPVE+1FQBW9vUhqPe5HIEVqqP85lGwFK/rCb52hREuzws8gHrZtT1fvPmbI0gC2nAyifN7MfNOuLEWfs4RisL0eLakEHEFAFb0jqGqd7kUgV3nouQV2jYeto+Evf2j0NZTvGKeTtMjIp8z94yKj155AXBkMbV6SN6v7qn8a97oCPF5anaP3+CHWDtpEQJyk1frQPJ0jcWqX9zbP39+5EOPpf918RPsZexi6LJByeTOxvl9tuqunyRh5JfYBi2ti63anTp3KnDlzrLMStG/tHM1SwbBhw/juu+8sX11qa4uizwtsMUIJHgXej6YHsh5/PCCvkh0BKlqV6QKcNj6yr0kJuC4Bn6LQdS00+RYu7jWHL9w77T9O0sIjIpm67SyNx/pz/Np9vmlbll+6VyVftrSu2y+VzETg7bff5o033vA6GrYoegkL+CEgbz/4AX2AklFINQGKGJ9ewBTjeFbgc0DeTpGg4LLv+jHQonROv3oZgaRJoWov6LMH8vnB2o/hxyYQdIpjV+/TevIuU4Du2kV9TO4LXn0hr/qocZNLxNrqrlu3LgMHDqRKlSoULVqU7du3m3oRERHBgAEDeOGFF0xvxk6bNi3evZO6+/XrR/Xq1U1ukf/4449412HPE2yZo78GyEfSA8Oyzw0cM/Jk0wqQ30NPgT2ABPPMCdQFNgK3jbKy3xjwHG9BVhB018MIZM5nfsnq8HyerhtMxOTqrA1rw41UrZnUsSJNyzyvCt6GIZdVSHKDtGcqmSsjn7co9cxVihMzUcJr1qzhiy++MLkmnjVrlsmj5b59+3jy5InJi2XDhg0pUKBAvNp79OgRu3btwt/fn27duhEYGBiv8+1Z2BZFb92eL1AB2GudCYjiv2SVd9nIiynfqug/u/JLQD4EBQX9k6k7SjrP4E0AACAASURBVMCpBJIk4UCWJoxKnpY3H03iw+S/8n62oyTPPgmSiC2jyZ0JSOARSZUqVULm3SVJ0JEjR478E4nq3r17nD59+j+KPqYA3db54itHUu3atbl//77J/XHmzM4JaB8fRS9BFxcD/YCot+fofOaIdR9TvglAlD/TAfng4+Mj52pSAk4l8OhJON9tOMnsXefJmTEDaV+fCxF7SC7+7mfUgxrvQZ2BILFsNcVIwB6Wd4yVP+MBi5tii4tiqU7eh5gwYQKNGjWKsfZs2bJx585/X7K7fft2rDcD65tAjBU76IAtc/TStHhfEiU/F1gSjSxiwctDW0vKI3F4gZjyLeV0qwRcksD200E0GuvPjzvP09kvPxv61+HFYjnML1T12QvlOsCO72FqTbiw2yX7oEIljIAo+ClTphAWFmaqQFwUyzSMdZIVPTlz5mTz5s2mbFHy69ato2bNmv8Uk8hVknbs2GGaCrIEOPmnQCLu2GLRi1U+y5ibjyme1gqgL7DAePB6z5jXXw98bfUAtiEwOBH7p00pgXgRuBccxldrjvHb/ssUyJ6O396qRpUCsqbAKqXJAi9PgjJtzRGtfmwML/Q0v3wlLhY0uQQB8SOfJ4/YnObUv39/y26s2x49epimcSRerFj34rZ42bJl/3OOLNPs06cPH34oa1Xg888/p1ChQv+Uy5Ili+lhrEzb/PDDD//kO2MnuqmVqHLILUoeR0vkhkjj4CdAPmN/qjFFM9F40BoMdAX2G8e7AVJe0lfAj8Z+jBt1UxwjGj3gQALrAq8zdHkgtx+F0qt2Qd5/qQipU8ThhEw8YP7+JcgSzEx5oPlYKFLfgVK6R9XRudF1D8ntI6WsupE19RJv1hEpOr6xuSm2xaLfEcNcu7X8Mqcuyy6jS3Irc+7tLDqpNE8JGATEu+SwFUdZHXCNEjkz8kOXFyiTxxxHNE5IqdJDk9FQqo3ZjcLctuZpHXmzVtwja1ICLkDAFkXvAmKqCErA/gTkZ/mSg1cYvuoYj0MjGNComMmST5HM1kdXVjJJIJO3tsP278xz9yYnad9CyZfjdKNgVYvuegiBrVu3ulRPVNG71HCoMIlF4PKdYD5ZGoj/qSAq5c/C6LZlKZxDFpY9QxInafU+NTtJW94XFr4JxZtDs/8DCW2oSQk4iYAqeieB12adQ0CckP2y94LJCZnMNw5rUZI3qvmSVMI/2Ss9XwZ6bIbdE2HrSJhYBRp9ZQ5aLsHLNSmBRCagij6RgWtzziNwNuihKazfvvN3qFUkO1+3LkPerA7yT5MsOdTsZ7boV7xrnr8PXAQtxkEWee9QkxJIPAIJmIxMPOG0JSVgDwJhEZFM3nqGJuO2c/L6A75tV5Y53ao4TslbC529MLy52jx9c3m/2UnanikQGWFdSveVgEMJqKJ3KF6t3NkEAq/c4+VJO/lm3UnqFcvBpg/r8ErlRHZCJk7SXugBvfdA/hqwbpA5QPmNE87G49HtO9JNsYCTt2nLly9PqVKlKFeuHGPGjCEy0rIC3bXQ6tSNa42HSmMnAiFhEYzffJpp/ueQuK1TOlWkSRkn+6bJnBc6LYSAhbB2IEyrBbUHQI1+kDylnXqu1cRGQNwU2yulSZOGQ4cOmaq7ceMGHTt2RPziiHM0V0tq0bvaiKg8z0xg//nbNB2/nclbz9K6Qm429a/tfCVv6ZU8jC37KvT5wzx/v+UrmPEiXDloKaFbBxJwlJviHDlyMH36dCZOnGh6mzYkJISuXbtSpkwZKlSowJYtEtIDmjZtanKYJvuSP3z4cFP+0KFDmTlzJrIsU162ateuHcWLF6dTp06m+kyFnuGPWvTPAE9PdS0CEpD723UnmLPnArkypTHNw4vPeJdM6X3glR+hTDtY1R9mvgTV+sKLn3iek7S1g+C6vFhvxyQrm5qMeuYK7emmuGDBgqapG7Huf/nlF5NsAQEBnDhxAnFzLD5zxJOl+L339fUlefLk7Ny501RO/OG8/vrrXLt2jT///JOjR4+SK1cuk4tkKWPtQychnVaLPiHU9ByXI7DtVBCNvvc3Kfku1XzZ8EFtXFbJW9Mr3gzESVqF180xa6dUh/PyMrqmxCAQk5ti8WMj8+9Vq1bl1q1bJjfFtsgjL+FJEsXduXNn075Y5vnz5zcp+lq1apn808vxZs2a8fDhQ8Qnj7hILlasmKm8BEIRHz1JkyY1yWBxn2w6mMA/atEnEJye5hoE7gaH8uWq4yw+eJmCPulY+FY1Kvu6meuBNJmh5QQo3RZWvAezm0HlblD/C0id0TVAP4sUdrC8n6X52M5NqJvi6Oo8d+6c6QGtTONYFH7UchK1av/+/Yj136BBA27evMmMGTNM/vAtZS0yyXdr98mW4wnZqkWfEGp6jksQWBNwjfpjtrHs0BX6vFiINe/Vcj8lb02yYF3ovds8hXNgNkz2g1PiAFZTYhKwxU1xVHkkWJI86O3bt68p6phM0cydK17dMVnyFy9eNFnsKVOmJG/evPz222/4+fkhFr44P5OtI5Na9I6kq3U7hMCN+yF8tvwo645ep1SujPzUrQqlctnohMwhEtmx0pTpzG/RlmoNy/vAvFehzKvQeBSky2bHhjy/Kke7KX78+LFpakX81st8u0zVWFwh9+7d26T45WGsHJs9ezYWS12UuvixT5s2rUnBX7582eGK3iXfx1Y3xZ7/T5iQHsrP4YUHLjNi1TFCwiP5oH5RetYqQPKEOCFLiACJfU74E9g+xuwoLXUmaPKNeXrHDdwoROdGN7HxeXJ70fF9VjfFnsxL++YmBC7dFidkAWw/fZMXfLMwqm1ZCvk8oxMyV+978lTw4mBzVCux7hd3h8DF5rdsM+ZydelVPhcioFM3LjQYKsr/EoiIfMqc3ef5dv1JUwDiL1uVolPV/PZ1Qva/zbpWznOloPsm2DsFfh8Bk6pCwy+hYhd1gexaI+Wy0tii6CVoSHPgBlA6mp4MADoZ+VJfCYnvDdwGJKz6A0Ace4QDjgm3Eo1QmuX+BM7ceMDHi45w8OJd6hT14avWpcmTxUFOyFwdlzhJq/4uFGtqDl+48n0IWAQtx0PWgi4pvUy1OTMgtktCsYNQMa3oia1qW1bdzDZCBMZUz7dAeeMj8WC3GUreUv5F45gqeQsR3cZKQJyQTfz9NE3H7eDczUeMebUcs7u+4L1K3ppWtkLwxgpzyMJrh2Fyddg10eWcpKVOndq0/jwhSsm6u7r/XwLCU9b1C9/4JFssen/AVr+qHYD58RFAyyoBawIBl+8xYNFhTlx/QLOyORnWohQ+GVJZF9F9cZJWuSsUaQir+8OGIXB0CbScCM+VdAk+8sKPrCaRZYea7EtAlLx10HNbard11Y0o+lUxTN1Y2pHf1JeBwlYW/V/AHUBeF5sGTLcUjmbbC5AP+fLlq3ThwoVoimiWpxIQJ2RjN51mxvZzZE2XkhEvl6ZRKY3KFOd4y5uY8oB27ccQch9qfwQ1+6uTtDjBeV6BxFp10wIQxw0yN29JNYCrQA5gIyB+WeUXQnRJbgKmG4GPj4/5PeLoSmmexxHYe+4Wg5YE8NfNR7xWOS+fNC1BprQpPK6fDumQLLUUfznyspW4P5aIVseWm637PJUc0qRW6n4EbJmjt7VX7aOZthElL0ke5C4FqhjfdaMEeBASxtBlgbw2fQ8yL/9L96qMbldWlXxCro102aHtTOiwAB7fhVn1Yf0QCA1OSG16jocRsGWO3pYuy2uJdYDXrQqnA+RGIqtuZL8hYPbJaVVId72TwJYTNxiyNIBr90PoVqMAHzUqStqU9rocvZOpqdfFmkD+6rDxc3PM2hOrzH50CtT2YijadVv+s+Thal0guzEH/zlg+V091UDYGtgAPLJC+pxhxUuWtDMPWGd1XHe9kMDtR+KE7BhL/7xCkRzpWfR2dSrlz+KFJBzYZXmLtsVYw0nau/BTC/Oae1l7L8c0eR0BWx/GJioYdYGQqLgTpTFZFrY64BqfLz/Kvcdh9K5biD71CpMqebJEad9rG5Gpm61fw+5JkP45aP49iNWvyeMIxPYw1p5z9B4HTjtkHwJ/3w+h188H6DvvT3JlTsPKd2vSv2ExVfL2wRt7LSnTQsMR0GMTpMkK89vDom7w6Gbs5+lRjyJgy9SNR3VYO5N4BMSK/23/JUasPk5oeCSDmxSne00PdkKWeGjj31LuStBrK+z4Hvy/hbNbzE7SZMWOGzhJi3+H9QxrAqrorWnovt0IXLwVzKAlR9h19hZVCmRldNuyFMguz+Q1OY2ABCCvO9BwktYXlvQwBypvPgYy5XGaWNqw4wno1I3jGXtVC+KEbOb2czQa68+Ry/dMLz4t6OmnSt6VroIcJaD7Bmg0Es5vh0l+sG8WREa6kpQqix0JqEVvR5jeXtWpv81OyA5duku94jlMSl7m5DW5IIGkyaBab/ODWXGQJq4UAsWNwngQfzqaPIqAWvQeNZzO6YzMv4/bdJpm47dz4dYjxrUvz6wulU0PXp0jkbZqM4GsBeANeZN2AlwPAAlOvnMcRIizWU2eQkAtek8ZSSf14/CluwxcfMTkhKxFuVwMa1GSbOnVCZmThiNhzcrD2IpvQOEGsPpD2PgZHF1qdqPwfHSeyRPWjJ7lPAJq0TuPvVu3/Dg0gq/XHKf15J3cCQ5lxhuVmdChgip5dx7VjDmh/Vxo9yPcvQTT68DvX4GENNTk1gTUonfr4XOO8LvP3mLwkiOcvxVMhyp5Gdy0BBlTW16Wdo5M2qqdCIh1X7qN4SRtMPh/A8dXmK37vC/YqRGtJrEJqEWf2MTduL37IWGmuK0dZuwh8inM61GVkW3KqpJ34zGNUfS0WaHNNOi0CJ48hFkNYN1gCLX2chLj2XrAxQioRe9iA+Kq4mw+/jdDlgZy40EIPWsVoH+DYqRJqe4LXHW87CZXkQbQezds/gL2TAZxktZiPBSSwHGa3IWAWvTuMlJOkvPWwye8N/9Puv+0n0xpUrCkdw2GNCupSt5J4+GUZlNnhGb/B2+ugaQp4OeXYXkfsztkpwikjcaXgFr08SXmJeXFfcGKw1f5YuUxk9/4fvWL0LtuYVImV9vASy6B/+2mbw14ZydsHQW7JsDpTeYbQInm/1tWc1yKgP7XutRwuIYw1+49psdP+3l/wSHyZk3Lqndr0a9+UVXyrjE8zpUiRRpo8AX03AzpfODXTvBbF3gosYU0uSoBtehddWScIFdk5FMW7LvEyDXHCYuM5NNmJehaowDJkrqkN2snENIm/yGQqwL02mJ+uWrbaPhrGzQeBWVfUydp/0BynR1bLPofjFCAgTGILUFJ7gGHjM9nVuUaAyeBM8Agq3zddTEC528+ouPMPaZVNaVzZ2J9v9r0qFVQlbyLjZNLiZMshTkY+ds7IFsRWPoWzG1nXoPvUoKqMLYo+tmAKOzY0nagvPGxhAuUJRmTAIlyUBLoYGxjq0ePJTKB8IhIpvufNTkhO3rlPqPalGFez6rkz6aeJhN5KNy3OZ9i0G2d2e3xhd0w2Q/+mKFO0lxoRG2ZuvEHfBMgswQCF0v+nHHuAqAVcCwBdekpDiBw4vp9Bi46wuHL96hfQpyQleH5TKkd0JJW6fEExEla1begaGMQJ2lrPoLAxWYfOtmLeHz3Xb2Dtlj0tvShGnAYWAuUMk7IDVyyOvkyIHkxpV7AfvkEBQXFVEbz7UDgSXgEYzaeovn4HVy+89jkukBcGKiStwNcb68iS37ovBRaTYYbx2BKDdg+Rp2kOfm6sMWij0vEg0B+4CHQFFgGyC08uid4T2OpbDogH3x8fGIrF0sVeiguAn9evGNyQnbq74e8XD4Xn7UoRdZ0KeM6TY8rAdsJiBuFCp2gcH1Y86H5Zatjy8xuFHKWtb0eLWk3Avaw6O8bSl6EWgOI05PsgFjwea0klRA2V62+624iEggODefLVcdoM2UXD0LC+eHNyoxtX0GVfCKOgdc1leE5eO0XeHUO3L8G0+vC5uEQFuJ1KJzdYXtY9M8DfwNihcu8vNw8bgF3Dcu+AHAFaA90dHaHvbH9nWdumsL6Xbr9mE5V8zGoSXEyqBMyb7wUnNPnkq3AtxasHwLb/w+OrYBWEyGfn3Pk8cJWbVH08wFZQmmx0j83rHbBNRVoB7wDSKSCx4ZCF6Uv3/sC6wFZgSPLNI96IWOndfne4zDTmnhZG++bLS0LevnhVzCb0+TRhr2YgDhJaz0FyrSFlf3gh8ZQpRe89BmkSu/FYBKn69HNoydOy7G0UqlSpaf798tzWU0JJbDh6HU+XRbIzYdP6Fm7IB/UL0rqFOqELKE89Tw7EnjyADZ/CX9Mh0x5ocVYKPySHRvwzqqSJElyAKgcXe/tMUcfXb2a5yQCotj7zjtIr58PmObfl/WpweAmJVTJO2k8tNloCKTKAE2/Ma+9T54KfmkDy3pD8O1oCmuWPQjYMnVjj3a0DgcTECdkyw5dMTkhC34SwYcNivJWnULqn8bB3LX6ZyAgc/TyVq0EN9kxFk5vhGbfgczpa7IrAVX0dsXpnMqu3n3MkKUBbDkZRIV8mfmmbVmKPJfBOcJoq0ogPgRSpDbP05c0XB//9gaUaAlNvwNZtaPJLgRU0dsFo3MqESdkc/+4yKg1x00Rnz5rXpIu1X3VP41zhkNbfRYCsr6+5+9m98fiBlmcpDUaCeU7qpO0Z+FqnKuK3g4QnVHFuaCHDFocwB/nb1OzcHZGtiljcinsDFm0TSVgFwLiJK1WfyjRAla8C8t7Q8BCaDEO5I1bTQkmoA9jE4zOOSeKE7Kp287SZNx2jl+/b5qm+bl7FVXyzhkObdURBMQ3jkSzkumby/tgcjXYO02dpD0Da7XonwFeYp967Op9Pl58mMAr92lY8jm+fLk0z2VUJ2SJPQ7aXiIQSJoUqvSEoo1g1Qew9uN/naSJt0xN8SKgFn28cDmnsDgh+78NJ2k5cQfX74UwqWNFpnWupEreOcOhrSYmgcz5oNMiaD0Nbp6CqTXB/zuICEtMKdy+LbXoXXwID1y4zcDFAZy58ZA2FXMztFlJsqgTMhcfNRXPrgTESVq59lCoHqwZAL9/CUeXmd0o5JIwGJriIqAWfVyEnHT80ZNwhq04Srupu3kcGsHsri8w5tXyquSdNB7arAsQSJ8DXv3J7Cjt0Q2YUQ82fg5h4nlFU2wE1KKPjY6Tjm0/HcTgJQEmX/FvVMvPx42Lkz6VDpWThkObdTUCsirHtyZsGAo7x8KJVeYAJ/mru5qkLiOPWvQuMxRwLziMAQsP03nWH6RMlpTf3qrG8FalVcm70BipKC5CIE0W89RN52UQEQo/NoHVH4L40dH0PwTUTPwfJM7JWBd4naHLA7n9KJR36hbi/ZeKqH8a5wyFtupOBAq9CL33wO8jYM8UOLkOk5O0Ig3cqRcOl1Uteocjjr2BGw9C6D33AG//cgCf9KlY3qcGAxsXVyUfOzY9qgT+JZAyHTQeCd03gOzPbQdL3lInaf8SQi16KxiJuStOyBYfvGKK+vQ4LIIBjYrRq3ZBUiTTe29ijoO25UEE8laBt7ebl1/uGANnN0PTb0H86MjKHS9OquidMPiX7wTzydJA/E8FUSl/Fka3LUvhHBp8wQlDoU16GgFxe1xviNkD5vI+sPBNKN7c/JZtxpye1lub+2OL+SiRoW4AgTHU2gk4Ynx2AeWsyp0HAoBDgNdHEhEnZD/tOk/D7/3Zf/42X7QsxcK3qqmSt7pgdFcJ2IXA86Whx2ZoMBzObIJJVeHgHHgqwe+8L9li0c8GJgJzYsDzF1AHuAM0AaYDVa3KvgjctPrulbtngx4ycNER9l+4Q60i2fm6tToh88oLQTudeASSJYca75stenGSJp+ARWYnaVkllLX3JFssen8gttAvYsWLkpe0B8hj7OsGCIuIZNKWMyYnZKdvPOS7V8oxp5s6IdOLQwkkGoFshaDLKmg2Bq4chCnVYfdkiIxINBGc3ZAtFn18ZOwOrLU6QX4nbQBkO82w9q0O/2e3FyAfgoKC/nPAXb8EXrnHwMVHOHr1Pk3LPM+wlqXIkUGdkLnreKrcbkxAnKS90P1fJ2nrB8PRJdByIuQo7sYds010Wx9F+wKrgNKxVCtTNJOBmsAto1wu4CqQA9gIvAvIL4RYk7sHBw8Ji2D85tNM8z9HlrQpGfFyKRqX9t4HQbEOth5UAolNQObpxc/92oEQ+hBqD4Aa/SB5ysSWxK7txRYc3F4WfVlgpjFHb1Hy0glR8pLkYe5SoIotit44xy03+87fNs3Fn7v5iFcq5eHTZiXJlDaFW/ZFhVYCHklAllqWfRUKvgjrBsKWrwwnaRMgdyWP7LItc/RxdTwfsAToDJyyKpwOsAQulf2GsazcsTrNPXcfPgnns+WBvDJ1N0/CI03z8N++Uk6VvHsOp0rtDQTS+0C7H6D9fHh8G2bWN/vPCQ32uN7bYtHPB+oC2YHLwOeAxUSdCnwGZDOmbQRQOFAZkMi+YsVLknbmAeuM7x612XYqiE+WBHD13mPerO5revkpnToh86gx1s54MIHiTcG3hlnJ7xr/r5M0cZzmIcnWOfpE7a67zNHfDQ5l+KpjLDl4hUI+6UwvPlX2zZqorLQxJaAE7Ejg3DZY+R7cOQ+Vu0H9LyB1Rjs24LiqEmOO3nHSu2DN4r5gbeB101TN3eAw+r5YmL71Cqt/GhccKxVJCcSLQME68M5u87z9nslwaj00/968WideFblWYXvM0btWjxwszY37ISYHZL3nHuT5TKlZ3rcGHzUqpkrewdy1eiWQaARSpoVGX0H3jZAqI8x7FRb3gEfu+96nLXP0icbXlRsSK37hgcuMWHWMkPBIk4fJnrUKkFydkLnysKlsSiDhBPJUhrf8QRykSZzas79Dk2+gdFu3c5Kmit6Gy+DS7WBTxKcdZ25SxTcro9qWoaCPOiGzAZ0WUQLuTUDW1tcdBCVawoq+sLi72Y1C8zGQUV4Tco+kUzexjFNE5FN+3PmXyQnZnxfv8GWrUizo5adKPhZmekgJeCSB50qap3IafgXntpqdpB2Y7TZO0tSij+GqPHPjAR8vOsLBi3epU9SHr9uUIXfmNDGU1mwloAQ8nkDSZFC9L8hyzBXvwcr3zdZ9y/GQtaBLd18t+ijDI07IJmw+TdNxO5C3W79/rRyzu76gSj4KJ/2qBLyWgCj1LivNXjCvHYbJ1WHXBJd2kqYWvdXVGnD5HgMWHebE9Qc0K5vT5C8+e/pUViV0VwkoASWA+WFspTehSENY1R82fAqBS6DVJJBpHhdLatED4oRs5NrjtJq0wxSce1rnSkzqWBFV8i52tao4SsDVCMgD2Q7zza4U7l6EabVhy0gID3UpSb3eot977haDlgTw181HvFY5L580K0GmNBYPDy41ViqMElACrkhAnKTJkssCdWHdINg2Co4tN1v3eVzDSZrXWvQPQsL4dFkAr03fQ3hkJHN7VGV0u7Kq5F3xH0llUgLuQCBdNmg7Azr+Bk/uw6z6sH4IuICTNK+06LecuMGQpQFcux9C95oF+LBhUdKm9EoU7vDvozIqAfciULQR9N4Dmz6H3RP/dZJWoLbT+uFVFv3tR6F88Oshus7eh3iXXPxOdYY2L6lK3mmXnzasBDyUgDhCEx85b66GJEnhpxbmJZmP7zqlw15hxor7glVHrjFsxVHuPQ7jvZeK0OfFQqRKnswp0LVRJaAEvISAuDp+ZxdsHWlegnl6gzl2razFT8Tk8Rb93/dD6DnnAO/O/5PcWdKw8t2a9G9QVJV8Il5k2pQS8GoCKdJAg+HQYzOkyQoLOsDCrvAw8WJje6xFL1b8r/su8dWa44SGR/JJ0+J0q6FOyLz6H047rwScSSB3Rei1FXaOA/9vzK4UmoyGMq843EmarRb9D0bc18AYOEkAk/HAGeAIUNGqXBfgtPGRfYeni7eC6TRzr2nZZMmcGVnfrza9ahdST5MOJ68NKAElECsBcZJWZwC8tR2yFYIlPWHea3BPgvc5Ltmq6GcDjWMRowlQxPj0AqYYZSXckoQerGoEBpf9LLHU80yHxAnZzO3naDh2G0cu3+Or1qWZ39MP3+wSslaTElACSsBFCOQoDt3WQ+NRcH47TPKDfbMgMtIhAtqq6P2B27FI0AqYAzwF9gCZgZxAI2Cjce4dYz+2G0YsTcR+6F5wGG2n7GLE6uNUL5Sdjf1r06lqfpImdcloibF3Ro8qASXg+QTESZrfO9B7N8iLVav7w0/NIfSR3fturzn63MAlK+nkd4jkxZRvVfSfXfklIB+CguL/kCJjmuTkz5aWrjV8aVkuF0nkbTVNSkAJKAFXJ5DFFzovgz9/gUt7IaX9ZyDspeij06pi3ceUHx366YB88PHxkXPjlUSxj2tfIV7naGEloASUgEsQEMO0YmfzxwEC2Tp1E1fTYsHntSqUB7gKxJRvVVR3lYASUAJKwJEE7KXoVwBvGBa8H3APuAasBxoaD2DlIazsS54mJaAElIASSCQCtk7dzAfqAtkNK11Wz1hcPE4F1gDyqpcsrwwGuhryywPcL4F9xvfhcTzUTaRuazNKQAkoAe8hYKui7xAHEplT7xNDGVmDLx9NSkAJKAEl4AQC9pq6cYLo2qQSUAJKQAnYQkAVvS2UtIwSUAJKwI0JqKJ348FT0ZWAElACthBQRW8LJS2jBJSAEnBjAtG90OQK3ZFXYy8kUBBZGXQzgec68jSVK350lZfyih+B+JX2xOsrv7xvGj8M7lt6v4uKrnLFb2CUl/KKH4H4lfaq60unbuJ3cWhpJaAElIDbEVBF73ZDpgIrASWgBOJHwFODph6IH4ZEK61yxQ+18lJe8SMQv9J6fcWPl5ZWAkpACSgBJaAElIASUAJKQAkoASWgBJSAEvBuAhKC8KThIXNQNChSAb8ax/cCvlZlBhv5cr6EN7Rnikuu/sAxI2j6ZkDWulpSJChAEwAABZdJREFUBHDI+IirZ3umuOR6U4J5WbXfw6pxRwZ0j0uu761kOgXctZLLkbzE8d4NINCqPetdeedkvHEdHQEqWh10JK+45OpkXFsi0y6gnJVc54EAg6e9lxPGJZd4uxV35Zbr+zMrueK6BqyKxns3LrkGWMkkYy3XlMS2luRIXhKvYwtwHDgKvG+0ab1x1jVmLYNT9+Wh8VmgIJASOAyUjCJRb0BcJktqbyh92ZdyUl5uBAWMeuz1ENoWuV4E0prF4h0ruSTroZFv740tcominxhNw3LRnzMufokhIPv2Cuhui1zWIr0bxfOpo3hJm7UN5R2Tohc33GutYi6IMSHJkbyk/rjkqm41Pk0Ai1xyrigueTHIESkuuUTRr4qm4fheA9FUEWtWXHJZn9wC+N0qw5G8JIa2xTjIAIgRE1WHOewac5fllVUMS0qUTiiwAJCA5NZJvv9kZCwCXjL+KSVfyj8B/jLqkfrskWyRS+7i4qNfkgROl+hbjk62yBWTDI4M6B5fucQ9tsRCSIzkH0esBLmO5gDiklvGMTMg/7yO5CX9jksuseLvGIAS6/qyRa6Yxiy+10BM9cSUHxcv6/MS8/qSQEwHjcYfGJa9xNS2Tg67xtxF0dsSZNy6TLjxszFbPAOUW0O3Zd+6TSlvCYoe07ndDavQcjw1ID+p5R/0ZUumHba2ytXW+NkvN0ZLKEhbz02ImPGpW6a45BeYtcXlKF629CUm2WPKt6VOe5eJen3JTWkDIMsIe9m7MRvqq2b8mpZfQqWM8q7CS35lyxTSYqt+JBYvmVaWANfWv75EjJjYxJRvJXrsu7YGHom9Fscfjc4njwyKdYqpTEz51ucmdD8+db8OVAbqWDWWz4itK1NSotBkPlWmqJ412SLXSsNall86bxu/hurFM6B7fOW0RS5LnTL9JjcgmUO1JEfxstQf2zYm2WPKj60uRxyTKUJR9DWtKq9hXF85gI3ACeMXglURh+2K9So3a5lukymJZUARB19f8emMTNvsjPIrLjF4pTduLv2A+1EEjulaiik/yukxf3UXi96WIOPWZeQGlskYROt8IWEJXB4zFduP2Fp3fWAI0NKYQrK0IAHUJcmU1FbjLm9kPdPGFrluWckyA6hktGjLuQkVLj51i6KPOm3jKF629Ccm2WPKt6VOe5UpC8w0pjNlXC3JwkseMi8FZNoksZIoMcszFQk1KqFH5XmBK/ASBrFdX47iJQzkF8RcYEk0AxETm5jyo6nCvbNEcYsylJ/yloexlp+Clp5JKEPrh7G/GQeknPXDWKlHHgjZI9kil/xEEytdrBnrJA845QGxJPkHOB3NwxnjcLw3tsgl88uW1NqYPpLv8nBRnmWIfPKRfcuqBEv5hG5tkUvqLmY8SLS2ZBzJy9If+Ukd08PYZlEexv5hnORIXrbIJb9yJFazPJS1TukAeegnSfZlLl+mKuyZYuP1vJX1LjeYi8Z3W6+BZ5EzNrmkXosRKFwsydG85FqWZzxjLQ1Gs3XmNRaNOM7Jkp9/8qRalKZYx5Ik2LhYyZJk/nahcdHLP6FMh1iSlJfzZHmlrEywZ4pLrk3A31ZLuizLKOUfU6Zq5CYkW/nZbc8Ul1wjjWVe0r48MC5u1Xg3g6MoEEugd6vDz7Qbl1xS+TBgVJRWHM1Lfj3IA7Mww+qU8ZApLflIkn/UScZ1JOMl03CW5Ehecckllrw8jLUsY7Qso5TrX8ZWPrKcz/I/Y5H5WbdxydXX6vqSZ1DWN6LoroFnlcdyflxySTlZcSYLNKyTo3nJlJpMN8syWMtYCQdXuMasOei+ElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoAbcn8P+pvFsqSyG6iwAAAABJRU5ErkJggg==" - } - }, + "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ - "![image.png](attachment:image.png)" + "![](https://img-blog.csdnimg.cn/1442273f150044139d54b6c2c6384e37.png)" ] }, {