matplotlib子图与多种图形绘制
Posted elly01
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matplotlib子图与多种图形绘制相关的知识,希望对你有一定的参考价值。
import numpy as np import matplotlib.pyplot as plt
#散点图
#scatter fig=plt.figure() #fig.add_subplot(3,3,1)#上下两种方法都可以 ax=fig.add_subplot(3,3,1) n=128 #正态分布numpy.random.normal(loc=0.0, scale=1.0, size=None),(均值,标准差,size默认为none,只输出一个值) x=np.random.normal(0,1,n) y=np.random.normal(0,1,n) t=np.arctan2(y,x)#返回给定的 X 及 Y 坐标值的反正切值,arctan2(y,x)就是将反正切arctan(y/x)的值域从(-pi/2,pi/2)扩充到(-pi,pi)。 ‘‘‘fig=plt.figure() --- 创建图像 ax=plt.axes() --- 创建坐标轴 在matplotlib中,可以把figure看成是一个容纳各种坐标轴,图像,文字和标签的容器, axes是一个带有刻度和标签的矩形。我们通常用变量fig表示一个图形实例,用变量ax表示一个坐标轴实例。‘‘‘ #plt.axes([0.025,0.025,0.95,0.95]) #plt.scatter(x,y,s=75,c=t,alpha=0.7)#把t赋值给color,以满足我们想要达到多彩散点图的效果 ax.scatter(x,y,s=75,c=t,alpha=0.7) #plt.axis([-1,1,-0.5,1])#显示范围,x轴范围从-1到1,y轴范围从-0.5到1 plt.xlim(-1.5,1.5),plt.xticks([])#plt.xlim(xmin, xmax),xmin:x轴上的最小值,xmax:x轴上的最大值 plt.ylim(-1.5,1.5),plt.yticks([])#坐标显示值清空 plt.axis()#一个Figure是一个空白的画板画板上有轴的集合(axes),集合元素包含基本的两个axis ,用来确定一个区域,axis是用来设置具体某一个坐标轴的属性的 plt.title("scatter") plt.xlabel("x") plt.ylabel("y")
#柱状图
#bar #fig.add_subplot(332)#大于10,要加逗号,小于10不需要加逗号 ax=fig.add_subplot(332)#大于10,要加逗号,小于10不需要加逗号 n=10 x1=np.arange(n) y1=(1-x1/float(n))*np.random.uniform(0.5,1.0,n)#random.uniform(x, y) 方法将随机生成一个实数,它在 [x,y] 范围内。 y2=(1-x1/float(n))*np.random.uniform(0.5,1.0,n) #plt.bar(x1,+y1,facecolor=‘#9999ff‘,edgecolor=‘white‘)#与ax.bar()等价 #plt.bar(x1,-y2,facecolor=‘#ff9999‘,edgecolor=‘white‘) ax.bar(x1,+y1,facecolor=‘#9999ff‘,edgecolor=‘white‘) ax.bar(x1,-y2,facecolor=‘#ff9999‘,edgecolor=‘white‘) for x,y in zip(x1,y1): plt.text(x+0.4,y+0.05,‘%.2f‘%y,ha=‘center‘,va=‘bottom‘)#也可以用对象调用,ax.text() for x,y in zip(x1,y2): ax.text(x+0.4,-y-0.05,‘%.2f‘%y,ha=‘center‘,va=‘top‘) plt.title("bar") plt.xlabel("x") plt.ylabel("y")
#饼状图
#pie fig.add_subplot(333) n=20 z=np.ones(n)#数组 z[-1] *= 2 plt.pie(z,explode=z*.05,colors=[‘%f‘ % (i/float(n)) for i in range (n)], labels=[‘%.2f‘ % (i/float(n)) for i in range(n)])#explode离中心的距离 plt.gca().set_aspect(‘equal‘)#两个轴的长度始终相同,equal表示x和y维度在数据坐标中的长度相同 plt.xticks([]),plt.yticks([]) plt.title("pie")
#极坐标图形
#polar fig.add_subplot(334,polar=True)#fig.add_subplot(334)我们会看到一个一个折线图 n=20 theta=np.arange(0.0,2*np.pi,2*np.pi/n) radii=10*np.random.rand(n) plt.polar(theta,radii) #plt.plot(theta,radii) #plt.title(‘plor‘)
#热力图
#heatmap fig.add_subplot(335) from matplotlib import cm#color map 用来上色 data=np.random.rand(3,3) cmap=cm.Blues#蓝色系 #plt.imshow()函数负责对图像进行处理,并显示其格式,但是不能显示 ‘‘‘图片缩放的两种常见算法: 最近邻域内插法(Nearest Neighbor interpolation) 双向性内插法(bilinear interpolation) 最简单的图像缩放算法就是最近邻插值,就是将目标图像各点的像素值设为源图像中与其最近的点。算法优点在与简单、速度快。‘‘‘ map=plt.imshow(data,interpolation=‘nearest‘,cmap=cmap,aspect=‘auto‘,vmin=0,vmax=1)#aspect=‘auto‘自动缩放,vimn=0,填充为白色,为1,填充为蓝色 #plt.title(‘heatmap‘)
#3D图形
#3D from mpl_toolkits.mplot3d import Axes3D ax=fig.add_subplot(336,projection=‘3d‘) ax.scatter(1,1,3,s=100) plt.title(‘3D‘)
#热图
#hot map fig.add_subplot(313) 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)#meshgrid函数可以理解为用两个坐标轴上的点在平面上画网格 plt.contourf(x,y,f(x,y),8,alpha=.75,cmap=plt.cm.cool)#contourf填充二维高等线
plt.show()
#了解一下数组
n=20 z=np.ones(n)#数组 print(z) z[-1] *= 2 print(z) z[-2] *= 2 print(z)
#极坐标图不把属性设为true,会直接画到画布上
#polar #fig.add_subplot(334,polar=True)#fig.add_subplot(334)我们会看到一个一个折线图 fig.add_subplot(334) n=20 theta=np.arange(0.0,2*np.pi,2*np.pi/n) radii=10*np.random.rand(n) plt.polar(theta,radii) #plt.plot(theta,radii) plt.title(‘plor‘) plt.show()
# numpy.random.normal() & np.random.randn()
numpy中 numpy.random.normal(loc=0.0, scale=1.0, size=None) 参数的意义为: loc:float 概率分布的均值,对应着整个分布的中心center scale:float 概率分布的标准差,对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高 size:int or tuple of ints 输出的shape,默认为None,只输出一个值 我们更经常会用到np.random.randn(size)所谓标准正太分布(μ=0, σ=1),对应于np.random.normal(loc=0, scale=1, size)
camp参数:可参考 https://blog.csdn.net/weixin_39010770/article/details/88203326
最近邻插值法:可参考 https://blog.csdn.net/haluoluo211/article/details/80918147
contourf()可参考https://blog.csdn.net/qq_24059779/article/details/83022945
meshgrid函数 可参考https://www.cnblogs.com/shanlizi/p/9127878.html
以上是关于matplotlib子图与多种图形绘制的主要内容,如果未能解决你的问题,请参考以下文章