matplotlib基础

如何安装: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()具体的参数有点多可以查看这篇官方文档

https://matplotlib.org/api/_as_gen/matplotlib.pyplot.annotate.html?highlight=annotate#matplotlib.pyplot.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()

效果如下

指示箭头的样式

原文地址:https://www.cnblogs.com/Truedragon/p/12862519.html