以下将展示各种图的画法
默认已经import,需要额外import的代码里有加
import matplotlib import numpy as np import matplotlib.pyplot as plt
1.散点图
核心为plt.scatter()
最简单的散点图只需要5行代码(还能更少)
n=1024
x = np.random.randn(n)
y = np.random.randn(n)
plt.scatter(x,y)
plt.show()
接下来我们改表一些参数再画一个
# unit area ellipse rx, ry = 3., 1. area = rx * ry * np.pi theta = np.arange(0, 2 * np.pi + 0.01, 0.1) verts = np.column_stack([rx / area * np.cos(theta), ry / area * np.sin(theta)]) x, y, s, c = np.random.rand(4, 300)#随机产生0到1的均匀分布的随机样本#不信你可以试试randn() s *= 10**2. fig, ax = plt.subplots() ax.scatter(x, y, s=s, c=c, marker=verts,alpha=0.6) plt.show()
scatter()中必须带x,y这两个参数,c和s分别待变color和size,这里的marker用来指定样式
这个verts是怎么产生这个样式的我是不懂,可以跳过直接查看样式就行
具体样式官方文档如下https://matplotlib.org/api/markers_api.html#module-matplotlib.markers
2.柱状图
核心为plt.bar()
还是先来个简单的
x = np.arange(12)
y = np.arange(2,14)
plt.bar(x,y)#x,y需要1对1
plt.show()
再来个美观的
n =12 X = np.arange(n) y1 = (1-X/float(n)) *np.random.uniform(0.5,1.0,n) y2 = (1-X/float(n)) *np.random.uniform(0.5,1.0,n) plt.bar(X,y1,facecolor = '#9999ff',edgecolor='white') plt.bar(X,-y2,facecolor = '#ff9999',edgecolor='white')#这里的facecolor为特地颜色对应的色号 for x,y in zip(X,y1): plt.text(x,y+0.01,'%.2f'%y,ha = 'center',va = 'bottom')#ha为水平对齐方式 for x,y in zip(X,y2): plt.text(x,-y-0.01,'%.2f'%y,ha = 'center',va = 'top')#va为竖直对齐方式 plt.axis('off') plt.show()
3.等高线图
核心contour([X, Y,] Z, [levels], **kwargs)
[X,Y]:Z中值的坐标。 如下代码中的X,Y坐标
Z:绘制轮廓的高度值。 如下代码中的f(X,Y)
levels:确定轮廓线/区域的数量和位置。 如下代码中的8,代表分成10部分
def f(x,y): #计算高度的函数,这就是一个公式 return (1 - x/2 + x**5 + y**3) *np.exp(-x**2 -y**2) n=256 x = np.linspace(-3,3,n) y = np.linspace(-3,3,n) X,Y = np.meshgrid(x,y)#绑定网格值 plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap = plt.cm.hot)#风格,可以改为cm.cool #contour和contourf都是画三维等高线图的,不同点在于contour() 是绘制轮廓线,contourf()会填充轮廓 C = plt.contour(X,Y,f(X,Y),8,color='black',linewidths=.5) plt.clabel(C,inline = True,fontsize=10)#这是画出等高线上的数值,inline代表是否在线里标注 plt.axis('off') plt.show()
如果不理解8这个参数,将它改为0看看效果如下,就只有两部分了
4.3D图像
这里需要单独import
import matplotlib.pyplot as plt from matplotlib import cm from matplotlib.ticker import LinearLocator, FormatStrFormatter import numpy as np fig = plt.figure() ax = fig.gca(projection='3d') # Make data.这里是产生数据 X = np.arange(-5, 5, 0.25) Y = np.arange(-5, 5, 0.25) X, Y = np.meshgrid(X, Y)#返回坐标矩阵。 R = np.sqrt(X**2 + Y**2) Z = np.sin(R) # Plot the surface.#camp为颜色样式,antialiased为指定是否抗锯齿
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm, linewidth=0, antialiased=False)
#到这里就可以完成画图的工作了,下面的是一些修饰代码,可以要
# Customize the z axis. #ax.set_zlim(-1.01, 1.01) #ax.zaxis.set_major_locator(LinearLocator(10)) #ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) # Add a color bar which maps values to colors. #fig.colorbar(surf, shrink=0.5, aspect=5) plt.show()
5.让图动起来
核心:animation.FuncAnimation()具体参数在注释中有
import numpy as np import matplotlib.pyplot as plt from matplotlib import animation fig,ax = plt.subplots() x = np.arange(0,2*np.pi,0.01) line , = ax.plot(x,np.cos(x))#返回的是列表 def animate(i): line.set_ydata(np.cos(x+i/10)) return line, def init(): line.set_ydata(np.cos(x)) return line, ani = animation.FuncAnimation(fig=fig,func = animate,frames=100,init_func=init,interval=20,blit=False)
#fig:用于获取绘制,调整大小以及任何其他所需事件的图形对象
#fcunc:提供之后的其他位置参数
#frame:如果是整数,则等于传递范围(帧)
#init_func:用于绘制清晰框架的功能。如果未给出,将使用帧序列中第一项的绘制结果。在第一帧之前将调用此函数一次。
#interval:帧之间的延迟(以毫秒为单位)。默认为200。
#blit:是否覆盖之前的默认False
plt.show()
效果就是这张图会不停的刷新