├── .gitignore ├── README.md ├── chapter-1 - demo.py ├── chapter-1.py ├── chapter-12.py ├── chapter-2.py ├── chapter-3 - demo.py ├── chapter-3.py ├── chapter-4.py ├── chapter-6.py ├── chapter-7.py ├── chapter-8.py ├── matplotlib可视化学习-chapter-1.ipynb ├── matplotlib可视化学习-chapter-12.ipynb ├── matplotlib可视化学习-chapter-2.ipynb ├── matplotlib可视化学习-chapter-3.ipynb ├── matplotlib可视化学习-chapter-4.ipynb ├── matplotlib可视化学习-chapter-6.ipynb ├── matplotlib可视化学习-chapter-7.ipynb ├── matplotlib可视化学习-chapter-8.ipynb └── overview.png /.gitignore: -------------------------------------------------------------------------------- 1 | .ipynb_checkpoints/ 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # python-matplotlib-practices 2 | # 《Python数据可视化之matplotlib实践》配套代码 3 | 4 | 这是我阅读《python数据可视化之matplotlib实践》时做的“笔记”,按照书本的顺序从头敲了一遍,提供了jupyter notebook和.py两个版本,方便查阅。 5 | 6 | ## 目录 7 | 1. chapter-1: matplotlib图表组成元素 8 | 2. chapter 2: 使用统计函数绘制简单图形 9 | 3. chapter 3: 绘制统计图形 10 | 4. chapter 4: 完善统计图形 11 | 5. chapter 6: 划分画布 12 | 6. chapter 7: 共享坐标轴 13 | 8. chapter 8: 坐标轴高阶应用 14 | 12. chapter 12: 查看颜色格式 15 | 16 | 17 | 18 | ![overview.png](overview.png) 19 | 20 | -------------------------------------------------------------------------------- /chapter-1 - demo.py: -------------------------------------------------------------------------------- 1 | import matplotlib.pyplot as plt 2 | import numpy as np 3 | 4 | x = np.linspace(0.5, 3.5, 100) # Returns num evenly spaced samples, calculated over the interval [start, stop]. 5 | y = np.sin(x) 6 | 7 | y1 = np.random.randn(100) # Return a sample (or samples) from the "standard normal" distribution. 8 | 9 | plt.plot(x, y, 10 | ls='-.', # 折线图的线条风格 11 | lw=2, # 折线图的线宽 12 | label='plot figure') 13 | 14 | ''' 15 | matplotlib.iines.Line2D.set_linestyle 16 | 17 | linestyle description 18 | '-'or 'solid' solid line 19 | '--'or'dashed' dashed line 20 | '-.'or'dash_dot' dash-dotted line 21 | ':'or'dotted' dotted line 22 | 'None' draw nothing 23 | ' ' draw nothing 24 | '' draw nothing 25 | ''' 26 | 27 | plt.scatter(x, y1, label='scatter figure', marker="*") 28 | 29 | 30 | ################################################# 31 | # clean up (removing chart junk) 32 | # turn off the top spine and the right spine 33 | # 关闭上面和右边的坐标轴 34 | for spine in plt.gca().spines.keys(): 35 | if spine == 'top' or spine == 'right': 36 | plt.gca().spines[spine].set_color('none') 37 | 38 | 39 | 40 | # 下面这两句可以不写,默认就打开了 41 | # turn on the bottom tick for x-axis 42 | plt.gca().xaxis.set_ticks_position('bottom') 43 | # set tick_line position of the bottom 44 | 45 | # turn on the left ticks for y-axis 46 | plt.gca().yaxis.set_ticks_position('left') 47 | # set tick_line position of the left 48 | 49 | ################################################# 50 | 51 | 52 | 53 | ## xlim 54 | plt.xlim(0, 4) 55 | plt.ylim(-3, 3) 56 | 57 | ## xlabel 58 | plt.xlabel('x-axis') 59 | plt.ylabel('y-axis') 60 | 61 | 62 | ## grid 刻度线 63 | plt.grid(color='r', linestyle=':') 64 | 65 | ## axhline 水平参考线 66 | plt.axhline(y=0.5, 67 | color='r', 68 | xmin=0.5, 69 | xmax=1, 70 | linestyle='--', 71 | linewidth=2) 72 | ''' 73 | xmin : scalar, optional, default: 0 74 | Should be between 0 and 1, 0 being the far left of the plot, 1 the far right of the plot. 75 | xmax : scalar, optional, default: 1 76 | Should be between 0 and 1, 0 being the far left of the plot, 1 the far right of the plot. 77 | ''' 78 | plt.axvline(4, ymin=0.6,ymax=0.8,color='g',linestyle=":",linewidth=2) 79 | 80 | 81 | ## axvspan 竖直参考区域 82 | plt.axvspan(xmin=1, # 起始位置 83 | xmax=3, # 终止位置 84 | ymin=0, 85 | ymax=1, 86 | facecolor='y', # 填充颜色 87 | alpha=0.3) # 填充透明度 88 | 89 | plt.axhspan(ymin=0,ymax=1,xmin=0,xmax=1,facecolor='g',alpha=0.3) 90 | 91 | ## annotate 指向型文本注释 92 | plt.annotate(s='maximum', # 注释文本 93 | xy=(np.pi/2, 1.0), # 被注释图像内容的位置坐标 (箭头指向的地方,即需要标注的坐标点) 94 | xytext=((np.pi/2)+1.0, 0.8), # 注释文本的位置坐标(箭头开始指的地方,即放置注释文本的地方) 95 | color='b', # 注释文本的颜色 96 | arrowprops=dict(arrowstyle='->', connectionstyle='arc3',color='b')) # 箭头的属性字典 97 | 98 | ## text 无指向性文本注释 99 | 100 | plt.title('y=sin(x)') 101 | plt.text(x=np.pi, y=0.0, s='y=sin(x)', weight='bold', color='b') 102 | plt.show() 103 | -------------------------------------------------------------------------------- /chapter-1.py: -------------------------------------------------------------------------------- 1 | # chapter-1: matplotlib图表组成元素 2 | import matplotlib.pyplot as plt 3 | import numpy as np 4 | 5 | x = np.linspace(0.5, 3.5, 100) # Returns num evenly spaced samples, calculated over the interval [start, stop]. 6 | y = np.sin(x) 7 | 8 | y1 = np.random.randn(100) # Return a sample (or samples) from the "standard normal" distribution. 9 | 10 | plt.plot(x, y, 11 | ls='-.', # 折线图的线条风格 12 | lw=2, # 折线图的线宽 13 | label='plot figure') 14 | plt.legend() 15 | plt.show() 16 | 17 | ''' 18 | matplotlib.iines.Line2D.set_linestyle 19 | 20 | linestyle description 21 | '-'or 'solid' solid line 22 | '--'or'dashed' dashed line 23 | '-.'or'dash_dot' dash-dotted line 24 | ':'or'dotted' dotted line 25 | 'None' draw nothing 26 | ' ' draw nothing 27 | '' draw nothing 28 | ''' 29 | plt.plot(x, y, 30 | ls='-.', # 折线图的线条风格 31 | lw=2, # 折线图的线宽 32 | label='plot figure') 33 | plt.scatter(x, y1, label='scatter figure', marker="*") 34 | 35 | ## xlim 36 | plt.xlim(0, 1) 37 | plt.ylim(0, 1) 38 | 39 | ## xlabel 40 | plt.xlabel('x-axis') 41 | plt.show() 42 | 43 | 44 | ## grid 刻度线 45 | plt.plot(x, y, 46 | ls='-.', # 折线图的线条风格 47 | lw=2, # 折线图的线宽 48 | label='plot figure') 49 | 50 | plt.grid(color='r', linestyle=':') 51 | plt.show() 52 | 53 | ## axhline 水平参考线 54 | plt.plot(x, y, 55 | ls='-.', # 折线图的线条风格 56 | lw=2, # 折线图的线宽 57 | label='plot figure') 58 | plt.legend() 59 | 60 | plt.axhline(y=0.5, 61 | color='r', 62 | xmin=0.5, 63 | xmax=1, 64 | linestyle='--', 65 | linewidth=2) 66 | ''' 67 | xmin : scalar, optional, default: 0 68 | Should be between 0 and 1, 0 being the far left of the plot, 1 the far right of the plot. 69 | xmax : scalar, optional, default: 1 70 | Should be between 0 and 1, 0 being the far left of the plot, 1 the far right of the plot. 71 | ''' 72 | plt.axvline(4, ymin=0.6,ymax=0.8,color='g',linestyle=":",linewidth=2) 73 | plt.show() 74 | 75 | 76 | ## axvspan 竖直参考区域 77 | plt.plot(x, y, 78 | ls='-.', # 折线图的线条风格 79 | lw=2, # 折线图的线宽 80 | label='plot figure') 81 | 82 | plt.legend() 83 | plt.axvspan(xmin=4, # 起始位置 84 | xmax=6, # 终止位置 85 | ymin=0, 86 | ymax=0.6, 87 | facecolor='y', # 填充颜色 88 | alpha=0.3) # 填充透明度 89 | 90 | plt.axhspan(ymin=0,ymax=0.6,xmin=4,xmax=6,facecolor='g',alpha=0.3) 91 | plt.show() 92 | 93 | 94 | 95 | 96 | ## annotate 指向型文本注释 97 | plt.plot(x, y, 98 | ls='-.', # 折线图的线条风格 99 | lw=2, # 折线图的线宽 100 | label='plot figure') 101 | plt.legend() 102 | 103 | plt.annotate(s='maximum', # 注释文本 104 | xy=(np.pi/2, 1.0), # 被注释图像内容的位置坐标 (箭头指向的地方,即需要标注的坐标点) 105 | xytext=((np.pi/2)+1.0, 0.8), # 注释文本的位置坐标(箭头开始指的地方,即放置注释文本的地方) 106 | color='b', # 注释文本的颜色 107 | arrowprops=dict(arrowstyle='->', connectionstyle='arc3',color='b')) # 箭头的属性字典 108 | plt.show() 109 | 110 | 111 | ## text 无指向性文本注释 112 | plt.plot(x, y, 113 | ls='-.', # 折线图的线条风格 114 | lw=2, # 折线图的线宽 115 | label='plot figure') 116 | plt.legend() 117 | plt.title('y=sin(x)') 118 | plt.text(x=np.pi, y=0.0, s='y=sin(x)', weight='bold', color='b') 119 | plt.show() 120 | -------------------------------------------------------------------------------- /chapter-12.py: -------------------------------------------------------------------------------- 1 | 2 | # coding: utf-8 3 | 4 | # # 《python数据可视化之matplotlib实践》 5 | # 6 | # ## 查看颜色格式 7 | # 8 | # http://colorbrewer2.org/#type=sequential&scheme=PuBuGn&n=3 9 | 10 | # In[3]: 11 | 12 | 13 | import matplotlib as mpl 14 | import matplotlib.pyplot as plt 15 | import numpy as np 16 | 17 | random_data = np.random.rand(10,10) 18 | plt.pcolor(random_data, cmap='BuPu') # Create a pseudocolor plot of a 2-D array. 19 | plt.colorbar() 20 | plt.show() 21 | 22 | 23 | # In[4]: 24 | 25 | 26 | random_data = np.random.rand(10,10) 27 | plt.pcolor(random_data, cmap=mpl.cm.BuPu) # 指定颜色格式colormap的另一种方法 28 | plt.colorbar() 29 | plt.show() 30 | 31 | 32 | # In[5]: 33 | 34 | 35 | # 绘制图片的像素值colormap 36 | 37 | import scipy.misc 38 | import matplotlib as mpl 39 | import matplotlib.pyplot as plt 40 | 41 | ascent = scipy.misc.ascent() # 调用一张图像示例(numpy array格式) 42 | print(ascent.shape, type(ascent)) 43 | plt.imshow(ascent, cmap=mpl.cm.gray) 44 | 45 | plt.colorbar() 46 | plt.show() 47 | 48 | 49 | # In[6]: 50 | 51 | 52 | plt.imshow(ascent, cmap=mpl.cm.jet) 53 | 54 | plt.colorbar() 55 | plt.show() 56 | 57 | 58 | # In[7]: 59 | 60 | 61 | plt.imshow(ascent, cmap=mpl.cm.hot) 62 | 63 | plt.colorbar() 64 | plt.show() 65 | 66 | 67 | # In[8]: 68 | 69 | 70 | demo = plt.imread("overview.png") 71 | plt.imshow(demo) 72 | plt.colorbar() 73 | plt.show() 74 | 75 | -------------------------------------------------------------------------------- /chapter-2.py: -------------------------------------------------------------------------------- 1 | # chapter 2 2 | # 使用统计函数绘制简单图形 3 | import matplotlib.pyplot as plt 4 | import matplotlib as mpl 5 | import numpy as np 6 | 7 | mpl.rcParams['font.sans-serif'] = ['SimHei'] 8 | mpl.rcParams['axes.unicode_minus'] = False 9 | 10 | # bar 柱状图 11 | x = list(range(1, 10)) 12 | y = [3,1,4,5,6,8,9, 7, 2] 13 | 14 | plt.bar(x,y,align='center',color='c', tick_label=list('sahfdaksj'), hatch='/') 15 | plt.xlabel("箱子编号") 16 | plt.ylabel("箱子重量") 17 | plt.show() 18 | 19 | 20 | ## barh 水平柱状图 21 | plt.barh(x,y,align='center', color='c', tick_label=list('sahfdaksj'), hatch='/') 22 | plt.xlabel("箱子编号") 23 | plt.ylabel("箱子重量") 24 | plt.show() 25 | 26 | ## hist 直方图 27 | box_hight = np.random.randint(low=0, high=10,size=100) 28 | bins = range(0,11) 29 | # plt.hist(box_hight, bins) 30 | plt.hist(x=box_hight, bins=bins, histtype='bar', rwidth=1, alpha=0.6) 31 | plt.show() 32 | 33 | ## pie 饼图 34 | kinds = '简易箱','保鲜箱', '行李箱', '密封箱' 35 | colors = ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3'] 36 | sold_nums = [0.05, 0.45, 0.15, 0.35] 37 | plt.pie(x=sold_nums, 38 | labels=kinds, 39 | autopct="%3.1f%%", 40 | startangle=60, 41 | colors=colors) 42 | plt.show() 43 | 44 | ## polar 在极坐标系上绘制折线图 45 | bar_slices = 12 46 | theta = np.linspace(start=0.02, stop=2*np.pi,num=bar_slices, endpoint=False ) 47 | r = 30 * np.random.rand(bar_slices) 48 | 49 | plt.polar(theta,r,linewidth=2,marker="*", mfc='b',ms=10) 50 | plt.show() 51 | 52 | ## scatter 绘制气泡图 53 | # 二维数据借助气泡大小展示三维数据 54 | x = np.random.randn(100) 55 | y = np.random.randn(100) 56 | 57 | plt.scatter(x, y, s=np.power(10*x + 20*y, 2), cmap=mpl.cm.RdYlBu, marker='o') 58 | plt.show() 59 | 60 | 61 | ## stem 棉签图 62 | # 绘制离散有序数据 63 | x = np.linspace(0.5, 2*np.pi, 20) 64 | y = np.random.randn(20) 65 | 66 | plt.stem(x, y, linefmt='-.', markerfmt='o', basefmt='-', label='stem fig') 67 | plt.show() 68 | 69 | ## boxplot 箱线图 70 | mpl.rcParams['font.sans-serif'] = ['FangSong'] 71 | mpl.rcParams['axes.unicode_minus'] = False 72 | 73 | x = np.random.randn(100) 74 | plt.boxplot(x) 75 | 76 | plt.title('随机数生成器抗干扰能力的稳定性') 77 | plt.xticks([1], ['随机数生成器']) 78 | plt.ylabel('随机数值') 79 | 80 | plt.grid(axis="y", ls=":", lw=1, color='gray', alpha=0.4) 81 | plt.show() 82 | 83 | ## errorbar 绘制误差棒图 84 | # 绘制x或y轴方向的误差范围 85 | x = np.linspace(0.1, 0.6, 6) 86 | y = np.exp(x) 87 | plt.errorbar(x,y, fmt='bo', yerr=0.2,xerr=0.02) 88 | plt.xlim(0, 0.7) 89 | plt.show() -------------------------------------------------------------------------------- /chapter-3 - demo.py: -------------------------------------------------------------------------------- 1 | # chapter 3 2 | import matplotlib.pyplot as plt 3 | import matplotlib as mpl 4 | import numpy as np 5 | mpl.rcParams['font.sans-serif'] = ['FangSong'] 6 | mpl.rcParams['axes.unicode_minus'] = False 7 | 8 | ## 案例3 带误差棒的多数据并列柱状图 9 | # 可以对比两组数据 10 | x = np.arange(5) 11 | y = [100, 82, 39, 92,43] 12 | y_2 = [83,92,100,53, 25] 13 | std_err = [7, 2, 6, 10, 5] 14 | std_err_2 = [6,5 ,10, 2,7 ] 15 | 16 | bar_width = 0.35 17 | err_attribute = dict(elinewidth=2, ecolor='black', capsize=3) 18 | 19 | # 第一组 20 | plt.bar(x, y, color='c', 21 | width=bar_width, 22 | align='center', 23 | yerr=std_err, 24 | error_kw=err_attribute, 25 | # tick_label=list('ABCDE'), # 后面统一制定x轴标签 26 | label='第一组') 27 | # 第二组 28 | plt.bar(x+bar_width, # 并列摆放 29 | y_2, color='m', 30 | width=bar_width, 31 | align='center', 32 | yerr=std_err_2, 33 | error_kw=err_attribute, 34 | # tick_label=list('ABCDE'), 35 | label='第二组') 36 | plt.xticks((x + bar_width//2), list('ABCDE')) 37 | 38 | plt.title("不同芒果园种植区的单词收割量") 39 | plt.xlabel('芒果种植园区') 40 | plt.ylabel('收割量') 41 | 42 | plt.grid(axis='y', linestyle=':', color='gray', alpha=0.4) 43 | plt.show() 44 | 45 | -------------------------------------------------------------------------------- /chapter-3.py: -------------------------------------------------------------------------------- 1 | # chapter 3 2 | # 绘制统计图形 3 | import matplotlib.pyplot as plt 4 | import matplotlib as mpl 5 | import numpy as np 6 | mpl.rcParams['font.sans-serif'] = ['FangSong'] 7 | mpl.rcParams['axes.unicode_minus'] = False 8 | 9 | 10 | # 多数据堆叠 11 | x = [1,2,3,4,5] 12 | y1 = [2,4,1,6,3] 13 | y2 = [6,2,3,5,1] 14 | 15 | plt.bar(x,y1,bottom=0,label='class A') 16 | plt.bar(x,y2,bottom=y1, label='class B') 17 | plt.grid(True, axis='x', ls=':', color='r', alpha=0.3) 18 | plt.legend() 19 | plt.show() 20 | 21 | # 多数据并列 22 | x = np.arange(1,6) ##### 注意,这里不是[1,2,3,4,5],而是一个列表生成式,因为后面要为每个x做平移 23 | y0 = [0,3,4,2,5] 24 | y1 = [2,4,1,6,3] 25 | y2 = [6,2,3,5,1] 26 | 27 | bar_width = 0.35 28 | tick_label = list('ABCDE') 29 | 30 | plt.bar(x, y1, width=bar_width, align='center',label='class A', alpha=0.5) 31 | plt.bar(x + bar_width, y2, width=bar_width, align='center',label='class B', alpha=0.5) 32 | plt.legend() 33 | plt.show() 34 | 35 | 36 | # 堆积折线图 stackplot 37 | # Draws a stacked area plot. 38 | labels = ['Blue', 'Brown', 'Green'] 39 | colors = ['#8da0cb', '#fc8d62', '#66c2a5'] 40 | plt.stackplot(x, y0, y1, y2, labels=labels, colors=colors) 41 | plt.legend() 42 | plt.show() 43 | 44 | 45 | ## 间断条形图 broken_barh 46 | # 间断条形图主要是在条形图的基础上绘制,用来可视化定性数据的相同指标在时间维度上的指标值的变换情况 47 | # 实现定性数据的相同指标的变化情况的直观比较 48 | 49 | mpl.rcParams['font.sans-serif'] = ['LiSu'] # 隶书字体 50 | mpl.rcParams['axes.unicode_minus'] = False 51 | xrange_1 = [(30,100),(180, 50), (260, 70)] # 30,100表示起点为30, 沿着x轴正方向移动100个单位 52 | yrange_1 = (20,8) # 20,8 表示以20为起点,沿着y轴向上移动8个单位 53 | 54 | xrange_2 = [(60,90), (190, 20), (230, 30), (280, 60)] 55 | yrange_2 = (10, 8) 56 | plt.broken_barh(xrange_1, yrange_1, facecolors='#8da0cb') 57 | plt.broken_barh(xrange_2, yrange_2, facecolors='#fc8d62') 58 | plt.xlabel('演出时间') 59 | 60 | plt.xticks(np.arange(0, 361, 60)) 61 | plt.yticks([15, 25], ['歌剧院A','歌剧院B']) 62 | plt.grid(axis='y', color='gray') 63 | plt.legend() 64 | plt.show() 65 | 66 | ## 阶梯图 step 67 | ## 很像折线图,显示时序数据的波动周期规律 68 | x = np.linspace(0, 10,20) 69 | y = np.sin(x) 70 | plt.plot(x,y,label='y=sin(x)') 71 | plt.step(x,y,where='pre',label='y=step(sin(x))-pre') 72 | plt.step(x,y,where='mid',label='y=step(sin(x))-mid') 73 | plt.step(x,y,where='post',label='y=step(sin(x))-post') 74 | '''where: [ 'pre' | 'post' | 'mid' ] 75 | If 'pre' (the default), the interval from x[i] to x[i+1] has level y[i+1]. 76 | 77 | If 'post', that interval has level y[i]. 78 | 79 | If 'mid', the jumps in y occur half-way between the x-values. 80 | ''' 81 | plt.legend() 82 | plt.show() 83 | 84 | 85 | ## 堆叠直方图 86 | ## stack=True 87 | score_1 = np.random.randint(0,100,100) 88 | score_2 = np.random.randint(0,100,100) 89 | 90 | x = [score_1, score_2] 91 | colors = ['#8dd3c7', '#bebada'] 92 | labels = ['class A','class B'] 93 | 94 | bins = range(0, 101, 10) 95 | plt.hist(x, # 输入数据 96 | bins=bins, # bins的个数或者bins的边缘范围 97 | color=colors, 98 | rwidth=10, 99 | stacked=True, ### 堆叠直方图的关键 100 | label=labels) 101 | plt.xlabel("score") 102 | plt.ylabel("class") 103 | plt.show() 104 | 105 | 106 | ## pie 分裂式饼图 107 | kinds = '简易箱','保鲜箱', '行李箱', '密封箱' 108 | colors = ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3'] 109 | sold_nums = [0.05, 0.45, 0.15, 0.35] 110 | explode = (0.1,0.1,0.1,0.1) 111 | plt.pie(x=sold_nums, 112 | labels=kinds, 113 | autopct="%3.1f%%", 114 | startangle=60, 115 | colors=colors, 116 | explode=explode) # 设置偏离半径的百分比 117 | plt.show() 118 | 119 | 120 | ## 案例 绘制内嵌环形饼图 121 | elements = ['面粉','砂糖','奶油','草莓酱','坚果'] 122 | weight_1 = [40, 20, 15, 10, 15] 123 | weight_2 = [30, 25, 15, 20, 10] 124 | 125 | colormap = ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3','#ff7f00'] 126 | outer_colors = colormap 127 | inner_colors = colormap 128 | 129 | wedges_1, texts_1, autotexts_1 = plt.pie(weight_1, 130 | autopct="%3.1f%%", 131 | radius=0.7, 132 | pctdistance=0.6, 133 | colors=inner_colors, 134 | textprops=dict(color='c'), 135 | wedgeprops=dict(width=0.3,edgecolor='w')) 136 | wedges_2, texts_2, autotexts_2 = plt.pie(weight_2, 137 | autopct="%3.1f%%", 138 | radius=1, 139 | pctdistance=0.8, 140 | colors=inner_colors, 141 | textprops=dict(color='c'), 142 | wedgeprops=dict(width=0.3,edgecolor='w')) 143 | plt.legend(wedges_1,elements, fontsize=12,label='配料表',loc='center left', bbox_to_anchor=(0.91,0,0.3,1)) 144 | 145 | plt.setp(autotexts_1,size=15,weight='bold') 146 | plt.setp(autotexts_2,size=15,weight='bold') 147 | plt.setp(texts_1, size=12) 148 | plt.title("两种配料表") 149 | plt.show() 150 | 151 | 152 | ## 箱线图 153 | ## 用于多组定量数据的分布比较 154 | ## 箱线图由一个箱体和箱须组成,第一四分位数,中位数、第二、三四分位数组成箱体 155 | ## 箱顶之外的竖直可以理解为离群点 156 | test_1 = np.random.randn(5000) 157 | test_2 = np.random.randn(5000) 158 | test_list = [test_1, test_2] 159 | labels = ["随机数生成器-1","随机数生成器-2"] 160 | colors = ['#793217', "#218731"] 161 | 162 | whis = 1.6 163 | width = 0.35 164 | 165 | bplot = plt.boxplot(test_list,whis=whis,widths=width, labels=labels, patch_artist=True, sym='o') 166 | 167 | for patch, color in zip(bplot['boxes'], colors): 168 | patch.set_facecolor(color) 169 | 170 | plt.ylabel("随机数值") 171 | plt.title("随机数生成器抗干扰能力的稳定性比较") 172 | 173 | plt.grid(axis='y', ls=':',lw=1, color='gray',alpha=0.4) 174 | plt.show() 175 | 176 | 177 | ## 误差棒图 178 | 179 | # 应用场景:通过抽检获得样本,对总体参数估计会由于样本的随机性导致估计值出现波动, 180 | # 因此需要用误差置信区间来表示对总体参数估计的可靠范围。 181 | 182 | # 误差棒图就可以很好地描述总体参数估计的置信区间。 183 | # 误差棒的计算方法可有很多种:单一数值、置信区间、标准差、标准误差等。 184 | # 可视化展示方式也有很多种:水平误差棒、垂直误差棒、对称误差棒、非对称误差棒等。 185 | x = np.linspace(0.1, 0.6, 10) 186 | y = np.exp(x) 187 | 188 | error = 0.05 + 0.15*x 189 | 190 | lower_error = error 191 | upper_error = error * 0.3 192 | 193 | error_limit = [lower_error, upper_error] 194 | 195 | plt.errorbar(x,y, # xy数据点的位置 196 | yerr=error_limit, # 单一数值的非对称形式误差范围 197 | fmt='o', # 数据点的标记样式和连接线样式 198 | ecolor='y', # 误差棒的线条颜色 199 | elinewidth=4, # 误差棒的线宽 200 | ms=5, # 数据点的大小 201 | mfc='c', # 数据点的颜色 202 | mec='r', # 数据点的边缘颜色 203 | capsize=2,capthick=1 # 误差棒边界横杠大小 204 | ) 205 | plt.xlim(0,0.7) 206 | plt.show() 207 | 208 | 209 | ## 案例一 带误差棒的柱状图 210 | # 使统计图形同时可以反映数据测量误差 211 | 212 | x = np.arange(5) 213 | y = [100, 82, 39, 92,43] 214 | std_err = [7, 2, 6, 10, 5] 215 | 216 | err_attribute = dict(elinewidth=2, ecolor='black', capsize=3) 217 | plt.bar(x, y, color='c', 218 | width=0.6, 219 | align='center', 220 | yerr=std_err, 221 | error_kw=err_attribute, 222 | tick_label=list('ABCDE')) 223 | 224 | 225 | 226 | ''' 227 | xerr : scalar or array-like, optional 228 | if not None, will be used to generate errorbar(s) on the bar chart default: None 229 | yerr : scalar or array-like, optional 230 | if not None, will be used to generate errorbar(s) on the bar chart default: None 231 | ''' 232 | 233 | plt.title("不同芒果园种植区的单词收割量") 234 | plt.xlabel('芒果种植园区') 235 | plt.ylabel('收割量') 236 | 237 | plt.grid(axis='y', linestyle=':', color='gray', alpha=0.4) 238 | plt.show() 239 | 240 | 241 | ## 案例3 带误差棒的多数据并列柱状图 242 | # 可以对比两组数据 243 | 244 | 245 | 246 | x = np.arange(5) 247 | y = [100, 82, 39, 92,43] 248 | y_2 = [83,92,100,53, 25] 249 | std_err = [7, 2, 6, 10, 5] 250 | std_err_2 = [6,5 ,10, 2,7 ] 251 | 252 | bar_width = 0.35 253 | err_attribute = dict(elinewidth=2, ecolor='black', capsize=3) 254 | 255 | # 第一组 256 | plt.bar(x, y, color='c', 257 | width=bar_width, 258 | align='center', 259 | yerr=std_err, 260 | error_kw=err_attribute, 261 | # tick_label=list('ABCDE'), # 后面统一制定x轴标签 262 | label='第一组') 263 | # 第二组 264 | plt.bar(x+bar_width, # 并列摆放 265 | y_2, color='m', 266 | width=bar_width, 267 | align='center', 268 | yerr=std_err_2, 269 | error_kw=err_attribute, 270 | # tick_label=list('ABCDE'), 271 | label='第二组') 272 | plt.xticks((x + bar_width//2), list('ABCDE')) 273 | 274 | plt.title("不同芒果园种植区的单词收割量") 275 | plt.xlabel('芒果种植园区') 276 | plt.ylabel('收割量') 277 | 278 | plt.grid(axis='y', linestyle=':', color='gray', alpha=0.4) 279 | plt.show() 280 | 281 | -------------------------------------------------------------------------------- /chapter-4.py: -------------------------------------------------------------------------------- 1 | # chapter 4 2 | # 完善统计图形 3 | 4 | import matplotlib.pyplot as plt 5 | import matplotlib as mpl 6 | import numpy as np 7 | mpl.rcParams['font.sans-serif'] = ['FangSong'] 8 | mpl.rcParams['axes.unicode_minus'] = False 9 | 10 | 11 | # 图例和标题 12 | x = np.linspace(-2*np.pi, 2*np.pi, 200) 13 | y_1 = np.sin(x) 14 | y_2 = np.cos(x) 15 | 16 | ''' 17 | matplotlib 支持Tex公式输入,格式为:`r$formula$` 18 | r表示该字符串为raw strings,字符串按照Tex规范解析。 19 | 20 | 对于两个美元符号之间的非数学公式字符串会按照泄题的形式输出,呈现印刷级别的文档效果 21 | ''' 22 | plt.plot(x,y_1, label=r'$\sin(x)$') 23 | plt.plot(x,y_2,label=r'$\cos(x)$') 24 | plt.legend(loc='lower left') 25 | plt.title('正弦余弦曲线图') 26 | plt.show() 27 | 28 | ## 图例样式的调整 29 | 30 | x = np.linspace(-1,10,100) 31 | y_1 = np.power(x, 1) 32 | y_2 = np.power(x, 2) 33 | y_3 = np.power(x, 3) 34 | 35 | plt.plot(x, y_1, ls='-', lw=2, color='r',label=r"$x^{1}$") 36 | plt.plot(x, y_2, ls='--', lw=2, color='g',label=r"$x^{2}$") 37 | plt.plot(x, y_3, ls='-.', lw=2, color='b',label=r"$x^{3}$") 38 | 39 | plt.legend(loc='upper left', 40 | bbox_to_anchor=(0.05,0.95), # 将图例的左上角放在整幅图的(0.05, 0.95处 41 | ncol=3, #图例分成3列 42 | title='power function', # 图例的标题 43 | shadow=True, 44 | fancybox=True) # 控制图例圆角或方角 45 | plt.show() 46 | 47 | 48 | ## 标题的样式 49 | plt.plot(x, y_2, ls='--', lw=2, color='g',label=r"$x^{2}$") 50 | plt.legend(title='legend title') 51 | plt.title('center demo') 52 | plt.title('left demo', loc='left', fontdict={'fontsize':6, 'color':'r','family':'Comic Sans MS','style':'oblique'}) 53 | plt.title('right demo',loc='right', fontdict={'size':'xx-large', 'color':'b','family':'Times New Roman'}) 54 | plt.show() 55 | 56 | 57 | 58 | 59 | ## 案例3 带图例的饼图 60 | ## pie 分裂式饼图 61 | elements = ['简易箱','保鲜箱', '行李箱', '密封箱'] 62 | colors = ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3'] 63 | sold_nums = [0.05, 0.45, 0.15, 0.35] 64 | explode = (0.1,0.1,0.1,0.1) 65 | wedges, texts, autotexts = plt.pie(x=sold_nums, 66 | labels=elements, 67 | autopct="%3.1f%%", # 饼图内部显示的数字格式 68 | startangle=60, # 偏离角度 69 | colors=colors, 70 | explode=explode) # 设置偏离半径的百分比 71 | 72 | plt.legend(wedges, elements, fontsize=12, title='占比', loc='center left', bbox_to_anchor=(0.9,0,0,0)) 73 | plt.setp(autotexts,size=15,weight='bold') 74 | plt.setp(texts, size=12) 75 | # Set a property on an artist object. 76 | plt.show() 77 | 78 | 79 | ## 设置刻度范围和刻度标签 80 | 81 | x = np.linspace(-2*np.pi, 2*np.pi, 200) 82 | y_1 = np.sin(x) 83 | y_2 = np.cos(x) 84 | 85 | plt.subplot(211) # 2行1列,指定第一个子图 86 | plt.title('正弦余弦曲线图') 87 | plt.plot(x,y_1, label=r'$\sin(x)$') 88 | plt.plot(x,y_2,label=r'$\cos(x)$') 89 | 90 | plt.subplot(212) # 2行1列,指定第二个子图 91 | # 1. 刻度以圆周率形式展示 92 | # 2. 设置合理的范围 93 | plt.xlim(-2*np.pi, 2*np.pi) 94 | plt.xticks([-2*np.pi, -1.5 *np.pi, -np.pi, -0.5*np.pi, 0, 0.5*np.pi, np.pi, 1.5*np.pi, 2*np.pi], 95 | [r'$-2\pi$',r'$-3\pi/2$',r'$-\pi$',r'$\pi/2$',r'$0$',r'$\pi/2$',r'$3\pi/2$',r'$2\pi$']) 96 | 97 | plt.plot(x,y_1, label=r'$\sin(x)$') 98 | plt.plot(x,y_2,label=r'$\cos(x)$') 99 | 100 | plt.legend(loc='lower left') 101 | plt.show() 102 | 103 | 104 | ## 设置逆序坐标轴刻度 105 | x = np.arange(1,11,0.5) 106 | y = np.power(x, 2) + 0.7 107 | plt.plot(x,y) 108 | plt.xlim(10 ,1) 109 | plt.show() 110 | 111 | 112 | 113 | ## 饼图下面添加表格 114 | # 饼图 115 | elements = ['简易箱','保鲜箱', '行李箱', '密封箱'] 116 | colors = ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3'] 117 | sold_nums = [0.05, 0.45, 0.15, 0.35] 118 | explode = (0.1,0.1,0.1,0.1) 119 | wedges, texts, autotexts = plt.pie(x=sold_nums, 120 | labels=elements, 121 | autopct="%3.1f%%", # 饼图内部显示的数字格式 122 | startangle=60, # 偏离角度 123 | colors=colors, 124 | explode=explode) # 设置偏离半径的百分比 125 | 126 | plt.legend(wedges, elements, fontsize=12, title='占比', loc='center left', bbox_to_anchor=(0.9,0,0,0)) 127 | plt.setp(autotexts,size=15,weight='bold') 128 | plt.setp(texts, size=12) 129 | # Set a property on an artist object. 130 | 131 | # 添加表格 132 | col_labels = elements 133 | row_labels = ['销量'] 134 | values = np.array(sold_nums) * 100 # 即 135 | plt.table(cellText=values, 136 | cellColours=colors, 137 | colWidths=[0.1]*4, # 每列的宽度 138 | colLabels=col_labels, # 每列的标签 139 | rowLabels=row_labels, # 每行的标签 140 | loc='bottom', # 表格整体的位置 141 | rowLoc='center', # 每行元素的样式 142 | cellLoc='center') 143 | plt.show() 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | plt.show() -------------------------------------------------------------------------------- /chapter-6.py: -------------------------------------------------------------------------------- 1 | # chapter 6 2 | # 划分画布 3 | 4 | import matplotlib.pyplot as plt 5 | import matplotlib as mpl 6 | import numpy as np 7 | mpl.rcParams['font.sans-serif'] = ['FangSong'] 8 | mpl.rcParams['axes.unicode_minus'] = False 9 | 10 | 11 | # subplot2grid(shape, loc, colspan, rowspan) 12 | # 实现非等分画布 13 | 14 | plt.subplot2grid((4,4),(0,0), colspan=3) # 整个画布分均为4行4列,从(0,0)开始,占3列 15 | x = np.linspace(0,4,10) 16 | y = np.random.randn(10) 17 | plt.scatter(x,y,c='b') 18 | plt.title('scatter') 19 | 20 | 21 | plt.subplot2grid((4,4), (0,3)) # 整个画布分均为4行4列,从(0,3)开始,默认占1行1列 22 | plt.title('empty fig') 23 | 24 | 25 | plt.subplot2grid((4,4),(1,0), rowspan=3,colspan=2) # 整个画布分均为4行4列,从(1,0)开始,占3行2列 26 | plt.plot(range(10), range(10),color='g') 27 | plt.grid(color='gray',alpha=0.4, linestyle=':') 28 | plt.title('line') 29 | 30 | 31 | plt.subplot2grid((4,4), (2,2), colspan=2) 32 | plt.plot(x, np.sin(x), marker='*',c='r') 33 | plt.title('sin(x)-1') 34 | 35 | 36 | plt.subplot2grid((4,4), (3,2)) 37 | plt.plot(x, np.sin(x), marker='*',c='m') 38 | plt.title('sin(x)-2') 39 | 40 | 41 | plt.subplot2grid((4,4), (3,3)) 42 | plt.plot(x, np.cos(x), marker='*',c='k') 43 | plt.title('cos(x)') 44 | plt.show() -------------------------------------------------------------------------------- /chapter-7.py: -------------------------------------------------------------------------------- 1 | # chapter 7 2 | # 共享坐标轴 3 | 4 | import matplotlib.pyplot as plt 5 | import matplotlib as mpl 6 | import numpy as np 7 | mpl.rcParams['font.sans-serif'] = ['FangSong'] 8 | mpl.rcParams['axes.unicode_minus'] = False 9 | 10 | 11 | 12 | t = np.arange(0.05, 10.0, 0.01) 13 | s1 = np.exp(t) 14 | s2 = np.cos(t) 15 | 16 | 17 | fig, ax = plt.subplots() # 默认一行一列 18 | ax.plot(t, s1, c='b',ls='--',label='$\exp(x)$') 19 | ax.set_xlabel('x-axis') # 设置x坐标轴 20 | ax.set_ylabel('以e为底数的指数函数', color='b') # 设置y坐标轴 21 | ax.tick_params('y', colors='b') # y坐标轴的刻度 22 | 23 | 24 | ## 关键,共享x坐标轴 25 | ax2 = ax.twinx() 26 | 27 | ax2.plot(t, s2, c='g', ls=":",label='$\cos(x)$') 28 | 29 | ax2.set_ylabel('余弦函数',color='r') # 设置y坐标轴 30 | ax2.tick_params('y', colors='r') 31 | 32 | plt.legend() 33 | plt.title('共享x轴') 34 | plt.show() 35 | 36 | 37 | 38 | 39 | ### 共享不同子图的坐标轴 40 | # 调整subplots中的sharex或sharey参数 41 | 42 | # sharex与sharey的取值共有4中,row\col\all\none,其中all和none分别等同与true和false 43 | 44 | 45 | x1 = np.linspace(0,2*np.pi,100) 46 | y1 = np.sin(x1) 47 | 48 | x2 = np.linspace(0,4,100) 49 | y2 = np.random.randn(100) 50 | 51 | x3 = np.linspace(0,2*np.pi,100) 52 | y3 = np.cos(x3**2) 53 | 54 | x4 = np.linspace(0,4,10) 55 | y4 = np.power(x4,2) 56 | 57 | fig, ax = plt.subplots(2,2,sharex=False,sharey=False) 58 | 59 | ax[0,0].plot(x1,y1) 60 | ax[0,1].scatter(x2,y2) 61 | ax[1,0].plot(x3,y3) 62 | ax[1,1].scatter(x4,y4) 63 | 64 | plt.show() 65 | 66 | 67 | 68 | ## 去掉子图之间的间隙 69 | # fig.subplots_adjust(hspace=0, # 去掉水平间隙 70 | # vspace=0) # 去掉竖直间隙 71 | 72 | 73 | # 情况三 共享个别子区域的坐标轴 74 | 75 | 76 | ### 共享不同子图的坐标轴 77 | # 调整subplots中的sharex或sharey参数 78 | 79 | # sharex与sharey的取值共有4中,row\col\all\none,其中all和none分别等同与true和false 80 | 81 | 82 | x1 = np.linspace(-10,2*np.pi,100) 83 | y1 = np.sin(x1) 84 | 85 | x2 = np.linspace(0,4,100) 86 | y2 = np.random.randn(100) 87 | 88 | x3 = np.linspace(0,2*np.pi,100) 89 | y3 = np.cos(x3**2) 90 | 91 | x4 = np.linspace(0,4,10) 92 | y4 = np.power(x4,2) 93 | 94 | # fig, ax = plt.subplots(2,2) 95 | ax1 = plt.subplot(221) 96 | ax2 = plt.subplot(222) 97 | ax3 = plt.subplot(223,sharey=ax2) # 2与3共享y轴 98 | ax4 = plt.subplot(224,sharex=ax1) # 1与4 共享x轴 99 | 100 | 101 | ax1.plot(x1,y1) 102 | ax2.scatter(x2,y2) 103 | ax3.plot(x3,y3) 104 | ax4.scatter(x4,y4) 105 | 106 | 107 | plt.show() 108 | 109 | -------------------------------------------------------------------------------- /chapter-8.py: -------------------------------------------------------------------------------- 1 | # chapter 8 2 | # 坐标轴高阶应用 3 | 4 | import matplotlib.pyplot as plt 5 | import matplotlib as mpl 6 | import numpy as np 7 | mpl.rcParams['font.sans-serif'] = ['FangSong'] 8 | mpl.rcParams['axes.unicode_minus'] = False 9 | 10 | 11 | # 移动坐标轴 12 | 13 | ## 设置刻度范围和刻度标签 14 | x = np.linspace(-2*np.pi, 2*np.pi, 200) 15 | y_1 = np.sin(x) 16 | y_2 = np.cos(x) 17 | 18 | plt.subplot(211) # 2行1列,指定第二个子图 19 | # 1. 刻度以圆周率形式展示 20 | # 2. 设置合理的范围 21 | plt.xlim(-2*np.pi, 2*np.pi) 22 | plt.xticks([-2*np.pi, -1.5 *np.pi, -np.pi, -0.5*np.pi, 0, 0.5*np.pi, np.pi, 1.5*np.pi, 2*np.pi], 23 | [r'$-2\pi$',r'$-3\pi/2$',r'$-\pi$',r'$\pi/2$',r'$0$',r'$\pi/2$',r'$3\pi/2$',r'$2\pi$']) 24 | 25 | plt.plot(x,y_1, label=r'$\sin(x)$') 26 | plt.plot(x,y_2,label=r'$\cos(x)$') 27 | plt.grid(axis='x',color='gray',ls=":") 28 | plt.legend(loc='lower left', bbox_to_anchor=(1,0.5,0.9,0.9)) 29 | 30 | 31 | ax = plt.subplot(212) 32 | # 1. 取消两个轴 33 | ax.spines['right'].set_color('none') 34 | ax.spines['top'].set_color('none') 35 | # 2. 移动两个轴 36 | ax.spines['left'].set_position(('data', 0)) 37 | ax.spines['bottom'].set_position(('data', 0)) 38 | 39 | plt.xlim(-2*np.pi, 2*np.pi) # 这里通过ax设置 40 | plt.xticks([-2*np.pi, -1.5 *np.pi, -np.pi, -0.5*np.pi, 0, 0.5*np.pi, np.pi, 1.5*np.pi, 2*np.pi], # 这里通过plt设置 41 | [r'$-2\pi$',r'$-3\pi/2$',r'$-\pi$',r'$\pi/2$',r'$0$',r'$\pi/2$',r'$3\pi/2$',r'$2\pi$']) 42 | 43 | plt.plot(x,y_1, label=r'$\sin(x)$') 44 | plt.plot(x,y_2,label=r'$\cos(x)$') 45 | plt.grid(axis='x',color='gray',ls=":") 46 | plt.show() 47 | -------------------------------------------------------------------------------- /matplotlib可视化学习-chapter-8.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 《python数据可视化之matplotlib实践》\n", 8 | "## matplotlib可视化学习-chapter-8\n", 9 | "## 坐标轴高阶应用\n" 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": 1, 15 | "metadata": {}, 16 | "outputs": [], 17 | "source": [ 18 | "import matplotlib.pyplot as plt\n", 19 | "import matplotlib as mpl\n", 20 | "import numpy as np\n", 21 | "%matplotlib inline\n", 22 | "\n", 23 | "mpl.rcParams['font.sans-serif'] = ['FangSong'] # 显示中文\n", 24 | "mpl.rcParams['axes.unicode_minus'] = False # 不使用unicode_minus模式处理坐标轴轴线为负数的情况,\n" 25 | ] 26 | }, 27 | { 28 | "cell_type": "markdown", 29 | "metadata": {}, 30 | "source": [ 31 | "## 两种方法控制坐标轴刻度的显示\n", 32 | "\n", 33 | "- ax.set_xticks() or ax.set_yticks()\n", 34 | "- plt.setp()" 35 | ] 36 | }, 37 | { 38 | "cell_type": "code", 39 | "execution_count": 3, 40 | "metadata": {}, 41 | "outputs": [ 42 | { 43 | "data": { 44 | "image/png": "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\n", 45 | "text/plain": [ 46 | "
" 47 | ] 48 | }, 49 | "metadata": {}, 50 | "output_type": "display_data" 51 | } 52 | ], 53 | "source": [ 54 | "\n", 55 | "\n", 56 | "\n", 57 | "ax1 = plt.subplot(121)\n", 58 | "ax1.set_xticks(range(0, 251, 50)) # 设置x轴坐标从0到250, 每隔50刻度一次\n", 59 | "plt.grid(axis='x') # 注意,网格线是根据tick刻度来画的,有几个刻度画几条线\n", 60 | "\n", 61 | "ax2 = plt.subplot(122)\n", 62 | "ax2.set_xticks([]) # 设置x轴坐标为空\n", 63 | "ax2.set_yticks(range(-10,10, 5)) # 设置y轴坐标,从-10到10, 每隔5刻度一次\n", 64 | "plt.grid(axis='x')# 注意,网格线是根据tick刻度来画的,有几个刻度画几条线,该子图没有x刻度,则不会划线\n", 65 | "\n", 66 | "plt.show()" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": 5, 72 | "metadata": {}, 73 | "outputs": [ 74 | { 75 | "name": "stderr", 76 | "output_type": "stream", 77 | "text": [ 78 | "No handles with labels found to put in legend.\n" 79 | ] 80 | }, 81 | { 82 | "data": { 83 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXYAAAD8CAYAAABjAo9vAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAADfVJREFUeJzt3V+MXOdZx/Hv08SOFyfdsLbZeOW6G8kiJoJSOYtFDSqOVBwbUQWSC4NQKvNHC72zLPFHigDXAoREQbIEQrgRKpIhjSz1jyIhJzcsUEs0XQtq8Set3CS0W7v2em0SJdjUlIcLH8NkPN45Mzmes333+5Esv3POs/M+F0c/nX3nzLuRmUiSyvGuthuQJDXLYJekwhjsklQYg12SCmOwS1JhDHZJKszddYoiYn9mPrfM+cPAFWApM4831JvUuoiYBp4BLlWHZjPzjdYakmroe8ceER8GDixzfgdwNTOPArsjYm1z7UkrwuHM/Jnqn6GuFa9vsGfm88CFZUr2Aaeq8VlgZwN9SZKGVGsppo8pYLEaXwY29yqKiFlgFmBsbOyRhx9+uIGpB/fWW2+xfv165y147tOnT1/KzE0NvuWeiNgJbMjMp7tPdl7b69evf2T79u0NTi39v7rXdhPB3imAnnsUZOYx4BjAQw89lPPz8w1PXc/c3By7d+923oLnjoh/b/DtLgLPZObXIuJjETGdma91FnRe2zMzM61d2ypf3Wu7iadizgEbq/EEcL6B95RWirXAzXX1BWCyxV6kWgYK9oi4KyK+p+vwSWBXNd4GvNREY9IKcQD4YDWeAl5trxWpnjpPxTwOPBoRe4AZ4OOd5zPzNDAWEQeBucy8fkc6ldrxLDAZEU8CFzLzYtsNSf30XWPPzM8Bn+s49IUeNUeabEpaKTLzAvCJtvtQea5fv87CwgLXrl275dy6devYsmULa9asGeq9m/7wVJJUw8LCAvfddx/T09NExP8dz0yWlpZYWFjgwQcfHOq93VJAklpw7do1NmzY8LZQB4gINmzY0PNOvi6DXZJa0h3q/Y7XZbBLUmEMdkkqjMEuSS3J7PlF/dser8tgl6QWrFu3jqWlpVtC/OZTMevWrRv6vX3cUZJasGXLFhYWFlhcXLzl3M3n2IdlsEtSC9asWTP0c+r9uBQjSYUx2CWpMAa7JBXGYJekwhjsklQYg12SCmOwS1JhDHZJKozBLkmFMdglqTAGuyQVxmCXpMIY7JJUGINdkgpjsEtSYQx2SSqMwS5JhTHYJakwBrskFcZgl6TCGOySVBiDXZIKY7BLUmEMdkkqjMEuSYUx2CWpMHfXKYqIw8AVYCkzj/c4vxX4ceAyMJaZf9Vkk5Kk+vresUfEDuBqZh4FdkfE2h5lTwF/npmfASYj4t0N9ylJqqnOUsw+4FQ1Pgvs7FFzF/CBavxdwLfeeWuSpGHUWYqZAhar8WVgc4+ajwMvRMS/AZ/NzGvdBRExC8wCTE5ODtetJKmvQT88DSB7HN8F/C7wJarw7paZxzJzJjNnxsfHB5xWklRXnWA/B2ysxhPA+R41j2Xmycz8E+CrEfH9TTUoSRpMnWA/yY07coBtwJmImOiq+Y+O8QJwy1KMJGk0+gZ7Zp4GxiLiIDAH7AUOdZU9GxFPRcQTwJuZebbxTiVJtdR6jj0zj3QdOtF1/hXglaaakiQNz2+eSlJhDHZJKozBLkmFMdglqTAGuyQVxmCXpMIY7JJUGINdkgpjsEtSYQx2SSqMwS5JhTHYJakwBrskFcZgl6TCGOySVBiDXZIKY7BLUmEMdkkqjMEuSYUx2CWpMLX+mLW0mkXEYeAKsJSZx1tuR+rLO3ZpGRGxA7iamUeB3RGxtu2epH4Mdml5+4BT1fgssLPFXqRaDHZpeVPAYjW+DGzuLoiI2YiYj4j5xcXF7tPSyBnsUn0BZPfBzDyWmTOZObNp06YW2pLezmCXlncO2FiNJ4DzLfYi1WKwS8s7CeyqxtuAl1rsRarFYJeWkZmngbGIOAjMZeb1tnuS+vE5dqmPzDzSdg/SILxjl6TCGOySVBiDXZIKY7BLUmEMdkkqTK2nYursbhcRvwi8CTySmb/WWIeSpIH0vWOvs7tdROwCzmfmc8C/Nt+mJKmuOksxdXa3exL4IkBmfrKRziRJQ6mzFNN3dztgGvjJiJgA7s/M3+wuiIhZYBZgcnJyqGYlSf0N+uFpz93tgPuAlzLzD4GMiK3dBZ074I2Pjw/RqiSpjjrBXmd3u0vA16vx1+l9Vy9JGoE6wd69u92Zasml098BM9V4I/BKM+1JkgbVN9i7d7cD9gKHusr+Ang0Ip4AXslM/4yMJLWk1nPsPXa3O9F1/ipwywemkqTR85unklQYg12SCmOwS1JhDHZJKozBLkmFMdglqTAGuyQVxmCXpMIY7JJUGINdkgpjsEtSYQx2SSqMwS5JhTHYJakwBrskFcZgl6TCGOySVBiDXZIKY7BLUmEMdkkqjMEuSYUx2CWpMAa7JBXGYJekwhjsklQYg12SCmOwS1JhDHZJKozBLkmFMdglqTAGuyQVxmCXpMIY7JJUGINdkgpjsEtSYe6uUxQRh4ErwFJmHl+mbi/wQGZ+spHuJEkD63vHHhE7gKuZeRTYHRFrb1MXwE813J8kaUB1lmL2Aaeq8Vlg523q9gAvNtGUJGl4dYJ9ClisxpeBzd0FEXEXcG91vqeImI2I+YiYf/3114fpVZJUw6AfngaQPY7vA04u94OZeSwzZzJzZnx8fMBpJUl11Qn2c8DGajwBnO9Rcy/wQ8D7ge0RsaWZ9iRJg6oT7CeBXdV4G3AmIiY6CzLzU5k5B/wT8HJmLjTapSSptr7BnpmngbGIOAjMAXuBQ911VdjvBR6NiE0N9ylJqqnWc+yZeaTr0IkeNZeB32iiKUnS8PzmqSQVxmCXpMIY7JJUGINdkgpjsEtSYWo9FSOtRhExDTwDXKoOzWbmG601JNVksEvLO5yZn2+7CWkQLsVIUmG8Y5eWtycidgIbMvPpXgURMQvMAmzdunWUvUk9GexSJSIeA97TcegrwDOZ+bWI+FhETGfma90/l5nHgGMAMzMzvXY/lUbKYJcqmflC5+uIuL/j5QIwCbw2yp6kYbjGLt3eAeCD1XgKeLW9VqT6DHbp9p4FJiPiSeBCZl5suyGpDpdipNvIzAvAJ9ruQxqUd+ySVBiDXZIKY7BLUmEMdkkqjMEuSYUx2CWpMAa7JBXGYJekwhjsklQYg12SCmOwS1JhDHZJKozBLkmFMdglqTAGuyQVxmCXpMIY7JJUGINdkgpjsEtSYQx2SSpMrT9mHRGHgSvAUmYe73H+XmA/8AYwlZlHm2xSklRf3zv2iNgBXK3CendErO1R9hTwj5l5ApiOiHc33KckqaY6SzH7gFPV+Cyws0fNy8A91TiBb73z1iRJw6izFDMFLFbjy8Dm7oLM/BuAiLinen2tuyYiZoFZgMnJySHblST1M+iHp8GNO/LbOQD8Tq8TmXksM2cyc2Z8fHzAaSVJddUJ9nPAxmo8AZzvVRQRe4G/zczLDfUmSRpCnWA/CeyqxtuAMxEx0VkQEVuAd2XmyxHxYERsa7hPSVJNfYM9M08DYxFxEJgD9gKHuso+CnwkIj4FPM+Nu3xJUgtqPceemUe6Dp3oOv90Yx1Jkt4Rv3kqSYUx2CWpMAa7JBXGYJekwhjsklQYg12SCmOwS1JhDHZJKozBLkmFMdglqTAGuyQVxmCXpMIY7JJUGINdkgpjsEtSYQx2SSqMwS5JhTHYJakwBrskFcZgl6TCGOySVBiDXZIKY7BLUmEMdkkqjMEuSYUx2CWpMAa7JBXGYJekwhjsklQYg12SCmOwS1JhDHZJKozBLkmFMdglqTAGuyQV5u46RRFxGLgCLGXm8R7n7wJ+H7gInMnMF5psUhqViNifmc91vD7MMte+tBL1vWOPiB3A1cw8CuyOiLU9yh4H5jPzD4Cfa7hHaSQi4sPAgY7Xda59acWpsxSzDzhVjc8CO/vU/GdEbGmgN2mkMvN54ELHoTrXvrTi1FmKmQIWq/FlYHPNmoXOgoiYBWarl/8VEf88cLfN2Ahcct6i536oofepc+13X9tvRsSXG5pf6vbeOkW11tg7BJDD1GTmMeAYQETMZ+bMgHM3oq25V9u8bc4dEfM1ah4D3tNx6OXM/PxyP8Jtrv3Oa1taCeoE+zlu3Hl9GZgAet1p36z5RlVzvqkGpTuh5gf8da59acWps8Z+EthVjbcBZyJiYpmascz8RkP9SW3qvvZfarEXqba+wZ6Zp4GxiDgIzAF7gUNdZZ8FZiLi14G/rDFvm7+2tjX3apu3zbmHmjciHgcejYg9cOu1n5nXG+xRumMis9+SuSTpO4nfPJWkwhjsalRE3BMR97fdh7SaGex3WESsiYg9EfFHbfcyIr8CvL/tJqTVzGC/wzLzema+CLzRdi8j8qW2G5BWO4Ndkgoz0mCPiOmI+IeImIqIP46IB0Y5/2oSEe+NiF+OiA9FxEdHPP2OiNgfEb9X7fw5MhHxSxHxRET86ijnlVaSkQZ7Zr4G/DY3noP/08z85ijnX2XWA38NfBHYPuK5L1Zb3/4L8KOjmjQi3gd8OzM/DXwzIn54VHNLK0kbSzEvcmOXvK+0MPdq8jo3tlB+H3BtxHPf3ADuIrfZOOsO+T5gIiJ2A/8N/M8I55ZWjDaC/SeA3wJ+oYW5V5NDwJ9l5t8DVyNi0A3f3ok11f8PAK+OcN6vApczcw74NDe22pVWnVGvsX8A+DFgHvjZiPiBUc7fhohYV31F/Qcj4kdGOPUc8PMR8dPABuBDI5r328D3Vl/Pn8jML4xoXjJzHvjuiPgIsJ/V8ySS9DarYkuB6lfzTtcz81SvWkn6Trcqgl2SVhOfY5ekwhjsklQYg12SCmOwS1JhDHZJKozBLkmF+V+rQleMjqL9KAAAAABJRU5ErkJggg==\n", 84 | "text/plain": [ 85 | "
" 86 | ] 87 | }, 88 | "metadata": {}, 89 | "output_type": "display_data" 90 | } 91 | ], 92 | "source": [ 93 | "\n", 94 | "t = np.arange(0.05, 10.0, 0.01)\n", 95 | "s1 = np.exp(t)\n", 96 | "s2 = np.cos(t)\n", 97 | "\n", 98 | "ax1 = plt.subplot(121)\n", 99 | "ax1.set_xticks(range(0, 251, 50)) # 设置x轴坐标从0到250, 每隔50刻度一次\n", 100 | "plt.grid(axis='x') # 注意,网格线是根据tick刻度来画的,有几个刻度画几条线\n", 101 | "\n", 102 | "ax2 = plt.subplot(122)\n", 103 | "ax2.set_xticks([]) # 设置x轴坐标为空\n", 104 | "ax2.set_yticks(range(-10,10, 5)) # 设置y轴坐标,从-10到10, 每隔5刻度一次\n", 105 | "plt.grid(axis='x')# 注意,网格线是根据tick刻度来画的,有几个刻度画几条线,该子图没有x刻度,则不会划线\n", 106 | "\n", 107 | "plt.legend()\n", 108 | "plt.show()" 109 | ] 110 | }, 111 | { 112 | "cell_type": "code", 113 | "execution_count": 13, 114 | "metadata": {}, 115 | "outputs": [ 116 | { 117 | "data": { 118 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAADxCAYAAAAjibd7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAEztJREFUeJzt3W+IXNd5x/HvY7UWW/mPWCvZSAmt3SzeYgw1iiqoSsLGUFeCpi7EYEFwbFK8EAxBVoptmroIEZdA4oAMfeGNKIUqjWO9qP+AkfvGmxIZku5iVw6WE9SGEEXCllaKHcuybMlPX8w1HU9GO3dn7qzWe74fMJy5c2aeY+2zv509O3duZCaSpLJcdqkXIElaeoa/JBXI8JekAhn+klQgw1+SCmT4S1KBfqfOpIi4PTO/v8D9u4DTwHxm7ouIVcA3gNeAQ5n5bBOLlSQ1o+cr/4j4HHDXAvdvBM5m5h5gMiIuB24FZjPzm8AXGlqrJKkhPcM/M58GXl1gyjbgYDU+AmzuOPZWRHxikEVKkppVa9unhw3AiWp8Clh/kWNHOx8YEVPAFMDIyMinbrjhhgaWs3hnzpxhzZo11l3Btefm5k5m5keWvDCwdu3aHB8fX/K6JX6dS6sL/fd2E+HfLoDOz4vodgyAzJwGpgEmJiZydna24eXUMzMzw+TkpHVXcO2I+MWSF62MjY1xKXq7xK9zaXWh/95u4t0+x4B11XgUOH6RY5KkZWJR4R8RqyLiox2HDwBbqvE48OOOYyOZ+auBVilJalSdd/vcCnw2Im4BNgHfar8/M+eAkYjYAcxk5rvAE8CmiLgf+G7zy5YkDaLnnn9mPgk82XboR13m7O64fQG4f+DVSZKGwjN8JalAhr8kFcjwl6QCGf6SVCDDX5IKZPhLUoEMf0kqkOEvSQUy/CWpQIa/JBXI8JekAhn+klQgw1+SCmT4S1KBDH9JKpDhL0kFqnUB94jYBZwG5jNzX5f7/wq4DzgKfBzYAcwDe4GT1bSpzHyjgTVLkgbUM/wjYiNwNjP3RMTeiHg8M9/pmHYe+HRmZkTckZlzEXEtsCszf9j8siVJg6iz7bMNOFiNjwCbOydk5jNV8H+M1m8IkqRlrE74bwBOVONTwPoF5t4OPNt2+5aI2BkRD3WbHBFTETEbEbOvv/56rQVLkga32D/4BpAL3H9dZr5bjV8D9mbmt4Hz1TbQB2TmdGZuysxNV1999SKXIknqV53wPwasq8ajwPFukyLik7T2/t93OfD+H3iPAmN9rlGS1LA64X8A2FKNx4FDETHaZd6NwJttt+8CPlONNwA/73ONkqSG9Qz/zJwDRiJiBzADbAV2dpn6LvDrttvfA8Yi4vPAq5n52uDLlSQ1odb7/DNzd8eh/V3mPAM803b7VeA7A61OkjQUnuErSQUy/CWpQIa/JBXI8JekAhn+klQgw1+SCmT4S1KBDH9JKpDhL0kFMvwlqUCGvyQVyPCXpAIZ/pJUIMNfkgpk+EtSgQx/SSpQrYu5RMQu4DQwn5n7utw/CdwLnAXOZeadEXElsLt63FOZ+WJTi5YkDaZn+EfERuBsZu6JiL0R8XhmvtNl6j2ZebTt9t3AY8AsrSt6famRFUuSBlZn22cbcLAaHwE213zum4HZzLwArIsIt5gkaZmos+2zAThRjU8B6y8y77aIWA2cz8yHgZEq+AHeBK5pex4AImIKmAIYGxtb5NIlSf2qteffJoDscvxl4KXMnI+I6eqHQPZ6XGZOA9MAExMT3Z5XkjQEdbZijgHrqvEocPwiz3OmGp8A1gJvR8Sq6tgaWr81SJKWgTrhfwDYUo3HgUMRMdox5wHg+mp8FXASeA7YWP0AmM/M9xpYrySpAT3DPzPngJGI2AHMAFuBnR3THgVuiojtwPPVXv80sB14EHikyUVLkgZTa88/M3d3HNrfcf9h4HDHsd8AXx1odZKkofDtl5JUIMNfkgpk+EtSgQx/SSqQ4S9JBTL8JalAhr8kFcjwl6QCGf6SVCDDX5IKZPhLUoEMf0kqkOEvSQUy/CWpQIa/JBWo1uf5R8Qu4DStK3Lt63L/FcDtwBvAhszcExGTwL3AWeBcZt7Z1KIlSYPp+co/IjYCZzNzDzAZEZd3mXYH8EJm7geujYirquP3ZOZ2g1+Slpc62z7bgIPV+AiwucucV4DV1TiBdwZfmiRpWOps+2wATlTjU8D6zgmZ+RxARKyubr8dEQC3VcfOZ+bDnY+LiClgCmBsbKyf9UuS+lBrz79N0HplfzF3AV+vxi8DL2XmfERMR8TqzDzXPjkzp2ld6J2JiYmFnleS1KA62z7HgHXVeBQ43m1SRGwFfpCZp9qe+0w1PgGsHWCdkqQG1Qn/A8CWajwOHIqI0fYJEfEJ4LLMfCUirouIceAB4PpqylXAyYbWLEkaUM/wz8w5YCQidgAzwFZgZ8e0LwNfjIjHgKdp/bbwKHBTRGwHns/MC00uXJLUv1p7/pm5u+PQ/o77v9blYYer/yRJy4xn+EpSgQx/SSqQ4S9JBTL8JalAhr8kFcjwl6QCGf6SVCDDX5IKZPhLUoEMf0kqkOEvSQUy/CWpQIa/JBXI8JekAhn+klQgw1+SClTrYi4RsQs4Dcxn5r4u968CvgG8BhzKzGcj4kpgd/W4pzLzxcZWLUkaSM9X/hGxETibmXuAyYi4vMu0W4HZzPwm8IXq2N3AY8BDwFcaWq8kqQF1tn22AQer8RFgc485b1UXdL+Z1g+EC8C6iHCLSZKWiTrbPhuAE9X4FLC+5pyRtou2vwlc0zYHgIiYAqaqm+ci4if1l96odcBJ667o2hOXoCYAP/vZz96MiJ9egtIlfp1Lqwt99natPf82AWTNOdnl2Adk5jQwDRARs5m5aZHracSlql1a3UtZOyJml7pmm5/6dbbuMGv387g6WzHHaP1UAxgFjtec83b1h2CANbR+I5AkLQN1wv8AsKUajwOHImJ0gTkjmfkr4DlgY/UDYD4z32tiwZKkwfUM/8ycA0YiYgcwA2wFdnZMewLYFBH3A9+tjk0D24EHgUdqrGW65pqH4VLVLq3upazt/3MZtUur23ftyOy1hS9JWml8+6UkFcjwl6QCLfatngPr56MilqjuFcDtwBvAhuqM5kb0qt02byvwscz8l6WqGxF/Q+s8jE9l5n1N1K1TOyJ+H/hzWu8CG8nMf2uw9u2Z+f1+1zZA3QWf197+8Pf2SurrJX3lP8BHRSxF3TuAFzJzP3BtRFy1hLWJiAD+uomadetGxBbgeNVQLy9lbVr/3v+cmf8OjDX47/054K4B19ZPXXt7hff2Suvrpd726fejIpai7ivA6mqcwDsN1K1bG+AW4D8aqlm37ueB/wJo6hXZImqvAv60Gv8eDf17Z+bTwKsDrq0f9vbK7+0V1ddLve3T70dFHB123cx8DiAiVle33x6wZu3a1XbAFcA80MgrhTp1gWuBv6zO21ibmQ8uYe1vAc9GxGHgiQb/vZtY27Ce195eoroMp7dXVF9fyj/4LuajIpay7l3A1xuu2av2Nlonyg3LxepeCfw4Mx8GstqvXKraW2h94ut/8/+f77TUhtFfdZ/X3h5u3WH39oe+r5c6/Pv9qIilqPv+H6V+kJlNfhRFndpXAH8C3AT8UUPbAXXqngR+WY1/SXOvguvU/ovMPJCZ/wT8T0Tc2FDtJtY2rOe1tz/cvb2i+nqpw7/fj4oYet2qKS/LzFci4rqIGG+gbq3amflYZs4ALwKvZOagWwG16gL/Cbz/YVTrgP9toG7d2r9uGx8FGv/1OCJWRcRHe6ztxw2Vs7dXfm+vqL5e8jN8I+IfaL3lbJ7WP8wfZ+bft92/CvhHWvtWLzb4drhedR8CPlndvBHYnJlvLUXtas4ocB+tVyh/m5knfuuJGq4bESPA3wEvAL+70NvIhlD7D4E/A84A12TmdxqqeyutjxO5G3gduCczv3ixtWXmvzZRt/N5sbfb56yY3l5Jfe3HO0hSgepew3dRJxcM62QWqWn2tkpV5xq+/Zxc0PjJLFLT7G2VrM5HOvdzcsEwTmaRGmVvq2RNnOTV7eSCWiezRNs1fEdGRj51ww03NLCcxTtz5gxr1qyx7gquPTc3dzIzP7LIh32oe7vEr3NpdaHv3m78DN9uJxdc9ISDbLuG78TERM7OXprLrM7MzDA5OWndFVw7In4x6FPwIevtEr/OpdWF/nu7iff5dzu5YFgn0khLyd7WirWo8F/EyQXDOJlFGhp7W6Wp826fW4HPRsQttM6Y+1b7/Z3X+M3Md+l+TV9pWbG3VbKee/6Z+STwZNuhH3WZs7vj9gXg/oFXJw2Rva2SeRlHSSqQ4S9JBTL8JalAhr8kFcjwl6QCGf6SVCDDX5IKZPhLUoEMf0kqkOEvSQUy/CWpQIa/JBXI8JekAhn+klQgw1+SCmT4S1KBal3APSJ2AaeB+czc1+X+vwLuA44CHwd2APPAXuBkNW0qM99oYM1SI+xrlaxn+EfERuBsZu6JiL0R8XhmvtMx7Tzw6czMiLgjM+ci4lpgV2b+sPllS4Oxr1W6Ots+24CD1fgIsLlzQmY+U32DfIzWKylpubOvVbQ64b8BOFGNTwHrF5h7O/Bs2+1bImJnRDzUbXJETEXEbETMvv7667UWLDVkaH0N9raWv8X+wTeAXOD+6zLz3Wr8GrA3M78NnK9+Xf6AzJzOzE2Zuenqq69e5FKkxjTa12Bva/mrE/7HgHXVeBQ43m1SRHyS1h7p+y4H3v9D2FFgrM81SsNgX6todcL/ALClGo8DhyJitMu8G4E3227fBXymGm8Aft7nGqVhsK9VtJ7hn5lzwEhE7ABmgK3Azi5T3wV+3Xb7e8BYRHweeDUzXxt8uVIz7GuVrtb7/DNzd8eh/V3mPAM803b7VeA7A61OGiL7WiXzDF9JKpDhL0kFMvwlqUCGvyQVyPCXpAIZ/pJUIMNfkgpk+EtSgQx/SSqQ4S9JBTL8JalAhr8kFcjwl6QCGf6SVCDDX5IKVOvz/CNiF3AamM/MfV3unwTuBc4C5zLzzoi4EthdPe6pzHyxqUVLTbCvVbKe4R8RG4GzmbknIvZGxOOZ+U6Xqfdk5tG223cDjwGztC5+8aVGViw1wL5W6eps+2wDDlbjI8Dmms99MzCbmReAdRHhFpOWE/taRauz7bMBOFGNTwHrLzLvtohYDZzPzIeBkeobBFoXwL6m7XkAiIgpYApgbGxskUuXBjK0vgZ7W8tfrT3/NgFkl+MvAy9l5nxETFffLNnrcZk5DUwDTExMdHteaSk02tdgb2v5q/Mr6zFgXTUeBY5f5HnOVOMTwFrg7YhYVR1bQ+vVlbRc2NcqWp3wPwBsqcbjwKGIGO2Y8wBwfTW+CjgJPAdsrL5R5jPzvQbWKzXFvlbReoZ/Zs4BIxGxA5gBtgI7O6Y9CtwUEduB56s90WlgO/Ag8EiTi5YGZV+rdLX2/DNzd8eh/R33HwYOdxz7DfDVgVYnDZF9rZL5NjVJKpDhL0kFMvwlqUCGvyQVyPCXpAIZ/pJUIMNfkgpk+EtSgQx/SSqQ4S9JBTL8JalAhr8kFcjwl6QCGf6SVCDDX5IKZPhLUoFqXcwlInYBp2ldtm5fl/uvAG4H3gA2ZOaeiJgE7gXOAucy886mFi01wb5WyXq+8o+IjcDZzNwDTEbE5V2m3QG8kJn7gWsj4qrq+D2Zud1vEC039rVKV2fbZxtwsBofATZ3mfMKsLoaJ/DO4EuThsq+VtHqbPtsAE5U41PA+s4JmfkcQESsrm6/HREAt1XHzmfmw52Pi4gpYApgbGysn/VL/RpaX1ePsbe1rNXa828TtF4BXcxdwNer8cvAS5k5HxHTEbE6M8+1T87MaWAaYGJiYqHnlYap0b4Ge1vLX51tn2PAumo8ChzvNikitgI/yMxTbc99phqfANYOsE6pafa1ilYn/A8AW6rxOHAoIkbbJ0TEJ4DLMvOViLguIsaBB4DrqylXAScbWrPUBPtaResZ/pk5B4xExA5gBtgK7OyY9mXgixHxGPA0rVdVjwI3RcR24PnMvNDkwqVB2NcqXa09/8zc3XFof8f9X+vysMPVf9KyZF+rZJ7hK0kFMvwlqUCGvyQVyPCXpAIZ/pJUIMNfkgpk+EtSgQx/SSqQ4S9JBTL8JalAhr8kFcjwl6QCGf6SVCDDX5IKZPhLUoEMf0kqUK2LuUTELuA0MJ+Z+7rcvwr4BvAacCgzn42IK4Hd1eOeyswXG1u11AD7WiXr+co/IjYCZzNzDzAZEZd3mXYrMJuZ3wS+UB27G3gMeAj4SkPrlRphX6t0dbZ9tgEHq/ERYHOPOW9VF76+mdY3zgVgXUS4xaTlxL5W0eps+2wATlTjU8D6mnNG2i5u/SZwTdscACJiCpiqbp6LiJ/UX3qj1gEnrbuia0903B5aX8Nv9fabEfHT/pcuLegP+nlQrT3/NgFkzTnZ5dgHZOY0MA0QEbOZuWmR62nEpapdWt1LWTsiZhe6mwb7Gj7Y29JyVOdX1mO0Xq0BjALHa855u/qDGcAaWq+cpOXCvlbR6oT/AWBLNR4HDkXE6AJzRjLzV8BzwMbqG2U+M99rYsFSQ+xrFa1n+GfmHDASETuAGWArsLNj2hPApoi4H/hudWwa2A48CDxSYy2X8lfkS1W7tLqXsvYH6i5hX0vLUmT22uqUJK00vk1Nkgpk+EtSgQx/SSqQ4S9JBTL8JalAhr8kFcjwl6QC/R8OV628B8+wRQAAAABJRU5ErkJggg==\n", 119 | "text/plain": [ 120 | "
" 121 | ] 122 | }, 123 | "metadata": {}, 124 | "output_type": "display_data" 125 | } 126 | ], 127 | "source": [ 128 | "# 方法二 setp\n", 129 | "\n", 130 | "ax1 = plt.subplot(221)\n", 131 | "plt.setp(ax1.get_xticklabels(), visible=True)\n", 132 | "plt.setp(ax1.get_xticklines(), visible=True)\n", 133 | "plt.grid(axis='x')\n", 134 | "\n", 135 | "ax2 = plt.subplot(222)\n", 136 | "plt.setp(ax2.get_yticklabels(), visible=False)\n", 137 | "plt.setp(ax2.get_yticklines(), visible=False)\n", 138 | "plt.grid(axis='x')\n", 139 | "\n", 140 | "ax3 = plt.subplot(223)\n", 141 | "plt.setp(ax3.get_xticklabels(), visible=False)\n", 142 | "plt.setp(ax3.get_xticklines(), visible=True) # 与下面那个子图相比,少了x轴的刻度线\n", 143 | "plt.grid(axis='x')\n", 144 | "\n", 145 | "ax4 = plt.subplot(224)\n", 146 | "plt.setp(ax4.get_xticklabels(), visible=False)\n", 147 | "plt.setp(ax4.get_xticklines(), visible=False) # \n", 148 | "plt.grid(axis='x')\n", 149 | "\n" 150 | ] 151 | }, 152 | { 153 | "cell_type": "code", 154 | "execution_count": null, 155 | "metadata": {}, 156 | "outputs": [], 157 | "source": [] 158 | }, 159 | { 160 | "cell_type": "code", 161 | "execution_count": null, 162 | "metadata": {}, 163 | "outputs": [], 164 | "source": [] 165 | }, 166 | { 167 | "cell_type": "code", 168 | "execution_count": null, 169 | "metadata": {}, 170 | "outputs": [], 171 | "source": [] 172 | }, 173 | { 174 | "cell_type": "markdown", 175 | "metadata": {}, 176 | "source": [ 177 | "## 控制坐标轴的显示\n", 178 | "通过坐标轴的载体(spines, 轴脊)控制, 轴脊上有刻度线和刻度标签\n", 179 | "\n", 180 | "一个图有4个轴脊,上下左右边框" 181 | ] 182 | }, 183 | { 184 | "cell_type": "code", 185 | "execution_count": 26, 186 | "metadata": {}, 187 | "outputs": [ 188 | { 189 | "data": { 190 | "image/png": "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\n", 191 | "text/plain": [ 192 | "
" 193 | ] 194 | }, 195 | "metadata": {}, 196 | "output_type": "display_data" 197 | } 198 | ], 199 | "source": [ 200 | "## 控制坐标轴的显示\n", 201 | "\n", 202 | "t = np.arange(0.05, 10.0, 0.01)\n", 203 | "s1 = np.exp(t)\n", 204 | "s2 = np.cos(t)\n", 205 | "\n", 206 | "ax1 = plt.subplot(121)\n", 207 | "ax1.spines['right'].set_color('none') # 不显示上面、右边的刻度线\n", 208 | "ax1.spines['top'].set_color('none')\n", 209 | "ax1.set_xlim(-1, 2)\n", 210 | "ax1.set_ylim(0,3)\n", 211 | "plt.title(\"$\\exp(x)$\")\n", 212 | "plt.plot(t, s1)\n", 213 | "\n", 214 | "\n", 215 | "ax2 = plt.subplot(122)\n", 216 | "ax2.spines['right'].set_color('none') # 不显示上面、右边的刻度线\n", 217 | "ax2.spines['top'].set_color('none') \n", 218 | "\n", 219 | "ax2.xaxis.set_ticks_position('bottom') # 把刻度线移动到下面,也可以不写(默认)\n", 220 | "\n", 221 | "\n", 222 | "ax2.set_xlim(-1, 2)\n", 223 | "ax2.set_ylim(0,3)\n", 224 | "plt.title(\"$\\cos(x)$\")\n", 225 | "plt.plot(t, s2)\n", 226 | "plt.show()\n" 227 | ] 228 | }, 229 | { 230 | "cell_type": "code", 231 | "execution_count": null, 232 | "metadata": {}, 233 | "outputs": [], 234 | "source": [] 235 | }, 236 | { 237 | "cell_type": "markdown", 238 | "metadata": {}, 239 | "source": [ 240 | "## 移动坐标轴位置\n", 241 | "\n", 242 | "示例:画一个坐标系,(0,0)为坐标原点\n", 243 | "\n", 244 | "方法: \n", 245 | "- 把右边刻度线、上面刻度线取消(颜色为none)\n", 246 | "\n", 247 | "- 再移动左轴和下轴的位置\n", 248 | "\n", 249 | "\n" 250 | ] 251 | }, 252 | { 253 | "cell_type": "code", 254 | "execution_count": 32, 255 | "metadata": {}, 256 | "outputs": [ 257 | { 258 | "data": { 259 | "image/png": "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\n", 260 | "text/plain": [ 261 | "
" 262 | ] 263 | }, 264 | "metadata": {}, 265 | "output_type": "display_data" 266 | } 267 | ], 268 | "source": [ 269 | "## 设置刻度范围和刻度标签\n", 270 | "\n", 271 | "x = np.linspace(-2*np.pi, 2*np.pi, 200)\n", 272 | "y_1 = np.sin(x)\n", 273 | "y_2 = np.cos(x)\n", 274 | "\n", 275 | "plt.subplot(211) # 2行1列,指定第二个子图\n", 276 | "# 1. 刻度以圆周率形式展示\n", 277 | "# 2. 设置合理的范围\n", 278 | "plt.xlim(-2*np.pi, 2*np.pi)\n", 279 | "plt.xticks([-2*np.pi, -1.5 *np.pi, -np.pi, -0.5*np.pi, 0, 0.5*np.pi, np.pi, 1.5*np.pi, 2*np.pi],\n", 280 | "\t\t[r'$-2\\pi$',r'$-3\\pi/2$',r'$-\\pi$',r'$\\pi/2$',r'$0$',r'$\\pi/2$',r'$3\\pi/2$',r'$2\\pi$'])\n", 281 | "\n", 282 | "plt.plot(x,y_1, label=r'$\\sin(x)$')\n", 283 | "plt.plot(x,y_2,label=r'$\\cos(x)$')\n", 284 | "plt.grid(axis='x',color='gray',ls=\":\")\n", 285 | "plt.legend(loc='lower left', bbox_to_anchor=(1,0.5,0.9,0.9))\n", 286 | "\n", 287 | "\n", 288 | "ax = plt.subplot(212)\n", 289 | "# 1. 取消两个轴\n", 290 | "ax.spines['right'].set_color('none')\n", 291 | "ax.spines['top'].set_color('none')\n", 292 | "# 2. 移动两个轴\n", 293 | "ax.spines['left'].set_position(('data', 0))\n", 294 | "ax.spines['bottom'].set_position(('data', 0))\n", 295 | "\n", 296 | "ax.set_xlim(-2*np.pi, 2*np.pi) # 这里通过ax设置,也可以通过plt设置\n", 297 | "plt.xticks([-2*np.pi, -1.5 *np.pi, -np.pi, -0.5*np.pi, 0, 0.5*np.pi, np.pi, 1.5*np.pi, 2*np.pi], # 这里通过plt设置\n", 298 | "\t\t[r'$-2\\pi$',r'$-3\\pi/2$',r'$-\\pi$',r'$\\pi/2$',r'$0$',r'$\\pi/2$',r'$3\\pi/2$',r'$2\\pi$'])\n", 299 | "\n", 300 | "plt.plot(x,y_1, label=r'$\\sin(x)$')\n", 301 | "plt.plot(x,y_2,label=r'$\\cos(x)$')\n", 302 | "plt.grid(axis='x',color='gray',ls=\":\")\n", 303 | "plt.show()\n" 304 | ] 305 | }, 306 | { 307 | "cell_type": "code", 308 | "execution_count": 34, 309 | "metadata": {}, 310 | "outputs": [ 311 | { 312 | "data": { 313 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbYAAADuCAYAAABVoyJeAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzsnWd4FGUXQM+k9xAIBAihhBZKCCUU6b2IdBRFUezCZ68ogiJi7wUsqBQLoIQqHRHpkEACgRAIkEAglfSe3Z3vxyAS2M22md0NzHkeHmN2dudkZnbuzDv3vVcQRREVFRUVFZWbBSd7C6ioqKioqMiJGthUVFRUVG4q1MCmoqKionJToQY2FRUVFZWbCjWwqaioqKjcVKiBTUVFRUXlpkINbCoqKioqNxVqYFNRUVFRualQA5uKioqKyk2Fi9IrCAwMFJs2bar0alRUVFRuKmJiYrJFUaxrb48aiSiKFv0DJpmyXPPmzcWawMqVK+2tYBKqp7zUBM+a4CiKqqfcANGihefnW/2fIFpQK1IQhFHAdFEURxhbNjIyUoyOjjZ7HSoqKiq3MoIgxIiiGGlvj5qIRUORoiiuEwRhginLll5OheOrwK8RBLYEz1qWrFJ2yiq1nM0q5nxOCcXlGuKOHqVn1840rOVBy3q+eLo521tRL5s2bWL48OH21jCKw3oWZkD2KShMB20FR+OP06HnYAhoBgFNQRDsbYgoilzMK+VcdjHZReUciT1K544RBPl50CzQm/r+HvZW1IvD7vPrcFjPihK4nAS5yVBeaG+bGo1Fd2wAgiAsEkVxqoHXHgMeA+jSwKlL9GM+/71Yrx20GAgdJkH9cIvWbSlp+aWsjb3E9oRMYi/kUaHV6V3OSYAOjWoxoHU9xnUKpnEdL5t6VkdxcTHe3t721jCKw3jqdHBuJ5xYA0nbIP+C4WU9a0NoP2gzClqPBFfbBZAKjY6/Tmaw+XgG/5zK4nJxhcFlG/p70LtlILeHN6BPy7o4O9k/GIMD7XMjOJRn3gU4uhxOb4HUaBC1V18S5hSod2wWokhgu5a2rVqIJ3atgbzzkBEPybsheQ/oKiE4Eno/B61vByflEjTjL+az4O8zbIxPQydC+2A/ejUPJLyRP01qe+Pv6crhw9G0aBtBam4Jxy8VsDspm9gLeYgi9GtVlycHtqBr09qKOZrKnj176NWrl701jGJ3T00FHF4M++dDzllw9ZYuqBrfBvXagl9DcPEg5tABurQKhuxE6cRyegsUZ4FXHYh8CG77H3gGKKZZWFbJoj3JLN6XQnZROQFervRvXY/OjWvRMsiXur7uHIs9THjHzqTnl3Eqo5DolFz+ScyisFxDowBPpvZsyn09muDhat9RBrvvcxNxCM8Lh2D3J5C4ERChYWcI7Q8NOkDtUHD3Q6gTekNgi4mJqefi4rIQaM+tndWuA+I1Gs0jXbp0ybz+RcUDW0REhBgXF1f1lyU5cOx36aSTmywFuBHvQyN5L07S8kt5f+NJVsdewtfDhXu7N2FS1xCaBd54tZaRkUFQUFCV313KK+X36FSW7EvmcnEFA8PqMfuOtjTV835boc/TEbGbpyhKd2dbZ0kXU426QffHIewOvXdgN3jqtHDuHzj4PST+CR7+0Pdl6P4EOMuXRKzVifx68Dwfb0kkr6SSAa3rcv9tTenTMhAX56rnK33bslyjZXtCJov2JHMwOYcG/h68PLw1YzsGI9hpOFU9Nk0gNxm2zIKEtdIFU9dHodO90jD4deh7xhYXF7e2fv36berWrVvg5OR0yzbT1Ol0QlZWln96evqJiIiI0de/rvwdW9u24okTJ/S/qNXA0WWw/S0oyoQe02HQLHD1tMjpX0RRZNmhC8z7M4FKrY5H+4TyeL9QfD1cDb4nNjaWjh076n2ttELL4n3JfLn9NJVakReGtuKRPqF2GQKqztORsItnYQasexpObYKgcBjyJjQfVO1zs2o904/BtjmQtFUaNh/7DdRvb7Xmmawinl8eS1xqPj2b12HGiDA6NDL87NnYttx35jLvbUwgLjWfPi0DeX9CBxrWsu47ZAnqsVkNOh0c+h62viEdj72fk8537j4G32IgsJ0NDw/PvZWD2r/odDrh2LFjAREREaHXv2bRrawgCGOAAYIgDDW2rLNzNcMjzi7Q6T54Kga6Pgz7v4bv+kPWKUu0AMgvreSJn2N4NeoY4cH+bH2uHy8Oa11tUAPw9fU1+JqnmzNP9GvOjhf7MyCsLu9uPMnk7/eTWVhmsaelVOfpSNjc8/Q2WNATzv4NQ9+Gx/6GFoONJoNU61k/HO79He5aIgXN7wfCge+ku0ILWXHoAiO/2MX5nBI+v7sjvzzSvdqgZtQRuK15HaKm92LO6HYcTsllxOe72Hw83WJHS1GPTQOU5MCvd8LGl6Fpb3jyEPR7udqgVg1OalCTuLId9MYwiwKbKIprRFFsIoriFqvM/sXdF0Z+DFNWQXE2fD8AEtab/THJ2cWM+Wo32xMymXl7G355pLusiR/1/Dz45r4ufDixA3GpedzxxW6OnM+V7fNVLEAUYdcn8MtE8AmCx3ZCz6fkGzYUBGg7BqbtlZ6BbHwJVk+HSvMuaio0Ol5ffYyXVx6lS5MANj3blzEyDhs6Owk80LMp65/uQ+PaXjy+NIZPtp5Cp1PPgXYl/Rh821ca3h75sXSh5N/I3lY3PYo/fNRqtcYX+pfmA+Hxf6Bua1h+H+z72uS3Hk3NY8KCveSXVrLssR482jcUJzOGCgsLTUuvFQSBOyNDWDW9Fx6uztz93X42xdvu6thUT3tjE0+tBtY8CdvnQLtx8Mg2qBdm1keY7OlTF+5ZBv1fhbhfYelYKCsw6a2lFVoeWxrNz/vP80S/5ix5qDtBfqZnXJqzLZsFevPHtNu4s0sjvth+mmeWx1JpIPtXbtRj8zpOb4Ufh0vPbR/aDF0fcYjpJLcCigc2V9fqhwBvwD8YHlgPbe6Aza/B3+8ZfcvfiZnc/d1+PN2c+WNaTyItyF5s0KCBWcu3aeDHquk9adPAj2m/xBB1ONXsdVqCuZ72QnHPyjLp4if2Z+j3Ckz8EdzMvzs3y9PJCfrPgAk/QOohWDJaGmaqhoKySh748SA7T2Xx3vhwZowIM/vZrLnb0t3FmQ8mduCV4WGsi7vEtJ8PU64x4wLTQtRj8xpOrIXf7pYyHB/dDsGdlV+nylUUD2zl5eXmv8nNC+5cDB3vhb/fhR3vGlx0U3wajyyOpmkdb6Km9aR5XYvGrUlKSjL7PXV83Pnt0R70bF6HF36PY9UR5YObJZ72QFFPTQX8/gCc2gi3fwQDXrP4Stgiz/CJMOlnyDgBi0ZKz9/0kFNcweTv93P4fC5f3tOJu7s1tpmjIAhM69+ct8a0Y1tCBo8sjqa0Qtngph6bVzixBv54UErhn/qnNLXkFqBTp05Gh0uKioqErl27ttZoNAaXKSsrEyIjI1tXVlZa7KJ4YPPysvAZl5MzjP4SOt4HO9/TG9z+OZXFU78doUMjf5Y/3oN6ZgzvXI+lWVKebs4svL8rt4XW4YUVcaw+ctFiB1OoCVlnoKCnVgMrH5YyH0d+At0eterjLPZsPQLuXSGlby+6HYqyqrycX1rJ5O/3czqjiO/vj+SODpaf3KzZlvff1pQPJnRgd1I2Dy46SFmlcsHtlj82QQpqvz8IwV3gvpXg4afcuhyMI0eOnDS2zJdffhk4evToXBcXw8/APTw8xH79+hUsXLjQ4onDilf3LyoqsvzN/wY3kIKbq4eUJgvEpOTw+NIYmtf14aep3YxmPRpj165dFpfZ8XRz5ocHuvLQokM8vyIWV2cnRnZQZrjDGk9booinTgurp0lzgIa9K2XSWolVnqH94b4oWDpOynp7YD24+1BWqeXRJdGcySrix6ld6dPSugLt1m7Lu7qG4O7qxLPLY3lm2RHm39tFkakqt/SxCXBqixTUGkVKQc1d2ezLl/6ICzmVXihrWaRW9X1LPpwYUU15HigoKHAaPXp0aFpamptOpxNefvnlS48++miul5dXpyNHjhwfMWJEy27duhVFR0f7BAUFVWzevDnJx8dHBFixYkWdZcuWnf33s7p3795qxowZ6ePGjSt4+umnGxYUFDgvWrTowsSJE/NmzJgRPG3atOrH+g2g+B2bn5+VVyxOTlJwaz8Rtr0J8StJSCvgwZ8OEeTnztKHu+PvZV1QA6w+0D3dnPlhaiSdGwfw3IpYYlKUyZasCScOUMhz82twbAUMmg23TZflI632bHKb9HwvLQ5+n4q2soLnlsdy8FwOH9/V0eqgJosjMKZjMLPvaMvm4xm8te44ls5frY5b+thMOyoNPwa1s0lQsydRUVF+9evXr0xMTDxx+vTp4+PHj6+SRXX+/HmPp59+OjMpKem4v7+/dsmSJQEgDTFeuHDBvXXr1lfrxb355puX3n333QYLFiyoffToUa+FCxdeAOjatWvp0aNHLa6EofgdW15envUf4uQEY+dDwUXEVdP4zGk2Xm5t+PmR7tT1dbf+84GoqCjGjx9v1Wd4ubnw3f2RjJu/h0eXRLN6ei/Z60zK4WkLZPc89AMc+AZ6/A/6vCDbx8riGXa7NCy6/lliFzzIxkv3MOuOdoyOkOfZilzb8sFezbiUV8r3u87RoJYnT/RrLoPdf9yyx2b+Rfj1LvCoBZNX2CyoGbuzUorOnTuXzpw5M2TatGnBY8aMyR8+fHiVYbng4ODynj17lgJ06tSpJDk52R0gPT3dxdfXt8rDtREjRhTNnj2br776Kmj37t2J/w5Ruri44OrqKubm5joFBASYndar+B1brVoyVfN3cad84lLSqMN7Fe+xdFwgjQLkCxpyHei1vd34aWpXtDqRBxcdJL/E8geg+qgJJw6Q2fPMDtjwErQcCkPnyve5yOgZ+SBxzR+nS856FrXYzcO9m8nzuci7LV8d0YY7OjTgvY0nWX/0kmyfC7fosVleCL9OgvIi6ZmrX83IDLWGDh06lB8+fPhEeHh46cyZM4NffPHFKn+0m5vb1eEAZ2dnUaPRCADe3t66ioqKKjHn4MGDnllZWa5ubm7i9QGssrJS8PLysmhoQfHAJssdG1KZrFlbLnFPyYt4uzvTctvDsrZ2iIqKku2zQuv68N2ULpzPKWH6rzFoZZwkK6enksjmmZ0kZUAGtpLS7J3kLfQrl+fBczlMSOjHAe8B9Ev9BpK2y/K5IO8+d3IS+PiuCLo0CeDlP45yKsMxv0NKIpunTgdRj0HmCbhrsTQMeQuQnJzs6uvrq5s+fXrOs88+mxEbG2vSHUbdunW1Wq1WKCkpEQBSUlJc77vvvmZRUVFJnp6e2pUrV159bpWenu4cEBCgcXd3d8zAJtcd26K9yayITmX0gN643fMz5JyBtU9ZVd7oWuS+2uweWod548LZk3SZT7daXiLsem6pq+LyQmkukJMLTF6mSIaZHJ7p+WVM/+UwIbW9afP4IoR6baXMzdwUGQzl3+fuLs7Mv7czXm4uPLE0hoIyeUYVbqljE2Dv55C4AYa9Ay0GyfOZNYCYmBjPjh07tgkLC2v7/vvvN5g9e3aaqe/t27dv/pYtW3wKCwudxowZ0/z9999P7dy5c9msWbPS5s6de3XsfuPGjX6DBg3Kt9RR8cCWn2+x21Wik3N4+88EhrQN4rnBraBZHymB4PgqOPCtDJawfr35JbyMcVdkCJMiQ/hqRxI7Em/orGARSngqgdWeogjrn5MuYO5crLf6uRxY61mu0TLtlxhKKjR8O6ULfn614O6fQdRJE8grS+3uqI8gPw++ntyJlJwSXlwRJ0syyS1zbAKc2yUVb283TuoecQsxYcKEglOnTp04efLkifj4+IS+ffuWAJSUlBxp3bp1xenTp4//u+xbb72V8cknn1wd837mmWcyFy1aFOjr66uLjY09OW7cuAKQnrXFxsZenS7w22+/1X7yySerzqExA4fPiswrqeCZZbEE1/Lk47si/iuT1fMZaDUCtsyECwet9hw61Gg9Z4uYM6YdbRr48dzyWC7mWX+SU8pTbqz2PLxEam3U/1XpQkYhrPV8d8NJjpzP4+M7I2gVdCVpoHYojF8o1Qn880W7Oxqie2gdXh0RxpYTGSzYecbqz7tljs3CdPjjIajdXMrYVstkmUyvXr1K+/fvX2Bsgvbo0aPzIiIiLKjuIaF4YLNmHpsoiryy8iiZhWV8eU8n/K6dq+bkBOMWgF8w/D7VaGkjY+zdu9eq9xvCw1Ua9tFoRab/cpgKjXV1+5TylBurPDOOS5XQQ/vLmgGpD2s8/zqZwaK9yTzYqykjwq9LGmg1FPq+JJX8il9pN0djPNy7GSM7NODjLaesLuh9SxybOi388TBUFMGkpTd1Wr9SPPvss5eNTdB+8sknL1uzDsUDm6en5X2hlu5PYfPxDF4ZHkZEiJ5ndZ4BUkuRokxY94xVz9vCw8Mtfq8xmgV6Sx0BLuTx6Tbrnrcp6SknFnuWF8GKB6QGn+O/lz1Z5Hos9cwsKOPF34/SpoEfM0YYqCTU7xWp0em656SmpzZ2NAVBEHhnXDj1/Tx4ZlksReWGr6SNcdMfmwB7PoOU3dL0jnpt5JNSkRXFA1tFRYXxhfSQkFbA238mMKB1XR7qVU3qdMOOMHCmVI0i7jcLLSE5Odni95rCiPAG3N01hG92nuFQsuV3l0p7yoXFnltnweUkmLAQfOrJ6qQPSzx1OpEXfo+jpELDF3d3xN3FQPB1doEJ30vP26Iel672beRoDv6ernw6qSOpuSW8ufa48TcY4KY/Ni8dgR3vSM/VIu6W1UlFXhQPbNXdchqiXKPlueWx+Hu68tGdEcbbz/R8Gpr0gg0vS7X7LCAwMNCi95nD63e0JSTAi+eWx1JoYSaaLTzlwCLP01sh+kfo+SQ06yu/lB4s8fxxzzl2nc5m1h1taRlkZCgqoKnUh+v8XqlvnI0czaVbs9r8b0AL/ohJtXh+2019bFaUSKn93vWkuzX1uZpDo3hg0+nMf6b0xfbTnEwv5L3x4dTxMaGyiJMzjPtGOtgsvDIuK1O+G7aPuwufTorgUl4pc9adsOgzbOEpB2Z7luRIvdXqtoEBrysjpQdzPU9nFPLBpkSGtA1isqnV+iMmQfidUqeKi4cVd7SUpwe1JCKkFq9FHSMt3/xEp5v22ATYOhuyT0nP9b0srs2rYiMUD2zmphEfOZ/Lgr/PcGeXRgxqE2T6G2s1hts/hAv7Yc/nZlqCNS0SzKFLk9pM7y9dGW+KN3n6x1Vs5WktZntueBFKsmH8t1KxaxthjqdGq+PF3+Pw8XDh3fHh5nW/vv0jqcP3mv+BxrxkL1vtc1dnJz6b1JEKrY7Xoo6Z/d29aY/NpO1w6HvoMV1KaFJxeBxqKLKsUssLv8dR38+DWaPamr+yDpOgzWipOWmWeUkaAQEB5q/PQp4e1JJ2Df14fXU8ucXmPYO0pac1mOUZHyVlDvafAQ0ilJPSgzme3+06S1xqPm+NaUegKSMJ1+JZC0Z9LlWp+OdDxRytpVmgNy8NC2NHYhZRh81rwXRTHpvlhVJiWmArGPSGclIqsuJQySMfbU7kbFYxH0yMqJrabyqCIF0Zu3pKV8ZmDEmmptqmAzaAm4sTH06MIK+kkrl/mjckaUtPazDZs/iydLcW3AV6PaeslB5M9TydUchnW08zon19Rl6f2m8qrYZKzXN3fQKXYmV3lIupPZvSpUkAc9YdJ7PA9GG7m+7YBKmjSH4qjPnapiMJKtaheGDz8DDtYIi7kMePe84xuXtjere04iG0bxCMeB9SD8LB70x+W1iY0eavstK2oR/T+jcn6vBFs6qS2NrTUkz23PwqlBXA6K+kLEIbY4rntUOQc8e2N28I8nqGzZOyPVdPlzqBy+QoJ85OAh9M7EC5Rsdrq+JNHpK86Y7N5D1waCH0mAYh3ZSVusVQupO24oGtuLjY6DKVWh0zoo4R6ONueE6QOXSYBC2GSCVvcs6Z9JZDhw5Zv14zeXJgC1rW82Fm1DGTsyTt4WkJJnme3gZHl0Of5yHIgqFnGTDFc8m+FOJS85kz2oIhyOvxDLgyJHkcdpuWJWmPfd68rg8vDG3FtoQM1saZliV5Ux2bFSWw9kkpq3Wg7ZKZbhWU7qQtKNFw8FoiIyPF6Ojoapf5ducZ3t14kgX3dr6xgoOl5KfC1z0guBPcv9Zoeq5Op8PJSfE4fwOHz+cyYcFe7u3emLfHGp84ai9PczHqWV4I828DVy94Yhe4yNNXz1yMeWYWlDHw4510aRLAoge7Wne3di1/PCzNvZy2DwJbWOWoFFqdyPj5e0jNLWX7C/2o5eVW7fI3zbEJsGUW7P0CHlhns6kn1yMIQowoipHX/i4uLi45IiIiG4DV/wsh84S8DR/rtS1h7NdG+7x99dVXdb744osgQRBo06ZN6erVq8+9+eabQb/88ksgwJQpU7Jmz56daajbdqdOncKWLVt29t+mo4Y6ae/bt89zxowZwTt37kzS5xEXFxcYERHR9Prf271tzYWcEj7ddorBbYIY3r6+fCv2bwRD3oRz/8DRFUYXX7t2rXzrNoPOjQN4qFczft5/npgU4xO37eVpLkY9t7915dnFV3YLamDcc96GBCq0OuaMbidfUAOpIryLJ6x/1mjFHHvtc2cngXfGh5NXWsn7m04aXf6mOTYzTsC+r6Hz/XYLao5MdHS0x0cffdRg586dpxITE098++2353ft2uX166+/1omJiUmIjo5OWLJkSd09e/Z46uu2bYtO2na9YxNFkQd+OkRMcg5bn+9Hw1qWl9/Si04HPwyRJm0/FS0NAzkgxeUaBn+yE39PV9Y/1RsXZ8e/6rWKi4fh+4HQ7VFpioaDsjcpm8kLD/D0oJY8P6SV/CuI/lHqYDD2G+h4j/yfLxNvrz/Bwt3n+OOJ24hsepPP4RJFWDRSyl596rBd56wZvWOzE/PmzauXnp7u+uWXX15Nm507d269y5cvu3z22WeXAJ555pmGdevW1YwePTp/xIgRrUaPHp3zb7ft5ORk1wEDBrQ6d+5clTI3Xbt2bV1SUuK0e/fuxGubjtarV69DYmJivL5O2g55x7Y27hL/nMrixWGt5Q9qIBVKvuNTKM2FbXOqXXTVqlXyr99EvN1deGNUO06mF7Job3K1y9rT0xwMeup08OcLUgKFAzy7MORZodExa008IbU9md6/uTIr7zxVqiW5ZWa1Rbztvc+fG9KKhv4ezFwVT6XWcMEFe3uaSrWeR1dAyh4Y/KY6EdsAoigiCIJ4/e/0oa/bti06adut0WheSQVvrTtBRCN/7r+tqXICDTpIWU0xP1Xb3mbcuHHKOZjAsHZBDAqrxydbT3GpmvY29vY0FYOeR5bApcMw9G2p0LGdMeT5w+5znMkqZs7odni4KlSI2ckJRn0GZflSjUwzHW2Ft7sLb45uR2JGIQt3GU7GsrenqRj0LMuHLa9LU0863W9bqRrE8OHDC9auXVs7PT3dGSAjI8N54MCBRRs2bKhVWFjoVFBQ4LRhw4aAAQMGFOrrtm2LTtp2u2N7Z0MCeaWVvDu+A87GakFaS/8ZUnub9c+BVn966erVq5V1MIIgCLw5uh06UWTOOsOFaO3taSp6PUtypHlBTXpJJaYcAH2eF/NK+WL7aYa0DWJgmBnVbywhqB3c9iQc+VlKLzfR0dYMbVefIW2D+Hz7KS7klOhdxhE8TcGg5453oDhLqu1ZA5Jg7EVkZGTZCy+8kNanT5+w1q1bt50+fXpI7969SyZPnny5c+fObbp06dJmypQpWb169So11G1b6U7adnnGFpOSw4QF+3i8byiv3m6j1g8J66SOxkPnSUV2r8NRMrrm/53EB5sS+eGBSL0lxRzF0xh6Pdc9A4eXwhO77Zbefz36PJ9YGsPfpzLZ9nw/GgXIm3Sml4oSmN9dSiZ5Yje4VM0+dJR9fimvlMGf7KR7s9r8OPXGDFFH8TSGXs/0Y/BtX4h8SApsDoCjPmOTgz179nh++OGH9VevXl3tfKyhQ4c2//DDD1MNNR212zO2goKCKv+v1YnMWn2c+n4ePD2opdKr/4+wO6DVcOmqLP/GygN//fWX7Vyq4ZHeobSs58PsNccprbixcoqjeBrjBs/UGIhZLA0LO0hQgxs9/07MZNPxdJ4a2NI2QQ3AzUuqGJ+dCHtvrHPqKPu8YS1Pnh/Sih2JWWyMT7/hdUfxNMYNnjqd1OncM8AhnvveCijdSVvxwObtXTVT85cDKZxIK+D1O9rg7W7DShOCACM+kHpjbXzlhpe7du1qO5dqcHNx4u2x7aXhsL9O3/C6o3gao4qnTgsbXpCKAPe7cdvbk2s9yyq1vLH2OKGB3jzSp5oegErQcgi0HQP/fAy5KQYd7c3Unk1p28CPt9aduKEpqSN5VscNnnG/ScXTh7zlsJnTNyNKdtJWPLBd2yIiu6icjzYn0rN5Hcvr7VlDQBPo/wqcXA+ntlR56eRJ4/N0bEX30DpM7NKI7/85y+mMwiqvOZJndVTxPLxYatI4bB54+Bl+kx241vPbnWdJuVzCW2PaG24eqiTD3gXBCTbNqPJrR9rnLs5OzB3bnvSCMj6/rhu8I3lWRxXP0lypJU1Id4iYbD8pFVlRPLC5uf33vOD9jScpqdDy1hiZJ7uaQ4//SZW6N74Elf8F3UaNGtnHxwCvjgjDy82ZN9Yer5JK62iehrjqWXxZmmrRtA+0n2BfKT3863n+cgnz/05iZIcG1tUqtQb/YOnCK3EDJG68wdFR6NIkgEmRIfy4J5nE9P8uvBzN0xBVPP96G0pzpOLpNeD5IKDT6XRql1PgynbQO/9E8T357xhqTEouv8ek8nDvZrSoZ6TrsJK4uEkHcW4y7Pns6q9zc3Pt56SHOj7uvDQ8jL1nLrP+6H992xzN0xBXPbe/CRVF0kRsB+w6nJubiyiKvLnuOC5OArNG2vn5X4/pUDcMNr4sJZXgmPv8lRFh+Hq4MGv1f0WSHdFTH1c9Lx2BQz9At8ekaUE1g/isrCz/Wz246XQ6ISsryx+I1/e64g+5BEFAqxOZvSae+n4ePGXLhBFDhPaT7h52fQId7oLaobi6WtAmR2Emd2sk6A13AAAgAElEQVTM8kPnefvPEwwIq4ePu4tDeurD1dUVLhyCw0ug51NQz0bZr2bi6urK1hMZ/HUyk5m3t6G+v51bkzi7Shdei++QiiQPfN0h93ltbzdeGR7Gq1HHiDp8kQldGjmkpz5cXV3/SxjxrgsDXrO3ksloNJpH0tPTF6anp7fHBjcmDowOiNdoNI/oe1HxwObk5MSvB1I4fqmAL+/phI8tE0aqY+g8OLVZSiSZvMLk9jq2xNlJYO6Y9oybv5cvtp/mtdvbOKSnPjzcXOHP58G3gcMljFTB2Y05q07QKsiHqb2a2ttGolkfqUPFns8h4h6H3eeTIkNYfugC725MYHDbIIf1vB4PDw84shQuRsO47xyiUICpdOnSJRMYbW8PR8fiiC8IwpuCIDwjCMJ91S1XXlHJh1cSRu7oYIeEEUP4NYD+r8LpLZC4gexsx5wa0qnxlecZu89xKqPQYT2vRzi8CNKPSgkj7nYcejbCt7tTuJhXytwx7XF1pBqdQ+aCiwdseJHsrCx72+jFyUng7bHtySmu4OMtiTXm2My9dOa/QgEd7rK3jooCWPRNFgShM1AqiuLnQH9BEAz2s8irwP4JI4bo/jjUawsbZ9A0WOEKE1bw8vDWeLu7MHtNPE2aNLG3jnGKsmh06iepMnq78fa2MciZrCLWniphfKdguofWsbdOVXyDpDlVZ/6ilSbB3jYGaR/sz5QeTVi6P4VSDzsl3ZhJWOoKqXzW7R855HNfFeux9BJ1BPBv/Z8kwGB72bxSjf0TRgzh7CpVGcg/T9GGN+xtY5A6Pu68NKw1+8/msHBLrL11jLPtTagodugThyiKvLHmOK5Oou2q35hL5MNQPxy3v96Q+tc5KM8PbU0db3dmrz2BTqdsJSOrSY3B/fgyhysUcD1rYi8aX0jFIJYGtobAv+MjOUCVMUZBEB4TBCFaEIRoJ0THSBgxRJOe0OFuGqeugWy9vewcgnu6NSY82J+oc6LJ3bbtwvkDEPszYvfpULe1vW0M8uexNHYnZfPSsDDq+tqvH1y1OLvAyE9wr7gMO9+3t41B/D1dmTkyjLP5OpYdMtqj0n7otNJzX58gqX6sg3K5qJxZq/Um+6mYiBwPFQTg+hYG34miGCmKYmR9L8FxEkYMMXQuGsEVNrxotOmjvXB2Epg7tj1ZheV8vu3GiiQOgVYjVRjxC2ZLeUd72xikqFzD3PUnaB/sR2Ce4w7zARDSjfOB/WH/Ash0XNexHYNp4Sfy/qaTXC4yuwKSbYhZBGmxHKk30aGf+364OZESPeX0VEzH0sB2Cfh3QL02kGZowToBNSDjyKcerkPnwNkdcMJxK5R3DKnF3d0a89PeqhNjHYboH6VissPeYcSYifa2Mcjn206RWVjO3DHtGT3qDnvrGKXxgz9KJ+I/X3DYCy9BEJj/cD+KyzUmddu2OcXZUtf2Zn3pPOVte9sYJPZCHsujL/Cgo2To1lAsDWybgJ5Xfm4BGGx0Vl2jUUdiVWoA1A+HTa9BeZG9dQzSpjJJmhi7Jt5gcz+7UJQpVXEIHQBtxxAVFWVvI70kphfy455k7u4aQqfGAQ7reS1Rm3dKjS9T9sDR5fbWMUj8nq083LsZK6JTiUkx3DjVLmx74+pz3ygHbYj673zfuj7uti0QfxNicdsaQRBmAwXAZVEUlxpaTl/bGoflwkH4YQj0fBqGzrW3jUF+PXCe11Yd47NJHRnbKdjeOhKrpsGx32H6Pgh0zC+lKIpM+m4/pzMK+euF/gR4G0zmdTx0OunYzEuBJ6PBU38DX3tTXK5h8Cc7qeXlxrone+HiCFMozh+AH4dCr2dhyBx72xjkt4PneTXqv++1vrY1KqZh8VEniuJboih+Vl1Qg5pzxxYVFQUh3aDTFNg/32GfZ0RFRTGpawgRjfyZtyHBMRJJUvZB3K9ShZErQc0R74RWHbnIwXM5vDI87GpQc0TP64mKipLqGI78GEouw4559lbSS1RUFN7uLsy6oy0JaQUs2Zdi/E1Kc81zX/q+BDjmPs8rqeCDTSfp1qw2Yzo2NP4GlWqxS6NRh6Y4G77sAkHtYep6h01Xj7uQx9j5e3ioVzNm3WHHtGWtBr7rB6V58ORBcPM2/h47kF9ayaCP/yakthcrn+iJk9Jd25Viw0twaCE8ugMaOmaCjiiKPPDTIQ6n5PLXC/2o52fHiiQHvpXqbt65GNqNtZ+HEWauOsayQxdY/1Rv2jSQOmCod2yWY/NGo47Kpk2bpB+8A2HwG5CyG479YV8pPfzrGRFSi7u7NmbR3mROpttxGx/6HjLiYfi7VYLa1e3pIHy8JZGc4grmjmlfJag5mqc+qjgOmAlegVIiiU5vYXO78a+nIAjMGd2OCo2OeRvsOPLx73Pf5gOlXndXcLR9Hn8xn18PnmdKjyZXg5qKdSge2Hx8fJRehSz06dPnv//p/AA07AxbZkoVChyIaz1fHtYaXw8XZq8+bp9EkoJL8Nc8aDEY2oyq8lKV7Wln4i/m8/P+FKb0aEL74KpZuo7kaYgqjp61pOe/F6PhyBL7SenhWs9mgd480S+UNbGX2Jtkp1JbW2aBpgxGVO0s4Uj7XKcTmbUmnjrebjw3pJW9dW4aFA9sJSUlSq9CFmJjr6no4eQsPc8oyoQd79pPSg/XegZcqbB+MDmH1faoVLDpVdBV6m1JU2V72hGdTuT11fHU9nbn+aE3Thh3FM/quMGxwySpzuG2N6V+dw7C9Z7TB7QgpLYns9bEU6Gx8d3luX/g6DIpESywRZWXHGmf/3boPEfO5/HqiDb4e9aM7gg1AcUDm7u7g1Z1uI4WLaoe/AR3hsgH4eC30twsB+F6z0mRIUSE1GLenycpsGUiSdI2ac5fnxegdugNL9+wPe3ErwfPE3shj9duD9N74nAUz+q4wVEQpHJlZQVSvzsH4XpPD1dn5oxux5msYn7Yfc52IppyWP88BDSFvi/e8LKj7POswnLe33iS20LrML6zg2Q33yQoHtgqKx0ga88E0tL0zDEfOAs8A6S+TQ7yPON6Tycngblj2nG5uJxPt56yjURlqbRN6rSAXs/oXUTv9rQxmQVlvL/pJD2b12GcgWkRjuBpDL2OQW2leoeHl0h97xwAfZ4Dw4IY0jaIL7af5mJeqW1E9nwOl09Loy6unje87Cj7fN6fJyir1PH2uPaOVyC+hqN4YHN2dlZ6FbLg66unxI5XbRg8By7sh7jfbC+lB32eHRrVYnK3xizem8yJSzZIJNn9KeSeg5GfgIv+O3K929PGvLX+BOUaHW+PNXzicARPYxh07D8DfBtK9Q+1GttK6cGQ5xuj2iIi8ta648pLXD4D/3wkdZVoMVjvIo6wz/ckZbM69hJP9Auled2akYdQk3CA2ZMOTsd7oVE32DobSnPtbWOQl4a1xt/TldlKVyTJTpICW/idUidyB2VHYibrj6bx5IAWhN6sJw53Xxj+jtT3LvoHe9sYpFGAF08NbMnm4xnsSMxUbkWiKAV5F3cpS9dBKavU8vrqeJrU8WL6AMcYFr3ZUDywabU1o5hnYaGB2ov/TowtzZFSh+2MIc9aXm7MGBFGdEouf8SkKrPyqycOT6kDeTUY3J42oLRCy6zV8TSv683j/W58/nct9vQ0lWod246Vypj99TYUZthOSg/VeT7aJ5TQut68seY4ZZUKnRPiV8LZv2HQbPCtb3Axe+/zb3ae4Vx2MXPHtMfDtWaMaNU0FA9srq41I9OnQYNquns36ABdH4VDP8ClI7aT0qdSjeedXULo0iSAeRsSyFaiwvqxP+DcThg0S2qEWQ3Vbk+F+Xz7aVJzS3lnXDjuLtWfOOzpaSrVOv6bSKIpg62zbCelh+o83VycmDumPedzSljw9xn5V16aJ2XpNuwMkQ9Vu6g99/nZrCLm7zjDqIiG9G1V124eNzuKB7bycgdtYXEdSUlGerENnAneda9MjLXfXWh1nk5OAu+ND6ekXMucdSfkXXFxNmx6BYK7GD1xgAnbUyFOphewcNdZ7opsZFJXbHt5moNRx8AWUlr70eWQvNs2Unow5tmrRSCjIhqyYOcZUi4Xy7vy7XOgJBtGfSZN16kGe+1zUZSmnri7OjHrDgdtbnuToHhg8/LyUnoVstCxo5HyRB7+MGweXIyBg9/ZRkoPxjxbBvnyvwEtWBd3ie0JMg5NbZohpZeP+droiQNM2J4KoNOJvBZ1DD9PV14dYdqJwx6e5mKSY58XoFZjKVtVa59MZFM8Xx/ZBjdnJ2avkbGoQPJuqWVS92nQIMLo4vba58sPXWDvmcu8MjyMer52LDN2C6B4YCsqctwWMNeya9cu4wuF3wkth8K2OZBzVnkpPZjiOa1/c1oF+fD66nh5iiQnbpIq9/d9CeqZFjBM2p4ys2hvMofP5/H6yDYmV+63h6e5mOTo5gUjPoCsBNjzmfJSejDFM8jPg2cHt2TnqSw2HEu3fqUVJbDmSWnO2sCZJr3FHvs8Lb+UeX8m0CO0NpO7Nbb5+m811CLI5pJ/Eeb3kK4M718rJZc4IIfP5zJhwV7u696EuWPbW/5BZfnwdQ+plNNjO8HFMVu9nMsuZsTn/9CzeSA/PBB5684L+n0qJKyHx3dCUDt72+hFo9Uxdv4e0vLK2PJcX+r4WFHEYdNrsP9reGA9NHOcUlnXIooiDy06xL6zl9n8bF+a1DGtULhaBNlyFD8r16i2NabgHywNSSbvgpgflZXSg6menRsH8GDPZizdn8Iea2r1bZ0NRekw5iuzgpotW4PodCIv/xGHm7MT744PNyuoOWILk+sxy/H2j6Rh89XTbD4kaaqni7MTH9/ZkYKySmavsWJu2/kDUoupyIfNCmq23uerYy+yIzGLl4aFmRzUVKxDvWOzBFGEpeMg9ZDUWLOWYw4tlFZoGfnFLsoqtWx6ri9+HmZmqJ7eCr9MdPjGqz/sPsfc9Sf4+M4IJnRpZG8d+3NiDay4X+oE0O9le9sY5OsdSXy4OZGvJnfijg5m9iCrLINvekvZoNP3SXP6HJDMwjKGfvoPoYHe/P5ET5zNaJek3rFZjnrHdgWzruIEAUZ/If28appNsyTN8fR0c+aTSR3JKCxnzlozsyRLcmDN/6BeW+kEaSa2uio+l13Mh5tPMjCsnkX19m66OzaQWrS0nwA7P4D0eGWk9GCu5+N9Q4kIqcWs1fFkFZqZPb3tTals1qjPzQ5qttrnoijy0u9HKa3Q8sHECLOCmop1qHds1nDkF1gzHQa/Cb2fs7eNQT7eksiXfyXx3ZQuDG1neOLqVURRuuJP3AiP7YD64cpLWkClVsfEBXs5l13Mluf6Ud9fzTS7SkkOfN1dmqLy6F/g6pjbJimzkNu/2E3flnX5/v4upg0jJ22Hn8dDt8ekzhIOypJ9ycxec5y3xrTj/tuamv1+9Y7NchS/Y8vPd6x+ZoZYv369+W/qOFm6Ov5rHlyyTSsMSzyfGtiSdg39eDXqmGlXxkeXQ8JaKcvMwqBm0fY0k0+3niIuNZ/3JnSwOKjZwtNaLHL0qi09F808Lj0ntQGWeLao58vLw1qzLSGDn/enGH9D8WXp+WHdMBjylgWWttnnpzMKmfdnAv1b12VKjyaKr0+lKorfsXXp0kWMiYlRdB1yUFFRgZubBRl/JTmwoJfUPfrxf6S0awWx1DMxvZDRX+2mW7PaLH6wW5Uu0lXITYZv+kgZdVP/NGnOmpyeprL3TDb3LjzApMgQ3pvQweLPUdpTDqxy3DgDDiyAySug1TB5xa7DUk+dTuShxYfYe+Yya5/sRVh9A12kRRGW3went0h3oRZedCm9zys0OsZ+vYf0gjI2PdvH4jlr6h2b5ajz2K6wd+9ey97oVRvGLZDG+ze/Jq+UHiz1bF3flzdGtWPX6WwW7DRQ0khTLqWLI8C4bywOatZ4mkJucQXPL4+jWR1vZo9qa9VnKekpF1Y5DpkDQeHSXU6hDPPGqsFSTycngY/ujMDPw5Wnfj1CaYWBZ9aHF8PJ9VItSCuGx5Xe5x9uPsmJtALeGx+uTsS2E4oHNk/PG/shOSLh4VY8RwrtL/Uli/kJjq6QS0kv1nje0y2EUREN+WTrKQ4l59y4wJbXpVqYY+dLE16twKrtWQ06ncjLK49yubicL+7phJebi1Wfp5SnnFjl6OIOE3+QJjKvelzRRCdrPAN93Pl0UgSnM4uY+6eeRKdLsbDhZangc4//WWGp7D7fFJ/G97vOMaVHE9OeZ6soguKBraKiQulVyEJycrJ1HzBwNjTpBWufhgzl+k5Z4ykIAu+Ma09IgCdP/XqEnOJr9k18lFQq7LYnoc0ddvWsjgU7z7D1RAYzRrShfbC/1Z+nlKecWO1YtzWMeF+qfL/jHTmU9GKtZ5+WdXm8Xyi/HjjPqiPXdKgoyYEVU6REmAkLrS6KoNQ+P5tVxIu/HyUipBavq7Ug7Yrigc3FxboralsRGBho3Qc4u8DEn6TJscvvkyp2KIC1nr4ernw1uTM5xRU8s+wIGq1Oas649mmp79zgNx3CUx9/J2by0ZZExnRsyEO9msrymUp4yo0sjp3vh05TYNdHcGKt9Z+nBzk8Xxzamu7NajNj5TGOpeZLneujHoOCNLhrMXhbvw4l9nlJhYZpPx/G1Vlg/r2djXaVUFEWxQObTqdTehWyUFZWZv2H+AbBnYsg7/yV+W3y/+1yeLYP9uftse3ZdTqbj9YchN/uBmdXuPMn6b8yIMv2vIaUy8U8/dsRWgf58t74DrKVzJLbUwlkcRQEqa9gcCSsegIyE6z/zOuQw9PV2Yn593Ym0Medx5dGU7ztHUjaCiPeg0by5FHIvc9FUWTmqnhOZRby2d2dCK5VMx6/3MwoHtiUzrqUi8pKmcoPNbkNhr4NiX/CX/JX65DL866uITzaM4TeR55He/ksTFoK/vJV7ZBtewLF5RoeXxqDIAh8NyUSTzf5robl9FQK2Rxd3KX97O4DyyZLPcxkRC7POj7ufDulC91Kd+K990N04ZOkslkyIfc+//KvJFYduchzg1vRT+2x5hCoQ5FXCAgIkO/Duj8BXabC7k+kdhoyIpunKPIqC+ntfJwZlY+wXyfvMwG5PCs0Op74OYbTmUV8cU8nGteRdzqFrPtdIWR19GsIdy2BvAuw7F6pNJVMyOnZXnOcj13mc1DXmte1jyDn5bGcnlGHU/lk6ynGdwrmqYEtZPtcFetQk0eukJqaanwhUxEEuP1jaDlMakyauEm2j5bNc99XOB1eTPltz3I4YASPL43hZHqBPJ+NPJ46ncgrK4+y63Q274xrr8jVsKz7XSFkd2zcA8YugJTdEPWIbJmSsnlmJcJv9+Ac0JToHl/z6+Es3t+UKM9nI5/n3jPZvLLyKLeF1uG9CfINj6tYj+KBzcOjZszjCAsLk/cDnV1g4o9QvwP88SCkyjNJXRbPmEVSan/bMbgPeYNFD3bD09WZ+xYe5GyWPPMO5fB8b9NJVh25yItDWzGpqzKFpmXf7wqgiGOHO2H4e5CwDv58Xpr8bCWyeBamS4W3nV3hvj+YNiKSKT2a8M3OM3z/jzw9EOXwPHGpgMeXxtC0jjffTOmCm4tjtq+6VVF8bxQXy9wCXiEOHTok/4e6+0gVH7zrSt0ALli/Dqs9Dy+Fdc9IDVPHfw9OToTU9uLnR7ojiiL3LjzAhZwSu3t+vSOJ7/45y/23NeF/A5Qb4lFkv8uMYo49pkHv56ULne1vWR3crPbMvwg/3S6VzZq8AgKaIggCb45uxx0dGjBvQwIroi9Ytw4ZPOMv5jN54X583F346cGu+HvKk3ClIh9qEeQr6HQ6nJRqGpp3ARaPguIsuPcPKcHEQqzyjP1NqkDRfADc/dsNhXFPXCrgnu/34+/pyrLHetDQiuwuSz1FUeT9TYl8s/MMYzo25JO7OipaFV3R/S4TijqKIqx/Vgpu3Z+AYe9aPE/MKs+881e+I5fhvj+k4dJrqNDoeHjxIXYnZfPW6HZMsaCosByeR1PzuG/hAXw9XPnt0R6yP/O9FrWkluWobWuusHatMnN7AKgVAg9uAN8GUlXyc/9Y/FEWe0b/JAW1Zn3h7l/1Vntv29CPxQ91I7e4gokL9pKUafmwpCWeOp3IrDXxfLPzDJO7N1Y8qIHC+10mFHUUBBj5KfSYDge+kbpVaDUWfZTFnjnnpDu10ly4f80NQQ3AzcWJ7++PZFBYELPWHOfTracszri21PPI+VzuXXgAvysXfkoGNRXrUO/YbElhBiwZLX2Rx3wFHe5Sfp06HeyYJ03MbTFEyogzUqg5/mI+U386iFYnsuC+LvQIraO4Zlmllpf/OMrauEs83i+UGcPD1IfxtkQU4Z+PYMfb0Pp2qcKHmw26PV84JE090FXClNXQsGO1i2u0Ol6NOsbvMancf1sT3hjVziZ9zjbFp/Hs8ljq+Xrw66PdaRSgfFBT79gsR71ju8KqVauUX4lvEDy4ERp1hahHpXYiWvPm1JjlWZYvnTR2fSRVnrhnmUndB9oH+7NyWk/q+Lhz38IDLN6bbPbVsTmel/JKuevbfayNu8TLw1vz6og2NgtqNtnvVmITR0GAfi/BiA+lPnw/DIUc85I1zPIURel576KR0jH50GajQQ3AxdmJDyZ24PG+oSzZl8LUnw5WLQ0ns6dWJ/Lp1lNM++UwbRr4sXJaT5sENRXrUO/Y7IGmAja+LBVNDukO476F2s3kXUfKXqnobcEl6blJt0elk5cZFJRV8uyyWP46mcmwdkG8N74DAd7ytvvYeCyNGVHH0Gh1fDqpo1o41hFI2gZ/PAyiTmrk2WGS2cdOtZTmScf/0eXS0Pidi6UuGWay7OB5Zq89Th1vNz6cGEHvlvKWyrqYV8pLv8ex98xlJnRuxLxx7fFwtV2pLPWOzXLUO7YrrF692nYrc3GDUZ/BhB8g4wQs6Al7v5QCnhGMepbmwp8vSs8sBCfpDrH7YxadmPw8XFl4fyQzb2/D9oRMBn2yk1VHUtHpjF8MGfNMyy9l2s8xTPvlME3reLH+6T52CWo23e8WYnPHFoOl3oJB7aSLo9/ulobPjWDUUxTh+Gqps/exP6D/a9LwowVBDeDubo1Z+URPPN2cue+HA7wadZTLRcYb6Rrz1Gh1LN6bzLBP/yH2Qh4fTOjAx3dF2DSoqViHRXdsgiBMEkVxuSnL1pQ7Nrtlx+VfhPXPwenNENAM+s+AduOl4KcHg57lhXDweylAluVB10ekvlXuvrJonkwvYMbKY8ReyCM82J/nh0jlgww1LDXkmVVYzve7zrJkXzKiCE8PasljfUNxdbZPZuItnxVZ7Yq1sH8+7HgXdBqpmk7vZ6XqJfoWN+QpinB2h/Q5qQel/nBjvoSGnWTRLKvU8vGWRH7ak4ynmzOP9A5las+m+HvpT8M35KnR6tgQn84X20+TlFlE7xaBvDs+nJDa9hl6VO/YLMfswCYIwihguiiKI0xZvlWrVuKpU6cscbMp27ZtY/DgwfZZuShC0nbpmVvmcSl7ssMkaDsGGkRUafhZxVNTDil7pKvg+JVQUSQliAyaDQ0s7yptCK1OZE3sRT7ecoqLeaWEBnozvnMww9vXp3ldnyrPxa71LC7XsOt0NuuPXmLz8XS0OpGxHYN5bkgru5009Hk6KnZ3LLgkJSDF/ibd+bcaDuF3QvOB4PFft+sqnqIodY04uR7ilkFWgnRc938VOt4rFTCQmdMZhby/KZFtCRl4ujozskMDRkU0pHuz2lXutq711OlEEtIL2HgsnVVHLnIxr5Tmdb2ZMaINg9vUs2sCkxrYLMfSO7ZFoihONWXZTp06iUeOHDF7HbYmPz8ff3/r+3tZhU4HZ7ZLfdHO/CVdJbv7QVB7CGgC7r6UV1TgrimUHuxnJoCmDFw8of146PowBHdRXLNCo2NjfBpL9qUQk5ILQG1vN9o28KNhLQ88XZ0pK6+gsFLkbFYxpzOL0OpE/D1dmdC5Eff1aExoXR/FPU3BIfa7ERzGMTcZDv0Asb9AyWUQnCGwJQS2Au+6lGu0uAtayL8gHZtFGdL7giMh8iEInygVYlaYE5cKWLo/mXVxaRSVa3BzcaJVkA/NAn2o5emKprKCSpw5n1NCYnoh+aWVOAnQq0UgU3o0YXCbIIMjEbZEDWyWo0hgEwThMeAxgPr163dJS0uzWNBWHDhwgO7du9tb4z+KL0tBLmWvVDsvLwUqitFoNLj41QP/EKgfDk37SA/gTch2VIK0/FL+TswiJiWXpMwi0vJLKavUodVoCKrlRaMAL8KD/enZog5dm9a225CjIRxuv+vB4Ry1GmlI8cwOSD8GOWegOBtNZQUuHt5Sl4g6LaFxd+muzspu7JZSVqnlwLkc9iZlcyKtgPM5JeSXVlJZqcHPy53gWp60qOdDt2a16d0ykHq+jlX+Tw1sllNtYBMEYRgQcs2vToqiuNucO7aIiAgxLi7OOksbcPHiRYKDg+2tYRTVU15qgmdNcATVU27UwGY51V4+i6K4WRTFhdf8223uCjQay6oY2Jrc3Fx7K5iE6ikvNcGzJjiC6qniOCg+LlRTqke4utaMQqaqp7zUBM+a4Aiqp4rjYHZgEwRhDDBAEIShJq3AwVOp/6WmtNdRPeWlJnjWBEdQPVUcB8UrjwiCUAjI1yVQOQKBbHtLmIDqKS81wbMmOILqKTetRVGUZyLqLYb8k0luJLEmPAAVBCFa9ZQP1VM+aoIjqJ5yIwiC41e2cFBqxjihioqKioqKiaiBTUVFRUXlpsIWge07G6xDDlRPeVE95aMmOILqKTc1xdPhUDx5REVFRUVFxZaoQ5EqKioqKjcVamBTUVFRUbmpUAObioqKispNhRrYVFRUVFRuKhQLbIIghAiCsEMQhARBEI4LgvCMUusyw8lDEISDgiDEXXGaY+L7vhUEoZej/E2CILQQBCFLEIRkQRBiBUHIEQThjCAIfsbfbRuubNA8He8AACAASURBVLN+jrC99CEIwnBBEBIFQUgSBGGGvX2MYc/taeX3xm7HgKN8X1XsgCiKivwDGgCdr/zsC5wC2iq1PhOdBMDnys+uwAGghwnviwWcHelvAlYBfa78/DcQbs9ta2CbBTvK9rrOzRk4A4QCbkCcI3g56va08ntjt2PAkb6v6j/b/lOspJYoimlA2pWfCwVBSACCBUGoAPYBxUAe0BjIBTqJoliglM8VDxEouvK/rlf+iYIgtDDkhPTFPCWKovbK33PD3wSckNtVEIRtQH09L80URXEN0A6Iv/K7MGxcj9PEbXYRuAjKby8z6QYkiaJ4FkAQhGXAGOzo5cjb08rvjd2OAUc8B6nYBps8YxMEoSnSwX5AFMUkYDcwRRTFjsBRYKytDihBEJwFQYgFMoGtoigacxoBbKrub1LCUxTFwaIottfzb40gCJ6AhyiKuYIghACXRVGsUMKjGj+ztpnS28tMgoEL1/x/6pXf2Q1H355yfG/seQw40jlIRXmsCmyCIGwTBCFez78x1yzjA6wEnr3mwFHsbsOYkyiK2isHcyOgmyAI7Y04DePGL6i+v8mWtAUSrvzc5pqfbY1J28wBttf16GsS6AiVChx2e1r7vbHnMWDrc5CK/bFqKFIUxcHVvS4IgivSAfWLKIpRV36n6N2GMadrlssTBOFvYLggCGf0OQmC4AXUEkXxUnV/kx249ktZCnQWBCFMFMWTthIwtB+v32YOsr2uJxUIueb/GwGXDCxrE2rK9rTke2NPZ3ucg1Tsj5JZkQLwA5AgiuIn17xkt7sNQRDqCoJQ68rPnsBg4GQ1TgOAHde839DfZFNEUVwiiuILV37eJYpiqC2D2hWMbjNH2V56OAS0FAShmSAIbsDdwFo7Ozns9rTme2PPY8ARz0EqtkHJZ2y9gCnAQEFKSY8VBOF2DNxtKOhxLQ2AHYIgHEU6uW0VRXF9NU7XPycw9DfdipiyzRxye4miqAGeBDYjndRWiKJ43L5WDr09rfne2PMYcMRzkIoNUIsgV4MgCIeB7qIoVtrbpaagbjN5qYnbsyY6q9xc2CKwqZFTxWEZPnw4mzbdkPSqouII6EtyUjEBxdP9o6IcJV+gelRPeakpnklJSfZWMEpN2Zaqp4qjoN6xqdyULF++nEmTJhldLjIykujoaBsYqaiYjXrHZiGK37HVlGEe1VNe7Om5bt06Fi1aZNKyBQWOMK2uetR9Li81xVPFchS/Y9N+O0B09vQHv2Co2xqa9IQGHcFZsWpe1SKKImezi9l/9jIn0wo5n1NCcbmGSo2WWt7uNKzlSVh9X7o1q01YfV+kjGHHobi4GG9vb3trGMXenlOnTq0a3CpLIWUvXIyB7FNQmA7aCiLn7if6g7FQOxQadoamvcGrtt28C8oq2XfmMsdS8zmXXUxWUTkVlRrcXV0I8vOgaaA3nRvXomvT2ni72+c7ZAh773NTcThPUYSsREjeBZkJkJcC5YXw8BbHOvnUIBT/ZhRUQIBzESRthdifpV96BkD7idBlKtRvX+375SKzsIxlBy+w6shFzmUXA+Dr7kLjOl74e7pSVlxIDgKxF/L47eB5ABr4ezCuUzD3dGtMSG0vm3gaIzY2ll69etlbwygO4SmKcO4fiPkJTm2GyhJAoMC5FmezSinXCpRXVEDGCTi5AXSVIDhLwa3LAxA2ClzcFNes1OrYnpDBrwcvsDcpG41OxNlJoEltLwJ93dGUleDm4seRC7msP3oJnQjuLk4MaF2Pe7o3pm/LQIe4AHOIfW4CDuOZfxEOL4a43yBPOufg7g+1m4GHv33dajiK37FlZGSIQUFB0v8UZ0snmoR1kLgBNGXQcigMfB0aRCiy/szCMr7YfpoV0alUanX0aFaHkR0a0KtFIE3reF09IWRkZBAUFIQoilzKL2PP6Ww2xqex81QWgiAwJqIhzw5uReM69g1w/3o6Onb1FEU+mT6C5yOKIP0YeNaGduOg9e0Q0rXKSSMiIoK4uDioLIO0ODi1CY5HQW6yNMrQ72XoeC84u8quqdWJRB1O5Yu/TnMhp5SG/h6M6tiQQWFBdGjkj4erM1B1WxaVa4g9n8e2hAzWH00ju6iclvV8eHFYa4a2DbJrgFOPTRPJvwh/vwtxy0CngdD+0G4shA6AWo3hv31o/6uVGorigS02Nlbs2LHjjS+U5sKhhbBvvvRz5ykwZC541pJlvVqdyI+7z/HZtlOUa3TcGRnCY31DaRaofwgiNjYWfZ5p+aX8sOscvxw4j1YUebxvKP8b0OLqScfWGPJ0NOzmmXMO/nwBzmyHgKbQ9yVpdMDVQ+/ibdu25cSJ6wrN63TSCMM/H0LqIajXFkZ9DiHdZNOMu5DHzNXHiL9YQPtgP54a2JLBbYJwdrrxXGZoW1ZodKw/eomvdiRxNquY7s1q8874cJrX9ZHN0xzUY9MI2krY8xn88zGIOmlU4LYnIaCJoXeogc1CFA9sZ86cEZs3b254gdI82PkBHPgGfIJgzFfQYpBV60y5XMyzy2M5cj6PQWH1mDmyDaFGvuxnzpyhOs/0/DLe3ZjAmthLtAry4dNJHWnX0PbDBcY8HQWbe4qiNOS46TVwcuHntGbc99lfRu+0wsPDOXbsmOHPPPknbHwFClKh51MwcLZVw5OVWh1fbj/NVzuSCPRxZ+bINoyOaFjtnZaxbanR6lgefYH3N56krFLHKyPCeKhXU5vfvanHZjVknoSoRyH9KLQZDUPnShde1aMGNguxSduaavGsBcPfgUe2gYcf/DwBdrwDOq1FH7cpPp07vtjNmcwiPr+7IwsfiDQa1Eyhvr8Hn9/diZ+mdiWvpJJx8/ey4tAF429UUZ7y/7d33nFVVn8cf1+GgANxoOLEzXIg7pFabk3NypFppS21XVaW5Wj8bFhqVmZZWrnNHIgL916oCIKKiICigsje957fH0+SyAXueJ57L/a8Xy9eL+U+48M55z7f55zzHRmw9hkIfBMadmZ780/4cFMsO3btKfvc0tBowHsITDkG7SfA4e9gSV9IMa3fb6XnMGbxURbsjuIx//oEv92TYW3rmW2AHOztGNupEcFv9+ShFu58Enie55edJC1HTfxhE4SuhZ97Q9p1GPkHjPrDEKOmYgaKG7b09HTDDqzXDl7YA23GwL4vYPU4yMs06l4/74/m5T9P0aRWZba81sOoh4ahOnt71WLbGw/R0bM67/4VyoyNYWh1lgvVM7g9rYzFdKbEwq/9pX3bPrPg6fX0f/I5rl69Sr9+/co8Xas14AXKqTIM+RZG/Qm3L0sPqVjjSoqFXUvl0e8OEn49jfmj2zJ3ZBtcnQ3btzO0LWtVcebn8QHMfNSHfRcTeez7Q8QkGfcdMgd1bN6HTgfBM2H985In+MsHwWeoZe79H0dxw+bh4WH4wRUqwvAfYOCXcHErLB0MWcllnqbTCT4NPM9nQREMbuXB6hc7G+3FaIzO6pUqsGxCR57v3phlR67y8p+nyMk3bYZpLEa1pxWxiM6b4bCknzSDGrsWur8BdsYNaUdHI5xCvB+FF3aBUxX4fRhc3m3QaSdikhmz+CgOdnb8Nakrw9oaV9PUmLbUaDQ8260xfz7fieTMPB7/8TARCZaJ1VPH5j1o8yWDdvBbCHgOntkEruWjfR4EFDdsRqcs0mig00sweoXkhr1sKGTeLvHwvAIdb6w+wy8Hr/BsV0++G+NvkmOHsTrt7TRMH+LDrKG+BEfc5MU/LGPcykMKKLCAzmsh8OtA6d8TtkEzg8rwFSM3N9e4E9xbwoQdUKMprBgl7cGVwr6LiYxbcgz3Kk6sfbkLPnVdjdZoSlt2blKDdZO64mhvx5ifjxIan2L0NYxFHZv/oM2HdRMg7C/oM1Oa7SvgVatSMoo7j2RmZgqTgyGjdsGqp6BGMxi/CSrVKPKxVid4dWUIQedu8N4AL17u2cTk/QpzgjbXnIjjvfWhPNTcnZ/GBSjqMWlzwaUloKjOG2HSbN7JFZ7bIrlIm0i7du0ICQkx/sSsZFj+BFw/AyMWQ6snih2yLewGr64MoXmtKvw+sSM1KzuZpNGctoy9ncVTvxwlNSufpRM6ENBIueBzdWzyj1F7Tloa7/8/6DLZnKupziMmoviM7cCBA6af3OwRGLMSbkfBskeLzNyEEHyw/hxB524wfbA3k3o1NWsT3hydIzs0YM6IVuy7mMikP0+RW6DczM2s9rQgiulMvCgtAzpWlJZ3zDBqABkZGaadWLE6jN8oZdJZ/0KxmdvBS0m8ujIEv3pVWfliZ5ONGpjXlg1rVGTNS12oWcWJcUuOKzpz+8+PTW0+rH1WMmoD5phr1FTMoHwkQb68B1aOhjqt4JnNCAdnPtsSwS8Hr/Daw814q19LGWSaz6rjsby//hyDWtVh4Zh22OmJSVIxg+Qr8NtAyWP2uSCo2dzsS5qdBDkvU3rpuhkurSo07ETYtVRG/XSE+tUqsublLlR1sf4y1K20HEb8eJicfC3rJ3WzeqKBBw4hYNMrcPpPGPAFdH5ZjquqDxATKR9la5r2hhE/Q/xJWP8iP+69VLin9mbfFuZfH3l0ju7YkA8HeRN07gZf7bggg6rilJeSG7LrzE6B5U9K2WrGb5TFqAGkpJg5g6lQCZ5aI2UpWTmK65fO8uxvJ3CrKDkYyWHU5GjLWq7OLJvQkQKd4JnfjpOcmWf2Ne/nPzs2AQ58LRm1h96Vy6ipmEH5mLHd5fB3sGM6iwqGEOH3Dt+ObGtzsyIhBB9uCGPFsVjmjGjF6I7mLZWpANoCWPEkXDkgGTVP+fL8yVa2JvkKul/6cisbnuYzFk0aTLNa1skAUhonY5IZ+8sxfOq6suL5zrhUsE4GnQeKc+vgr4nQaqS03ypfYLxtPdzKEeVjxvYPFxo/wyrRl5cdAvm6cYisRk0unRqNhllDfenRvCbTN4RxKCpJluve5T/5Vrz9A8m1fsg3sho1kGHG9g9aN09mVJmBqy6NDe6LaVZdvuTJcrZle8/qzB/tz5m4FN77KxQ5X2z/k2Pz6hHYMAkadZOyJtlAMmqVcjRju5OZx9DvD1KQl8/e+j/hFLsPntsqa/4+OUnLyefJH4+QkJrNltd62Ex1gHLHiSWw5S0pp17/z2S/vFwzti+2RfLj3sus6HKNrqenQscXYdBXMihUhu/3RPHV9gvMeNSH57o1trac8kn6DVjUQ4prfD5YiXJHqpU0EcVnbIGBgWZfo0CrY8qKEG6m5vL9+I44jVoi7WmsfVaqGCADcui8F1dnRxaPD0AAU1aEyOYpKbdOpZBFZ/wpKU9j8/7Qd7b519NDamqq2dcIOpfAj3sv81SnhnQd9qJkhI8vhjMrZVCoTJ9P6tmUPt61+WxLBCdiyk6CYAj/qbGpLZBi1fIyYPRyq9bwUymO4jO2vLw8UaGCecsy3+y8yIJdl/jyidaMbN9A+uX1M1LWiUZd4em/wM68vYK8vDzM1amP7eE3eOmPU4zr3IhPhptfe04pnXJjts7sO7DoIenfL++XavgpQEBAAKdOnTL5/Es30xn2/SFa1qnCqhc74+RgLz30/hguVQaYuMPskkxK9Xlqdj7DFh4kM0/Llle7U8tVfwUEQ/nPjE2AnR/DofmSU1vrkfIIK446YzMRxWdshw8fNu/8y0l8t/sSI9rV+9eoAdRtC4O+hOg9Um5JMzFXZ0n0963DCz0a88fRq2w6e93s6ymlU27M0ikEbHwF0hPgyaWKGTUwI44NyMnX8sqK01SsYM+ipwMkowZSdfgnfoOKNWDNeKkashko1edVXRxZNC6AjJwCXll52uycp/+JsQlSzOKh+VJibOWMmooZKG7YWrVqZfK5tzNyeXP1GRrXqMQnw/TMdto9A22eksreRO8zQ6V5Osvi3QFetG9Ujff/CiU60fQHKSirU07M0nlsEUQGQt9ZUD9APlF6cHFxMfnc/wVFcOFmOnNHtqX2/bOdyu7w+BIpSXPQu2ZpVLLPveq48ulwP45fSWbRvstmXes/MTZT4uDvSVDXXwrCVrFJFDdsMTExJp0nhOCdtWe5k5nPd0/5U8nJofhBGg0Mniul3NowSVq+srBOQ3C0t+O7p/yp4GDHm6vPkK/VmXwtJXXKick6r5+BHR9J1a47K5+5IS/PtHiuXRE3WXbkKs93b0zPFu76D2rUBXq8A2dXSHkDTUTpPh/Rrh6PtqnLtzsvcibOdC/RB35s6nTSc0ZopRm5g+nZZFSURXHDVrNmTZPOW3Y4hj0XEvlwsHfpBT0rVJRiRzJuwpZ3TFRpuk5D8ajqwmfDW3E2PpWFu01Pwqq0TrkwSWd+Dvz9ElSqCcO+t4jrtIODnhemMriVlsPUdaH4eLgydUAZWW96vgf1O8DmN6XZmwko3ecajYZPh/tR29WZN1adJjO3wKTrPNBjE+DIQog5AAO/gOqqJ6kto7hhy8nJMfqc6MQM5myLpHdLd8Z3KbFs+r/Uawc934ewdVJRPxMwRaexDG7twQj/eizcE8XpWNNml5bQKQcm6dz9CSRGSvFAFvIy0+mMmz0LIXh77Vmy8gpYMMb/3321krB3kBwMhA7Wv2RSAV1L9HlVF0e+GdmGq8lZzNocbtI1HuixeeOcND69hkDbsfKLUpEVxQ1bfr5xVXy1OunB4eRgz5zHWxue2Lj7m1C/I2x526QKx8bqNJWZw3yp4+rMW2ukh6OxWEqnuRitM+YgHPke2k80uQSNKRjrFbzyeBwHLiXx4WAfwzOLVG8Mg7+G2MNw9EejNVqqzzs1qcHkXk1ZczKenedvGn3+Azs283PgrxckJ6ZHF6hB2OUAxQ1btWrGebQt3h/N6dgUZg/zLb4hXxr2DjDiJ2n9e9OrkmedgjpNxdXZka+fbEPM7Uw+D4ow+nxL6TQXo3TmpEl7F9U8od8nimnShzFLkfF3svhsy3m6Nq3B052MTJXWehS0HCy99SddMupUS/b564+0wKtOFT74+xwpWcbtPz6QYxNg7/8gMUJaHr+vdJaKbaK4YYuPjzf42As30vl250UG+tVhaJu6xt+sehOpsF/0HikhqREYo9NcujStwXNdG/Pn0ViORpdcRFUfltRpDkbp3PkRpMbDYz9JSYUtiKHOI0IIpq0/B8AXxqwk3EWjkVKCOTjDxilGLUlass8rONjx9ZNtSM7MY3bgeaPOfSDH5rUQOLwA2o2H5n2VE6UiK4obNi8vL4OOK9DqeGftWao4O/DpcD/Ta6u1nyjlbdv+IaQlyK5TLt7p34KG1Svy/l+hZOcZ/pCztE5TMVjnlf1waqmUraNhJ0U16cPZ2bBVgbtLkNMGeZueHq1KHRj4JcQdk0IaDMTSfe5XryqTezVlfcg1dkcaviT5wI3NgjwpnrJybej3qbKiVGRFccN24sQJg45bejiGc9dSmTnUlxpmFGXEzg6GfgfaXAh80+AlSUN1ykXFCg7MGdGKmNtZzAu+aPB5ltZpKgbpzMuCTa9BtcbQa5ryovSQmZlZ5jHXU7L5PCiCrk1rMNbYJcj7aT0SWgyEXbPhtmFxY9bo81cebkaL2pWZtv4cqdmG7Uk9UGMT4OA3cCschswD51I8s1VsDsUN28MPP1zmMXHJWczdcZGHvWoxpLWH+Tet0RQeng4XtxocP2SITrnp2qwmYzo24OcD0Zw1MH7IGjpNwSCde/8Hd67A0AVS2IYVcHV1LfOY2ZvPU6DTmbYEeT8aDQz5FuydYPPrBr14WaPPnRzs+frJNiRl5DFnq2F7wQ/U2LwZDvu/hlZPQssByotSkRXFDdumTZtK/VwIwccbw9BoYPYwX/MfHHfpPBnqBcDWdyGr7CSvZelUimmDvKlVxZl314UaFLhtLZ3GUqbO66eluKB246HxQ5YRpYeyytbsvXCLbeE3ePXh5vJVaHD1gL4zpZios6vKPNxafd66vhsTunmy8ngcJw1IlPzAjE2dTlpJcK4qVcNWKXdYvWxNYOh1XllxmumDvXm+RxN573wjDH56CPzHSsuTNsrO8zd54feTvD/Qi5d7NrW2HOXRFsDPvSAjEaYcAxc3q0kprWxNTr6W/vP2Y6/RsPWNHmXHrBmDTge/9ofky/DKSZvNDp+ZW0Dfb/ZRxdmRwNe642iv+Luw9Tm1DDa/Bo8thjajrKlEjSswEcVH6d9//13iZ6lZ+czcdJ5W9arybFdP+W9exw+6TIaQ3yH2aKmHlqZTafr61KavT23mB18i/k5WqcdaU6cxlKrzxC9SwOugL61q1KD0GdtP+6K5ejuL2cP85DVqIO0FPzoPclIlr9BSsGafV3JyYNYwPy7cTOfnA9GlHvtAjM2sZAieKTmgqQmOyy1WnbFNWx/KmpPxbJzSDb96Cm3O5mbA953A2RVe2g/2jsrcx0yupWTTZ+4+ujWryS/PtLe2HOVIvwkL20tppp7+y+rBriXN2GJvZ9H323308anN90+1U07AzhlwaB48GyR7dXA5efH3k+y/lMjON3s+2EVzN78OIX/Aywehto+11agzNhNRfMa2YcMGvb8/fiWZlcfjmNDNUzmjBuBUWapkfOs8HP2hxMNK0mkp6rm58Eaf5gRH3GRH+I0Sj7O2TkMpUefOj6EgR+oTG8jgoG/GJoRg5uZwHOw0fDRY4Ydbz/fAraHkwVugP6bOFvp85lBf7DUaPtoYVmK2FlvQaQgl6ow/JS1Ddp5kC0ZNxQwUn7HpdDphZ1fUfuYV6Bi04ADZeVp2vvUQFSsYn4jWaFY+JQVuTzkmPUiK6+R+nZYmX6tjyIKDpOfks/OtnnorGtiCTkPQqzPmECwdJGW8f6T05TdLoW/GtiP8Bi/+cYoPB3nzwkMy7/vq49JOWP6E5Mn70NRiH9tKn/9yIJpPt0Tw/VPtGKzHe9lWdJaFXp06Lfz8MKTfgFdOSCs81sf6b37lFMVH4e7du4v97rdDV4i6lcGsob6WMWogZeQG2Pqe3o/16bQ0jvZ2fPaYH9dTc1iwS3/aJVvQaQjFdGrzIegdqNoAerxtHVF6SEtLK/L/7Dwtszafp0XtyjzbzdMyIpr3BZ/hsO8rvbFtttLnz3b1xMfDlVmbw0nLKR7bZis6y0KvzlNLIeEM9P/MVoyaihkobtg6dOhQ5P8JqdnM33WJR7xq0centtK3/xe3BlIQ8IUgqQLufdyv01q096zOqPYN+OXgFSJvpBX73FZ0lkUxncd/lpaDB8yxWsyaPipVKprCa+GeS1xLyeaTYX6W9QAcMEeq7xU0tVhsm630uYO9HZ+PaEViRi5zt18o9rmt6CyLYjozk6SAec8e4Pe4dUSpyIri39zIyMgi//9sSwQFOsGMR32VvnVxOk+CWr5SReO8ohkn7tdpTd4f6IWrswPT/w5Dpyv6kLMlnaVRRGdaAuz5HJr1Ba/B1hOlh3tLmFxOzGDx/mhG+NejUxMLJ7t19YDeH8LlXXB+Y5GPbKnP2zZw4+lOjfjj6FXCrqUW+cyWdJZGMZ3BMyAvQypabAP7virmo7hhq1+/fuG/D19OIjA0gUk9m9KwhhXe2u0dpUS0afGw/6siH92r09pUq1SBaYO8OXn1Dn+FFE3Yaks6S6OIzp0fgTZPWg62sQdHhQoVAMlhZMbGcJwd7Zk2yNs6Yjo8D3VawbZpkjfvP9han7/TryXVKlZg+oaiL162prMkiuiMPSYlTO8yBdzLKBqrUm5Q3LDduSMV1MzX6vh4YzgNqrswqZcVg5AbdpYKBR5eCIn/5mi8q9NWeKJdfQIaVWPO1khSs/7dz7A1nSVRqPPKATi3Frq/IaU6szEKCqSaeFvOJXAwKol3+rXEvYoZuUrNwd4BBn8D6ddh378ZL2ytz6tWdOSDQd6ciUthzcl/ax/ams6SKNSpLYCgt8G1Hjz0rnVFqciK4obN0VGKG7vrMDJjiC/OjjIHuxpLn1nSPk/Q24X7GXd12gp2dhpmD/PlTlYec3f+u59hazpLwtHR8V+HEbeGUiFYG0Sj0ZCRW8AngefxrevK050NqNiuJA06gv/TUmjKLSlHoy32+Yh29ejoWZ052yJJzpTCFGxRpz4KdZ78VUoU0P9zKSxI5YFBccPm7OzMzbQc5gdbwWGkJCq7wyMfSyVTwtcDhpcvsSS+dasyrnMj/rxnP8MWderD2dlZKs2SGCmVanF0sbYkvdjZ2TE/+CI303L5ZLgf9nY2sFTaZzY4VYEt74AQNtnnGo2G2cN9Sc8p4Mtt0p6VLerUh7OzM2Tcgt2fQtOHwWeYtSWpyIzihi0pKYnPtkSQby2HkZIIeA482kp123LTSUpKsrYivbz1z37GRxul/Qxb1Xk/qXERsHcOtBgALQdaW06JZOXm8+uhGEZ3aEC7hjZSAbpSDXhkBlw9CKFrbLbPveq4MqGbJ6tOxBESe8dmdd5PUlKSlCggPwsG2kaiABV5UdywJdpVY9PZ69ZzGCkJO/t/9jNuwN45eHp6WluRXqq6ODJtkDenY1NYdyreZnXeT8urf0hLkQPmWPzeM2fOZP78+fz5Z+lV1IUQ3M4WuDo78N4AGyuS2e4ZqTrFjuk09rDNBMkAr/dpQW1XJz7aEEb9hlZexjWQZo634OxK6PYa1GxmbTkqCqC4YZu9JdL6DiMlUT8AAp6Boz8SfSTQ2mpKZIR/Pdo3qsacbZEcORVqbTllE70Pp0uB0OMtqN7YorcOCQnBxcWF119/nb1795KXpz9NFcDfp6+Rla/lvQFeVKtUwYIqDcDOTnI/z0wka8uH1lZTIpWdHPhoiA/h19NYEHTa2nLKRpuP/fb3/kkU8I611ZRIboHW2hLKNYobtusZwjYcRkrikRngXJWAmysNrrZtaSRHEj9SsvI4nG67b++AlO8waCrCzRO6vW7x22/dupVu3aRkws2aNeP48eN6j0vNzufzoAhcHO0Z2b6BJSUaTl1/6DCRete3QsJZa6spkcGtPOjRvCYbo3XcE3mLswAAIABJREFUSs8p+wRrcnwxlTOv2lyigPuZurYcvMDaMIrniqzu6Sua1LRNx4FCsm5DSixUawQutms4rqdkczsjj2a1KuNSwUZfFDJuQdo1ErVVcG9g+WWe2NhYatWqhbOzM4mJiTg4OFCtWtG9s8TERG5m5CMcK1GQeAV//7YW12kwOi3aG2HYV3CBmi2sraZEcgt0XLyRjlslRxpUs1GDoc2HWxFk6+xxqWdD+/33kZlbQHRSJnk3osKFEH7W1lMuEUIo+hMQECBsHq1WhL5WS4gvmwqRdcfaakokJStPeL6xUgxbeFBotTpryylOSrwQn3oIsWK0sFa/T548WURGRgohhFi0aJFYu3ZtsWPOxaeIxu8Hio83nBMVK1a0tESj+XhocyFmuApxcqm1pZSK18ipotF7geJwVJK1pehn3UQhZruLoT1aWVtJieQVaEXfb/aKrv/bJYCTQuHn84P6o/hSZGmFHG0GOzumH3GWZm57Pre2mhKp6uKI5uwGzsSlsPZUXNknWJodH4LQwoD/Wa3f69atW+idl5ycjIdH0Sz0Op1g+oYwqldy4q1+LdFqbX8vY3m4Fhp2lQpgZiVbW06J5J3ZTP1qLny8MYx8rc7acopyZf8/iQLeJPx66cV8rcnvR65y8WYGHz+qls0xB8UNm5ubdSskG8o1nTu0nwgnfrbp/YxqaVF08JQykqRklewYYXEu74Hwv6XM/dU8rdbvAwYM4PDhwwBERUXRsWPHIp+vPhnHmbgUPhjkRVUXR+ztbXRJ9x7c3KrB4K+latvBM60tp0SqVanEzEd9uXQrg18PXrG2nH/R5ksxgW6NoPsbNvtMupWew7ydF+nZwp1+thDvW45R3LC1b18+qkG3b98eHv5Q2mPb8g7obOyN8x86tG/P7GF+pOUU8JWeDOtW4R+HEao1hq6vAdbr94CAALKzs5k3bx69evUqkg0jOTOPL7ZF0rFxdR7zrwdAxYo2uh90D+3bt4favlIS75DfIe6EtSXppX379vTxqU0f71rMC77E9ZRsa0uSOPoDJF2Qits6utjsM2lOUCS5BTpmDvVFI8XWLba2pvKK4s4jgG26GpbEmRWwYRIMXQjtxllbTYnM2hzO0sMxbJzSjdb1rfwGevBbaSYxdp1UW8xGef+vUNaeiifotR60rFMF0F9o1GbJTYeFHaCSO7y4V4rFtEHikrPo++0+eresxY9PB1hXTOo1qc2a9IQxK62rpRROxCTz5KIjTOndlKn9C2Mq1chxE1F8xrZt2zalbyELhTrbjIGGXaRSFja4n3FX55t9W1CjkhQYe39pG4uSGg/7vgSvIUWMmq31e0jsHVadiGNCN89CowbFC43aIoVt6VRFymt4IxROLLGuKD3c1dmgekVe6d2MrWE32HvhlnVFbf+gcN/3LrY2Ngv+SRBft6ozU3qrAeNyoLhh69Gjh9K3kIVCnRoNDPoaslOk4oM2xl2drs6OfDjYi7Pxqaw+aUVHkm3vS/F//Ys63dhSv2t1go82hFHb1YnX+xR1ma9c2faT3xZpS9/HoEkvKc9hhpWNxn3cq/OFh5rQpGYlZmwKJyffSg46l3fD+Q1SIHY1z8Jf29LYBFh+LJaIhDSmD/GhYgUHa8t5IFDcsJ05c0bpW8hCEZ11/KDTS1K5+GunrKZJH/fqHN5WyrD+xbZI7mRawZHk4naI2Aw935ViAO/Blvr9z6NXCb+exkdDfKjsVPTBkZVlux5ydynSlndfvPKzYMdH1hOlh3t1OjnYM2uYL1dvZ/HTvmjLiynIlfZ9qzeBrq8W+ciWxuat9By+3nGB7s1qMtCvjrXlPDAobtiaNSsfU+tiOntNg8q1YMvboLMdl/B7dRbJsG5pR5K8LKkkjbsXdHml2Me20u/3PjgGt/Io9rmTk5VqrxlBsbas2VzKcxi6CmIOWkeUHu7X2aO5O4Nbe/D93iiu3s4s4SyFODgPbkdJLwGORasO2MrYBPg0MILcfB2zhxU6jKjIgGKGTaPRNNBoNHu6dOmCr68v8+fPV+pWBpOTk0PHjh1p06YNvr6+zJgxo/CzhISEogc7u0K/z+D6aZa/3Y9Dhw4RFxdH79698fb2ttrflJCQQFRUFO7u7nh6ejJ6wENknQli5bEYDkVes5yQA19L2VoGzwWH4nkWp0yZwr59+6zeXp8ERpBbUPzBsW3bNlq2bElERARz5lg+UbMxJCQk8NJLLxVpz4A3V5Jm5yZ58Grzy76IGZT2vblf57289NJL9KmRSn5uDr3f/hEfS42B25fhwFwymwyk9wufFht/xb7rVuLApUQ2nb3O5N5NaeJu+0vi5QqlIr8BD6BdVFSUSEtLE82bNxfh4eGlRt0rjU6nE+np6UIIIfLy8kTHjh3FkSNHhBBCREVF6TtBiN8Gi5RpbqIg9Ya4fv26OHXqlBBCWO1vuqtz+PDhYv/+/UIIIXo83Fe0nREkHv3ugCiwREaSW5FCzKohxPqXSjzE29tbxMfHW7W99kTeFI3eCxTzgy8W+X1BQYFo0qSJuHz5svD19RWtW7e2+tgsjaioKNGmTZti7flSrwZSRpKD8xW9f2nfm/t13stdzR+v2CcavRco/j4RrfwY0OmEWPqoEJ83EDeizuodf3q/6xYmO69A9Pxyt+j11R6RnVdQ0mFWz+BRXn8Um7EJIRKEECEAVapUwdvbm2vXrhWZbbRt25bq1avTtGlTi3inaTSaQmeB/Px88vPz0Wg0REVF0aFDh+Ka0tO57DWZSo4C+z2z8fDwoF27dtz/NylBnz598PPzK/azc+dOAMLDw/Hzk9LIXQwPZfoQH0LjU1l1IlYRPYUIAVveRuvggvfr6/T2Y0REBJ6entSrV89i7XU/2XlaPtoYRlP3SrzUs0mRz44fP06zZs1o0qQJGo2G0aNHs3HjRovoKonSvhdRUVG0aNGiWHsmuPqTWC1AqnuXqly7lva9uVdzQEBAkTFwV/P0kd1pWbsKXwVfoYVPK2XHwLm1cGUf9PmY2k1b6x1/MTExVnsG3eWHvZeJuZ3FJ8P8bDdBfHlGact5+vRpceXKFdGgQQORmpoqhCg62+jZs6cIDQ3V97aiCAUFBaJNmzaiUqVK4t133y38fe/evfVqmjt3rjj79TDpzfjq0cLj7/+bLMXp06dFVlaWaNCggRBCiNjYWOHj4yN0Op0YueiwaD1zu7idkaucgDMrpbY48WuJ/Th37lwxY8aMIqdZur3mbI0Qjd4LFEcvF89buHbtWjFx4kQhhDSz/P3338WUKVMsoqs0SmrPt956SyxZsqTIsXfbMy32nBCf1BJi9XhFtZX0vblXc0BAQJExcK/mY9G3RaP3AkXDIa8oNwaykqV8r4t7C6EtOgu6d/ydPn3aqs+gqFvpovkHQeL1lSFlHWr1mU95/TFrxqbRaII1Gk2Ynp/CWuuurq48/vjjzJs3D1dXV6DobCMyMpKWLVuaI6MIJc107r6R29vbc+bMGeLj4zl+/DhhYWEAXL16Va+m7du34/7EV+BaD4LeBm0BGRkZxf4mS+Hh4cH58+fx9vYGICIiAm9vbzQaDZ8M9yMzt4DPtkQoc/OsZKnieP0O0O6ZEvtx+/btPPbYY4WnWbq9Im+k8fP+aEa2r0+nJjWKfS7Ev3F/dzOT2MLGfUntGRISwoABAwqPu7c9qzTwk9KYnd8AUbsU01bS9+ZezbGxsUXGwL2afdwr4HT9NA5+/bmVo9BCUfAsaYwOmVckeP3+8efh4aHoM6g0hJBCT5wc7fhwsJoPUinMCpoQQvQp7XONRuPYsWNHxo4dy4gRIwDIzs4mJyeHatWqERcXR40aNahQQb4ij8HBwQYd5+bmRq9evdi2bRtNmzYlIyOjmKasrCxSUlLwaNRcitNa+wzaY4t5fNbGIn+TJYmKiuLy5cuFX0oXFxdCQkKIjIzEy8uLFx9qwg97LzPcvy49mrvLe/PgGZCdDIP/Jjs3V28/3m2zjIwMQFq6evzxxy3WXjqd4IP153B1cWTaQG+9x9SvX5+4OCn2Lzc3l/j4eOrWrau4ttIo6XuRlZXFzZs3C/Xpbc+ur0kVoYOmwuQj4KCcp+f935t7NVeqVKnIGLhf87i+g1iT4cjHG8NY/nwneV8m4o7Dqd8kD12P1oW/1tde4eHhij6DSmPDmWscvnybT4f74V7F9j1yyytKekVqgCXt27fnrbfeKvy9vtmGpUhMTCzMOp+dnU1wcDBeXl6cP3+eVq1aFdO0Z88eevfuLZ3sMwzRpDe52z6ik0+jIn+TJWnbti3jx49n7ty5gBRsGh0djZeXlIbntUea07hmJT74+xxZeQXy3Th6r5SnsOur4NG6xH6822Zt27ZFCMHEiRPx9va2WHutPBFLSGwK0wd7l1gVu0OHDly6dIkrV67g4uLCqlWrGDp0qEX0lURp7Tlw4ECAktvT0Vlya0++DIcWyK6ttO/NvZrbtGlTqPnu9+ZezdPfeZ2p/Vty+PJtNofK6JlYkAeb35BWVXpNK/x1Se1VoUIFqzyDbmfk8mlgBG0buPFUx4YWued/FSXj2LoB44KCgmjbti1t27YlKCioyBLAvbMNS5CQkEDv3r1p3bo1HTp0oG/fvgwZMoTw8HCqVq1aTNPWrVv/XU7RaDhVZwwabT4PZ22ibds2hX+TJTlw4ECpnzs72jNnRCvikrP5ZsdFeW6alwmbX4fqTQsfHCX14902O3DgAIcOHeKPP/5g9+7dRcaAUtxMy2HO1ki6Nq1RmORYHw4ODixcuJD+/fsTFhbGyJEj8fW1buHJ0tqzdm0p03up7dnsEfAZJoVhJMubWb+07829mo8dO1bse3O/5q8nPUbDyvBp4HnSc2QKUzj4DdwKl0JPnP51my+pvTZs2GCVZ9CszedJy8nni8dbY2dn/aXvBxoLbOSVW/z9/UVeXl7RXx5aIDlPnF1jHVEGMm19qGj8fqA4EytD4dSt06S/+crBMg/V22YWQKfTiQm/HRctpweJ6MQMg8+z9UK4RrVnSrwQn9UT4rfBQmi1ygorhbI0n469IzzfDxQfrJfBYSPhnBCzqgux7nnzr6Ug28MS9IaelIHVnTDK64/imUfWr1+v9C1kQZ/OkJCQImVPAOg8WXKe2DrVKrn6DG3P9wd64V7Fiff+CiW3wIzMKXEnpLIf7SeCZ7cyD7/bZpbu9/Uh19gVeYup/b1oXLOSwefZeiHckJAQNm/ebNjBVetB/08h5gCctHyS5Lt9rvd7cw9tG7gxsVtjlh+L5eClJNNvqM2HjZPBpRoM/MJonZYiNSuf6RvC8PZwZVKvpha9938VtWyNKSRegEU9oEV/GPWHtdWUyO7Im0xYepJJvZry3gCvsk+4n/wcWNwTcjMkpwRny3qAGsrNtBz6frOPlnWqsPrFLkYt85SrsjWGIAT8OQJij8GkQ1C9sbUV6SUnX8ugBQfIzdex7Y0eVHEu2RCWyP6vYfcnMPJ3aRnWRpm69izrT19j45Ru+NWrasyp6nqliagztn8wSqd7S+j1PkRsgrC/lBOlB2N0PuxVm1HtG/DTvsucumpCCZ5dsyExEoYuMNqoWarfhZC8IPO0Or58oo3Rexe2PmMDI9tSo4FHF4DGDja+YtGCucbodHa05+sn25CQmm1aeMrN87DvC8mgGWnULPlM2h15k7Wn4nm5ZxNjjZqKGagzNlPRFsCv/aS8dJMOS8tANkh6Tj4D5h3A0V5D0Os9DC+LEb0Xfh8GHV+UKg/bKGtPxjF1XSgfDfFhYnfjZycP3IztLqeWwebXYOCXUqUKG2XO1kgW7bvM0uc60KtlLcNOKsiFnx+G9Bsw+ShUljmsRSaSMnIZMG8/NSs7sfGVbjg5GJ1hRJ2xmYjiM7bAwEClbyELRuu0d4ARP0vr/BtettibsbE6qzg78vWTbYi5ncWcrQZ6fmWnwIbJUKM59JllgkrL9HtMUiYzNoXTqXF1nuvqadI1UlNT5RWlACa1Zbvx0KwP7PxYmt1YAFN0vtGnOc1rVebddaHczsg17KRds+FmGAz73iSjZomxKYTgvXWhpOUUMH+0vylGTcUMFDds/fr1U/oWsmCSzhpNYeAcuLIfjiyUX5QeTNHZpWkNJnRrzO9HrrLHkIrGW9+V3oZH/AQVKpqgUvl+zyvQ8dqq0zja2/HtqLYmu09bOnOMKZjUlhoNDPtBqrr910TIz5Zf2H2YotPZ0Z75o/1Jycpn6rpQylxBurxH+q61nwgtB5R+rIw6jWX5sVh2Rd7i/QFeRSq2q1gGxQ3b4cOHlb6FLJis038ceA2R3iITQuUVpQdTdb47oCVedarw9pqz3EjNKfnAs6shdLVUPLRegIkqle/3b4MvEhqfypwRrajr5mLyde5mSLFlTG7LKrVh+I9w67xFipKaqtOnrisfDPJid+Qtlh2OKfnArGTYMAlqtoB+n5omEuXH5uXEDD7dcp4ezWvyrIkrCSrmobhhu5vRw9YxWadGA0O/g4o1YN0EyE2XV9h9mKrT2dGe78e2Iydfy2srT1Og1bN0eisSAt+Ahl2hxztW0WkIh6OSWLTvMmM6NmCgnuKhxuDiYrpRtBRmtWXzvtB5Cpz4GSKVTSZgjs5nunryiFctPg+K5Px1PVn2dTrYOAUyk6QtABNXEszVWRbZeVqmLA8pdI5RA7Gtg+KGLSYmRulbyIJZOitWh8d/llIabXxFcrlWCHN0NnWvzGeP+XE8Jpn5uy4V/TAvE9aMB8eK8MSv0h6ilXSWxs20HF5ffYbGNSvx0RDzk8jm5eXJoEpZzG7LPjOgTmvJMKQoV9bIHJ0ajYavnmyDW0VHXl0ZQmbufengDs2DC0HQdzbUbWs1naUhhGD6hjAu3Ezn21Ftqe3qXPZJKoqguGGrWbOm0reQBbN1Nn4IHpkhZVk/+oM8ovRgrs7H/OvzZEB9Fu6J4sClROmXQkDgW5B0ER7/BVzNmwXJoVMfeQU6Ji8PISOngB/HBhju4VkKDg7mX0NpzG5LByd44jfQFcDqpxXbbzNXZ/VKFZg3ui1XkjJ5Z+3Zf/fbovdK8Wq+I6DzJKvrLIlVJ+L4KySeVx9uTm9DPTxVFEFxw5aTU8p+jg0hi85ur0v7bTs+gqvKrOPLoXPWMF+a16rMKytOE5OUKWVFD10lxeY17S2DSmX6fXZgOKeu3uGrJ1vLtiGvs2Ccl6nI0pY1m8GIxZBwVkoYrMCqghw6uzatyQeDvNkadoPv90RJBVTXTZQ8dId+Jy3924DO+zkXn8qMjeH0aF6T1x9pLvv1VYxDccOWny9TolOFkUWnRgPDf4BqnrD2WUWqGsuhs2IFB34Z3wE7DSxc8gsiaCo0fQQemiqDQgm5+33NiTj+PBrLiw81YUhr+UrMWCCO02xka8uWA6HXB9JLzLFF8lzzHuTSObF7Y4a3rcvCnWGkLhsDBTkw6s8iCY7NQe6xmZiey8t/nqJm5QrMH+2PvbqvZnUUN2zVqlVT+hayIJtO56rSlzAvC1aMhBx5y83LpbNhjYr8OsSNj7PmcN2+HgUjlhQpzmgucvb7iZhkpm8Mo1uzGrzbX96CkOVhKVLW79BDU6VVhe0fSq7zMiKXTo1Gw5wRfvxS5WeqJp8lofe34N5ClmuDvO2ZlVfAxGUnSM7MY9G4AKqXUCpJxbIobtji4+OVvoUsyKqztg+MXCalo1ozTqoXJROy6cy8jf+BF6jg5MyojLf4bPd1ea77D3LpvHgznYlLT1DPzYXvxrTDwV7eIVsenEdkHZt2dlIIgHtLWD0Orp+R7dJy6nTePYPueYf41u4ZnthXs/QQFSORS6dWJ3ht5WnCrqWyYIw/reu7yXJdFfNR3LDdLYBp68ius9kjUs6+6L1SaiOZlrxk0ZmXCauegrQEnMetpm/XDvx2KIaFuy+Vfa6ByKHzeko2z/x6HCdHe36f0FGRt2FnZ9v3XJN9bDq7wtN/gYsbLH9CSgsnA7LpPPojHP0eOr5E3wmzSc3OZ9ySY6RkyfMSIodOIQSzN4cTHHGLGY/60tentgzKVORCccN24sQJpW8hC4ro9B8rFeY8u1JKbSSDcTNbZ14WrBgF8celzCINOvLRYB8e86/H1zsusuSgPEUqzdWZkpXH+F+Pk5FTwLLnOtKguulxS6WRmZmpyHXlRJGx6VoXnl4POq1UDSD9ptmXlEVn6BrYNk1aLh3wP/zqu7F4fABXb2fx3NITslSFN1enEIJvgy+x7MhVnu/emGfUIGybQ/EkyDqdTtjZKW4/zUan06GITiFgy9tSfazOk6H/52Z5dpmlMz8bVo6G6H3w2E/QZlThRwVaHa+sOM228Bv8b0QrxphZut4cnUkZuYxfcpyoWxksm9CRLk1rmKWlNMpDEmTFxiZA/ClY9ii4NYTxG6BKHZMvZbbO08ulWLtG3WDs2iJB2NvCbjB5+Sm6NavJT+PMC/UwR6cQgrk7LrJwTxRPBNTnS2WrYateKCaiuMXZtGmT0reQBcV0ajRSyfpOL0vxbUHvmJUw2WSd+Tmwaqxk1Ib/UMSoATjY27FgjD+9Wrrzwd/nWHncvEBeU3UmpGYz8qcjRCdl8NP4AEWNGpSPsjWKfofqB8BTq6TA7V/7Q7LpM3azdJ78TSoa2qRXMaMGMMCvDl8+0YZDUUk8/Yt5y5Km6hRC8MW2CyzcE8XoDg2UNmoqZqCWrbEUQkjLkYcXgP/TMGQe2JtQXNEUspJh5RiIOyrFArUbX+KhOflaXv7zFHsvJDK1f0sm92qKRobYIUOIScpk7C/HSM3O59dnO9CxcXXF71keZmwWIf4ULH8c7J1g3N+SA5SlOPIDbJ8GzfvByD/AseR9z21hCby28gyeNSvy+4RO1KlqmT1SrU7wSeB5lh6OYWynhnwyzM8SRk21miai+Izt77//VvoWsqC4To1GSgfU8z04/Sf8+Thk3zH6MkbrTLwIS/rB9RAp+0QpRg2knJI/j2/PsLZ1+Wr7BaauCyW3QKu4zuNXknli0WGy87WsfKGzRYwalI8Zm0W+Q/UD4Lmt0jj9baBJoQBG69QWSMv026eB96MwanmpRg1ggJ8HS5/rwLU72Tz+42EibxgfTmOszozcAl78/SRLD8cwsXtjPh1uEaOmYgbqjM0anF4Om1+XNvCf/M2sLPqlcn4jbJgipVQa+Tt4djP4VJ1OMH/XJebvukSb+lX5bkw7GtaQ34FDpxP8djiG/wVF0LB6RRaPb0+zWvIE4hqCOmO7jzsxsGI0JF2Ahz+SsunIGN9YSGq8lFEk7ih0fQ36zDTqPufiU5m47ATpOQV8PsKPx/zry68RiEhIY8ryEGJuZzJrqC/jungqcp8SUK2niSg+Y9uwYYPSt5AFi+r0HwvPBUkeaUv6w74vDY51M0jn3UKha8ZDzebw0j6jjBqAnZ2GN/u2YNHTAUQnZTJ4wQFWn4g1OFOHITqvpWTz7NITfBJ4nl4ta7HhlW4WNWpQPmZsFh2b1Tzh+WDwGQ67ZsGyoZKxMwCDdAohlUZa1F0qFjriF+j3idHGs1X9qgS+1p1W9avy5uqzTFkRQnKmfN8hrU7w077LDPv+EBm5Bax4obOljZqKGahekf+gqOdZSWQlS0sx4evB3VuqMdXskVK9JkvVqS2QQguCZ0J2MvR4W1r6NHMvLy45i7fXnuX4lWQ6Nq7O9MHeZQajlqYzO0/Lb4ev8N2uKASC6YN9GNupocX28u6lPMzYrDI2hZDGUtC7oMuH7m9Cl1dKTWtVps4b56Q8qtF7oH4HGL5IymFpBgVaHYv2XWZe8CUqOzvwdr+WjO7QAMdSAvnL0nnk8m0+3XKe8Otp9POpzWePtcK9ipNZOk1EnbGZiOKGLTg4WPTp00fRe8hBcHAwVtMZGSTtM9yJgYZdpAdIiwF6S8fo1ZmbAWHr4NACqXRO/Y4w+GvwaCObRJ1OsPpkHF9tv0ByZh59fWozoVtjOjeprtcg6dN5OyOXtafiWXLwConpufTxrs3MoT7UrybvEufq1asZNWpU2QcCLVq04OLFi7LeX26sOjZTr8GO6dLLV8UaUnZ9//FSEdP70KtTCIg7LgVcn98kpZzr/QF0eF7WJc4LN9KZuSmcI9G3aVDdhRd7NGGYfz1cnYu/1OnTqdUJ9l9MZPH+aI5E36aemwvTBnkxuJWHVV64/kE1bCaiuGFLTU0VVatWVfQecpCamopVdRbkwqmlcHghpMZCxZrgNVgqh+PRRoozcnAiNSWFqi4OkBwNCWcgahdEBUNeBtRpBT3fh5aDpNRJCpCek88vB67w+5EY7mTlU8/Nhf6+dejYuDq+dV2pU9UZR3s7UlJS0FSoRHRSBqHxqey5cIvDUbfJ0+ro0qQGb/ZtoYiDyObNm/nhhx/YunWrQcf7+/tz+vRp2XXIidXHJkDcCdg3Rxprdg7SuGzWV9ofdm8Bzm6kpqVRtXIlSLsmVe2+eggiAuHOFcmgtZ8g7dm5KJM/VgjBngu3WLArijNxKTg72tGrRS16tKhJ63puNHavRKUK9qSlpVGxchXikrOISEjnSHQS28NvkpieS21XJyZ2b8z4Lp44Oyqwt2gcqmEzEcUN27Fjx0SnTp0UvYccHDt2DJvQqS2Ai9ukGdilnZLBuot9BXQ6gZ24Jzt55TrQor8UQlC/gyxlPQwhJ19LYGgCW0Kvc+gfgwXS7R3t7dBqdWjvGVqNalSkr3dtRnZoQIva8pScKYlnn32WpUuXGnSst7c3ERERiuoxF5sZmwBJUXD6D4jcArfvScFm54AOO+x0+RT6i9k5Snu7fo9LtdRkys5fFkIIzl1LZc3JOHZF3CLhnjyTjvYaEIL8e0JJK1awp3uzmgz3r0cf79pUcLCZrRPVsJmI4obt2rVrol69eoreQw6uXbuGzenUFsDNc5LLfspVyMskPT2dKrUaglsDqN1Kcg6x3lIJIBm58OsKL++8AAABfElEQVSpRN3K4HpKDjkFWjLTM/D0qEH9ahVpVb8qdas6W2xJpyzDtnjxYhYvXgzAjRs3bD5Rt02OTZA8G2+ck3JNZiWRnpZKlWruULU+1GgGdf3B0cWqEoUQxNzOIjIhjZjbWaRm55Oenk7tGm7UdXOhWa3K+NZ1LXVPzoqohs1EFDdsYWFhws/PT9F7yEFYWBiqTvmwhM7t27cTFxdX+H8vLy+6d+9u1IzN19eX8PBwhRTKg9rn8lJedKIaNpNRvBiVo6OFsmuYiapTXiyhs3///mZfw4qOAQaj9rm8lBedKqaj+Py7PJQFAVWn3JQXneUhFKW8tKWqU8VWsETmERUVi6HRaIYBC4AXhBA7DDh+mxBigPLKVFRULIVq2FRUVFRUHihsfx1GRUVFRUXFCFTDpqKioqLyQKEaNhUVFRWVBwrVsKmoqKioPFCohk1FRUVF5YFCNWwqKioqKg8UqmFTUVFRUXmgUA2bioqKisoDhWrYVFRUVFQeKP4POVD5LDcYv3IAAAAASUVORK5CYII=\n", 314 | "text/plain": [ 315 | "
" 316 | ] 317 | }, 318 | "metadata": {}, 319 | "output_type": "display_data" 320 | } 321 | ], 322 | "source": [ 323 | "## 设置刻度范围和刻度标签\n", 324 | "\n", 325 | "x = np.linspace(-2*np.pi, 2*np.pi, 200)\n", 326 | "y_1 = np.sin(x)\n", 327 | "y_2 = np.cos(x)\n", 328 | "\n", 329 | "plt.subplot(211) # 2行1列,指定第二个子图\n", 330 | "# 1. 刻度以圆周率形式展示\n", 331 | "# 2. 设置合理的范围\n", 332 | "plt.xlim(-2*np.pi, 2*np.pi)\n", 333 | "plt.xticks([-2*np.pi, -1.5 *np.pi, -np.pi, -0.5*np.pi, 0, 0.5*np.pi, np.pi, 1.5*np.pi, 2*np.pi],\n", 334 | "\t\t[r'$-2\\pi$',r'$-3\\pi/2$',r'$-\\pi$',r'$\\pi/2$',r'$0$',r'$\\pi/2$',r'$3\\pi/2$',r'$2\\pi$'])\n", 335 | "\n", 336 | "plt.plot(x,y_1, label=r'$\\sin(x)$')\n", 337 | "plt.plot(x,y_2,label=r'$\\cos(x)$')\n", 338 | "plt.grid(axis='x',color='gray',ls=\":\")\n", 339 | "plt.legend(loc='lower left', bbox_to_anchor=(1,0.5,0.9,0.9))\n", 340 | "\n", 341 | "\n", 342 | "ax = plt.subplot(212)\n", 343 | "# 1. 取消两个轴\n", 344 | "ax.spines['right'].set_color('none')\n", 345 | "ax.spines['top'].set_color('none')\n", 346 | "# 2. 移动两个轴\n", 347 | "ax.spines['left'].set_position(('data', 0))\n", 348 | "ax.spines['bottom'].set_position(('data', 0))\n", 349 | "\n", 350 | "plt.xlim(-2*np.pi, 2*np.pi) # 这里通过ax设置\n", 351 | "plt.xticks([-2*np.pi, -1.5 *np.pi, -np.pi, -0.5*np.pi, 0, 0.5*np.pi, np.pi, 1.5*np.pi, 2*np.pi], # 这里通过plt设置\n", 352 | "\t\t[r'$-2\\pi$',r'$-3\\pi/2$',r'$-\\pi$',r'$\\pi/2$',r'$0$',r'$\\pi/2$',r'$3\\pi/2$',r'$2\\pi$'])\n", 353 | "\n", 354 | "plt.plot(x,y_1, label=r'$\\sin(x)$')\n", 355 | "plt.plot(x,y_2,label=r'$\\cos(x)$')\n", 356 | "plt.grid(axis='x',color='gray',ls=\":\")\n", 357 | "plt.show()\n" 358 | ] 359 | }, 360 | { 361 | "cell_type": "code", 362 | "execution_count": 40, 363 | "metadata": {}, 364 | "outputs": [ 365 | { 366 | "data": { 367 | "text/plain": [ 368 | "\"\\n\\nset_position(self, position)[source]\\nSet the position of the spine.\\n\\nSpine position is specified by a 2 tuple of (position type, amount). The position types are:\\n\\n'outward' : place the spine out from the data area by the specified number of points. (Negative values specify placing the spine inward.)\\n'axes' : place the spine at the specified Axes coordinate (from 0.0-1.0).\\n'data' : place the spine at the specified data coordinate.\\nAdditionally, shorthand notations define a special positions:\\n\\n'center' -> ('axes',0.5)\\n'zero' -> ('data', 0.0)\\n\\n\"" 369 | ] 370 | }, 371 | "execution_count": 40, 372 | "metadata": {}, 373 | "output_type": "execute_result" 374 | } 375 | ], 376 | "source": [ 377 | "'''\n", 378 | "\n", 379 | "set_position(self, position)[source]\n", 380 | "Set the position of the spine.\n", 381 | "\n", 382 | "Spine position is specified by a 2 tuple of (position type, amount). The position types are:\n", 383 | "\n", 384 | "'outward' : place the spine out from the data area by the specified number of points. (Negative values specify placing the spine inward.)\n", 385 | "'axes' : place the spine at the specified Axes coordinate (from 0.0-1.0).\n", 386 | "'data' : place the spine at the specified data coordinate.\n", 387 | "Additionally, shorthand notations define a special positions:\n", 388 | "\n", 389 | "'center' -> ('axes',0.5)\n", 390 | "'zero' -> ('data', 0.0)\n", 391 | "\n", 392 | "'''" 393 | ] 394 | }, 395 | { 396 | "cell_type": "code", 397 | "execution_count": null, 398 | "metadata": {}, 399 | "outputs": [], 400 | "source": [] 401 | }, 402 | { 403 | "cell_type": "code", 404 | "execution_count": null, 405 | "metadata": {}, 406 | "outputs": [], 407 | "source": [] 408 | }, 409 | { 410 | "cell_type": "code", 411 | "execution_count": 42, 412 | "metadata": {}, 413 | "outputs": [ 414 | { 415 | "data": { 416 | "text/plain": [ 417 | "array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])" 418 | ] 419 | }, 420 | "execution_count": 42, 421 | "metadata": {}, 422 | "output_type": "execute_result" 423 | } 424 | ], 425 | "source": [ 426 | "np.linspace(1,1,10)" 427 | ] 428 | } 429 | ], 430 | "metadata": { 431 | "kernelspec": { 432 | "display_name": "Python 3", 433 | "language": "python", 434 | "name": "python3" 435 | }, 436 | "language_info": { 437 | "codemirror_mode": { 438 | "name": "ipython", 439 | "version": 3 440 | }, 441 | "file_extension": ".py", 442 | "mimetype": "text/x-python", 443 | "name": "python", 444 | "nbconvert_exporter": "python", 445 | "pygments_lexer": "ipython3", 446 | "version": "3.6.5" 447 | } 448 | }, 449 | "nbformat": 4, 450 | "nbformat_minor": 2 451 | } 452 | -------------------------------------------------------------------------------- /overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weidafeng/python-matplotlib-practices/51f4ce3762ffc0192d94d92cb0eb78f656a47ffe/overview.png --------------------------------------------------------------------------------