400-616-5551

您所在位置: 首页> 学习课程> python培训 | Python进阶之Matplotlib入门

python培训 | Python进阶之Matplotlib入门

发布百知教育 来源:学习课程 2019-11-04

概要


1、掌握Matplotlib中的标注函数annotate;


2、掌握Matplotlib中的添加文本函数text;


3、掌握Matplotlib中的改变能见度函数set_bbox。



标注


有时候,我们希望给图上的一些点或者线做一些更加精细的标注,达到美观和细化图片的效果,比如这样的:


python培训




这里我们给sin函数标注了在2/3pi时候的值,要想做到这一点我们分两步走:

画一条红色虚线以及红色实心点

用annotate函数进行文字标注


t = 2*np.pi/3

plt.plot([t,t],[0,np.sin(t)], color ='red', linewidth=2.5, linestyle="--")

plt.scatter([t,],[np.sin(t),], 50, color ='red')


plt.annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',

         xy=(t, np.sin(t)), xycoords='data',

         xytext=(+10, +30), textcoords='offset points', fontsize=16,

         arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))


其中第一步,我们用到了两种画图函数,分别是plot以及scatter。plot函数的操作我们其实经过前面的学习已经能够完全掌握,包括设置颜色,线宽和线风格。而画红色实心点的函数scatter我们是第一次见,关于这个函数我们将会在后面详细介绍。

第二步我们用了一段关于annotate很长的代码,其中: 

r''里面的内容就是文字部分,熟悉Latex的同学可能对这部分内容非常熟悉,它是负责显示公式,由$$符号来引导。具体如何用latex打印公式需要大家自己去学习了。参数xy=(t, np.sin(t))表明注释的位置

参数xycoords='data' 是说基于数据的值来选位置, xytext=(+10,+30)对于标注相对位置的描述 和 xy 偏差值,arrowprops是对图中箭头类型的一些设置.


完整版代码:


import numpy as np

import matplotlib.pyplot as plt


plt.figure(figsize=(5, 5))

x = np.linspace(-np.pi, np.pi, 256)

y1,y2 = np.cos(x), np.sin(x)

plt.plot(x, y1, color="blue", linewidth=1.0, linestyle="-", label="cosine")

plt.plot(x, y2, color="green", linewidth=1.0, linestyle="--", label="sine")


plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],

       [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])


plt.yticks([-1, 0, +1],

       [r'$-1$', r'$0$', r'$+1$'])


ax = plt.gca()

ax.spines['right'].set_color('none')

ax.spines['top'].set_color('none')

ax.spines['bottom'].set_position(('data',0))

ax.spines['left'].set_position(('data',0))


plt.legend(loc='upper left')


t = 2*np.pi/3

plt.plot([t,t],[0,np.sin(t)], color ='red', linewidth=2.5, linestyle="--")

plt.scatter([t,],[np.sin(t),], 50, color ='red')


plt.annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',

         xy=(t, np.sin(t)), xycoords='data',

         xytext=(+10, +30), textcoords='offset points', fontsize=16,

         arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))


plt.show()


添加文字


除了上面讲到的用annotate函数来给图片标注,我们也可以有另一种方式来添加文字,这个函数叫做text。我们直接用一个例子来说明:



import numpy as np

import matplotlib.pyplot as plt


plt.figure(figsize=(5, 5))

x = np.linspace(-np.pi, np.pi, 256)

y1,y2 = np.cos(x), np.sin(x)

plt.plot(x, y1, color="blue", linewidth=1.0, linestyle="-", label="cosine")

plt.plot(x, y2, color="green", linewidth=1.0, linestyle="--", label="sine")


plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],

       [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])


plt.yticks([-1, 0, +1],

       [r'$-1$', r'$0$', r'$+1$'])


ax = plt.gca()

ax.spines['right'].set_color('none')

ax.spines['top'].set_color('none')

ax.spines['bottom'].set_position(('data',0))

ax.spines['left'].set_position(('data',0))


plt.legend(loc='upper left')


plt.text(-2.0, 1.2, r'Plot of sin(x) and cos(x).',

         fontdict={'size': 16, 'color': 'r'})


plt.show()


其中,r' '里面是文字内容,而fontdict负责设置文字的大小以及颜色等。


运行结果:



python培训


可以看到图中的红色文字部分成功加入。


能见度


我们经常会遇到画出来的线和坐标轴有重合的地方,比如这个图


python培训

不管是蓝色实线还是绿色虚线都有和坐标轴刻度标记文字有重合部分,为了解决这个问题,我们使用 label.set_bbox来设置透明度:



import numpy as np

import matplotlib.pyplot as plt


plt.figure(figsize=(5, 5))

x = np.linspace(-np.pi, np.pi, 256)

y1,y2 = np.cos(x), np.sin(x)

plt.plot(x, y1, color="blue", linewidth=1.0, linestyle="-", label="cosine", zorder=1)

plt.plot(x, y2, color="green", linewidth=1.0, linestyle="--", label="sine", zorder=1)


plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],

       [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])


plt.yticks([-1, 0, +1],

       [r'$-1$', r'$0$', r'$+1$'])


ax = plt.gca()

ax.spines['right'].set_color('none')

ax.spines['top'].set_color('none')

ax.spines['bottom'].set_position(('data',0))

ax.spines['left'].set_position(('data',0))


plt.legend(loc='upper left')


for label in ax.get_xticklabels() + ax.get_yticklabels():

    label.set_fontsize(12)

    label.set_bbox(dict(facecolor='white', edgecolor='none', alpha=0.7, zorder =2 ))


plt.show()



注意到我们画sin以及cos函数的时候,加入了一个参数zorder = 1,这是为了后面在坐标轴刻度颜色以及能见度的时候可以覆盖sin以及cos函数线。


负责调控能见的核心代码:


for label in ax.get_xticklabels() + ax.get_yticklabels():

    label.set_fontsize(12)

    label.set_bbox(dict(facecolor='white', edgecolor='none', alpha=0.7, zorder =2 ))

其中set_fontsize是设置刻度标注的字体大小,而set_bbox就是设置坐标刻度标注周围一个方块范围内颜色以及能见度,其中alpha负责能见度,zorder=2是呼应前面的zorder=1,让更高级别的设置可以覆盖更低级别的设置。


运行结果:


python培训


python培训:http://www.baizhiedu.com/python2019




上一篇:python培训 | 用python重温统计学基础:离散型概率分布

下一篇:应届生去公司找个Java程序员的职位需要什么技能?

相关推荐

www.baizhiedu.com

有位老师想和您聊一聊

关闭

立即申请