Python大法好 之 Matplotlib
写完了之后觉得我总结得很不好,想了解得更清楚请看 莫烦Python ,我都是看他视频教学学的,并一点点总结起来。
第一部分
今天学了一个小方法,这个方法可以给函数图里面的一些函数曲线做一个标注, 例如虚线是代表什么,直线又代表什么。不过,我相信,你看图就会明白了。
再把线和图的相关的代码写好之后,添加下面这条代码,效果就会出来啦
plt.legend()
而且你也可以穿几个参数到这一个方法里面去,
l1, = plt.plot(x, y2, label='up')
l2, = plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--', label='down')
plt.legend(handles=[l1, l2,], labels=['aaa', 'bbb'], loc='best')
plt.show()
运行结果
你可以传 handles[ ]
进去, 这里的甜的东西是两个plot出来后的线对象, 例如上面写的 l1, l2,
, 在接受plot出来后的对象的时候, 如果你想要把对象传到 handles[ ]
里, 你必须在接受对象的时候在对象名后面加一个,
, 否则会报错或者传入失败。
当你成功传入handles [ ]
后, 你还可以从新设置他的 label=[ ]
, 按照 handles传入对象的顺序, 在label列中加入对象相应的描述,就可以实现这个功能了
最后一个是loc='bets'
,加入这一句的功能是让描述自动放置到一个不会阻挡你观看函数图视线的空旷的地方,他会自动找到一处空白, 把描述框画上去。这个属性还有其他的值可以填,详细请查询官网。
第二部分
这一部分学习如何在函数关系图上的线标注一个点,并描述这个点关于X和Y的关系,参照图片样子就可以理解了
运行代码
在这里插入import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-3, 3, 50)
y = 2*x + 1
plt.figure(num = 1, figsize=(8, 5),)
plt.plot(x, y)
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))
##主要部分
x0 = 1
y0 = 2*x0 + 1
plt.scatter(x0, y0, s=50, color = 'b')
plt.plot([x0, x0], [y0, 0], 'k--', lw=2.5)
#method 1
#################
plt.annotate(r'$2x+1= %s $' % y0, xy = (x0, y0), xycoords='data',
xytext=(+30, -30), textcoords='offset points', fontsize=16,
arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=0.2'))
#method 2
plt.text(-3.7, 3, r'$This\ is\ the\ some\ text. \mu\ \sigma_i\ \alpha_t$',
fontdict={'size':16, 'color':'r'})
plt.show()代码片
运行截图
代码讲解
在代码中主要部分那一块开始,定义x0和y0,就相当于定义了一个点,然后用plt.scatter()
把这个点在函数图上用点标注出来。
plt.scatter()
的作用相当于plot,但又有所不同,scatter是用点
来连成一条线,plot就是直接一条线
来表示函数,上面把x0和y0传进scatter就是把这个点画出来。而上面plt.plot()
那一句就是把描绘出来的点画一条虚线链接x轴,'k--'
的意思是用黑色的虚线,因为K是黑色的英语black最后一个嘛,如blue就可以用'b--'
, 这就用到了第一个了,这个我也不是很明白。'lw=2.5'
的意思是linewight线的宽度是2.5.
重要部分,我直接把上面的一段拷贝下来讲吧
plt.annotate(r'$2x+1= %s $' % y0, xy = (x0, y0), xycoords='data',
xytext=(+30, -30), textcoords='offset points', fontsize=16,
arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=0.2'))
可以看出来,你需要一些文字来描述那个点,例如你要表示出这个点的x和y的关系,那么你就可以像上面那样传一段字符串进去 r'$2x+1= %s $' % y0
, 然后你要传一个坐标值进去,这个坐标用于显示你上一步传进去的字符串,然后xytext=(+30, -30), textcoords='offset points'
的意思就是你传进去的那个字符串会基于你第一步画出来的那个点的基础上x轴上加加30,y轴上减30的位置进行打印。
xycoords=‘data’ 会让你的箭头指向这个点,这个点由xy=(x0, y0)来指定, 而arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=0.2')
就是画出一个箭头的,arrowstyle=’->’ 就描绘了箭头的样式, connectionstyle就是描绘箭头的样式的,例如箭头的一个弧度之类的
plt.text()
, 很简单, 一看就能明白, 我就不多说了
这一章写得很不好,我自己都感觉出来了,但是积累一点是一点吧!