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子图与多种图形绘制的主要内容,如果未能解决你的问题,请参考以下文章

matplotlib:子图绘制

通过循环和函数填充 matplotlib 子图

Matplotlib 奇数子图

Matplotlib绘制图形

Python-Matplotlib可视化——多方面自定义统计图绘制

Matplotlib绘制散点图与条形图