matplotlib基础(2)

以下将展示各种图的画法

默认已经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()

效果就是这张图会不停的刷新

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