如何安装:pip install matpltlib即可
1.画一条直线
1 x = np.arange(1,10,1)#不包含终点 #包含终点x = np.linspace(1,10,1) 2 y = x + 1 3 plt.title('first') 4 plt.xlabel('this is x') 5 plt.ylabel('this is y') 6 plt.plot(x,y) 7 plt.savefig("1.jpg")#保存图片 8 plt.show()
2.画两条线
在第一个例子的基础上我们使用subplot(),让可以同时显示两个图
from matplotlib import pyplot as plt import numpy as np import random x = np.arange(1,10,1) y = x + 1 plt.subplot(121),plt.plot(x,y) plt.title('first') plt.subplot(122),plt.plot(-x,y) plt.title('second') plt.show()
subplot(a,b,c)中a代表所画图形的行数 b代表所画图形的列数 c代表所画图形的序号,比如subplot(2,2,1),就是两行两列的第一个,排序是从左至右,从上至下
当然我们也可以让这两个图分开显示,这里使用figure,创建两个不同的figure,这里dip越大越清晰,但是随着增大在不改变figsize的情况下图也会变大
from matplotlib import pyplot as plt import numpy as np import random x = np.arange(1,10,0.1) y1 = np.sin(x) y2 = np.cos(x) plt.figure(num=1,figsize=(8,6),dpi=50,facecolor='white',edgecolor='k') plt.plot(x,y1) plt.figure(num=2,dpi=100,facecolor='r',edgecolor='k',figsize=(5,3)) plt.plot(x,y2,'or') plt.show()
matplotlib中有很多样式的简写,例如我写的‘or’代表 “点 红“
具体还有很多样式,可以去网上查
3.修改坐标轴
-让坐标显示到(0,0)
from matplotlib import pyplot as plt import numpy as np x = np.arange(-np.pi*2,np.pi*2,0.1) y = np.sin(x) plt.plot(x,y) ax = plt.gca()#获取当前轴Get Current Axes
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))#设置显示位置0
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))
#plt.axis('off')#这个将不显示坐标轴 plt.show()
-设置坐标轴显示范围
在上面的例子基础上添上一句
plt.xlim(-np.pi,np.pi)
plt.ylim(-1,1)
图像将变成这样,那么其他的就没了吗?
其实点击拖动按钮,你可以发现图像依旧是完成的并未裁切
还有一点是xlim()和ylim()是左右都是闭合的,print一下就可以看到
h2> -重设置坐标ticks
有时可能线会遮挡看坐标,比如下面我将线宽度设置为100时,很多坐标已经看不到了,这时可以重新设置坐标
from matplotlib import pyplot as plt
import numpy as np
x = np.arange(-10,11)
y = x+3
new_ticks = np.linspace(-10,10,10)
plt.xticks(new_ticks)
plt.yticks([-7,5,14],
['bad','middle','good'])
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))
plt.plot(x,y,linewidth = 100,zorder=1)
plt.show()
这样y轴就会显示我所设置的东西,x轴按设置的分成(10-1)份,10个点
接下来来修改坐标值透明度,在show前添加代码
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))
4注解和标识
--图例模块(legend)可以实现在图中进行线的标注,代码以及效果如下
x = np.linspace(1,20) y1 = 10*x + 8 y2 = x*x l1, = plt.plot(x,y1,label='one',linestyle='--') l2, = plt.plot(x,y2,label='two')#需要加,号 plt.legend(handles =[l1,l2,] ,labels=['aa','bb'],loc=0)#loc=0代表‘best’location
#plt.legend(loc=0)用这种的话默认名字就是plot中label的名字
plt.show()
loc = 的参数如下,一般用best就号,这样在移动或者缩放的情况下还会进行自动调整
--做注释
1.使用plt.text(),效果如下
plt.text(-4,4,'this is a test',fontdict = {'size':16,'color':'red'})
2.使用annotate()具体的参数有点多可以查看这篇官方文档
x = np.linspace(-3,3,50) y = 2*x+1 ax = plt.gca() ax.spines['left'].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('right') ax.spines['right'].set_position(('data',0)) x0 = 1#x0和y0为我需要注释的点 y0 = 2*x0 +1 plt.scatter(x0,y0) plt.plot([x0,x0],[y0,0],'k--')#做直线 plt.plot([x0,0],[y0,y0],'r--') plt.annotate(r'$2x+1=%s$'%y0,xy=(x0,y0),xycoords='data',xytext=(+30,-30),textcoords = 'offset points', arrowprops = dict(arrowstyle='->',connectionstyle='arc3,rad=0'))
#第一个参数是text文本内容 #plt.text(-4,4,'this is a test',fontdict = {'size':16,'color':'red'})#方法1 plt.plot(x,y) plt.show()
效果如下
指示箭头的样式