- 本来还想整理一下,后面发现matplotlib官网有各种各样的画云图方法,而且各有各的美,官网链接 https://matplotlib.org/stable/gallery/index
2. 这里整理我用到的两种方法,效果图如下,代码如下。第一套代码不能直接运行的,先讲下原理。第二套代码是测试案例,代码可直接运行。
- 这里利用的关键函数为
plt.scatter()
, 二维云图需要的数据维度为三维,前两维为坐标,最后一维为坐标对应的状态变量值,因此准备好数据就可以直接画图了,其中的cmap变量为控制云图的颜色映射样式,这里的上下两个图用的不一样的映射规则。vmin和vmax变量是控制颜色映射范围的,比如最小值对应颜色映射的最小值。 plt.text()
函数是在图中指定坐标位置添加文字plt.colorbar()
为显示颜色映射表操作
x = Data_CFD['x']
y = Data_CFD['y']
U = np.concatenate([u,v,w],axis = 1)
plt.figure()
plt.subplot(211)
plt.scatter(x,y,c = U[:,0],cmap=plt.cm.rainbow,vmin = min(U_CFD[:,0]),vmax = max(U_CFD[:,0]))
plt.text(plot_x,plot_y,r'DNN',{'color': 'b','fontsize':fontsize})
plt.axis(axis_limit)
plt.colorbar()
plt.subplot(212)
plt.scatter(x,y,c = U_CFD[:,0],cmap=plt.cm.hot,vmin = min(U_CFD[:,0]),vmax = max(U_CFD[:,0]))
plt.colorbar()
plt.text(plot_x,plot_y,r'CFD',{'color': 'b','fontsize':fontsize})
plt.axis(axis_limit)
plt.show()

- 案例测试: 注意matplotlib的标识还支持读取LaTEX语法
import matplotlib.pyplot as plt
import numpy as np
a=np.linspace(0,100,10000)
T=np.mgrid[0:100:1,0:100:1]
x=T[0]
y=T[1]
plt.figure()
plt.subplot(111)
plt.scatter(x,y,c=a,cmap=plt.cm.rainbow,vmin=min(a),vmax=max(a))
plt.text(50,50,r'Nancy',{'color':'r','fontsize':20})
plt.title('$\Omega$')
plt.colorbar()
plt.show()

方法二,更规整一点, 而且可以调节像素精度,具体自己体会,代码可直接运行
import matplotlib.pyplot as plt
import numpy as np
a=np.linspace(0,100,10000)
T=np.mgrid[0:50:0.5,0:50:0.5]
x=T[0]
y=T[1]
h,w=np.shape(x)
image=np.ones((100,100))
for i in range(h):
for j in range(w):
i_x=int(np.round(x[i,j]*2))
i_y=int(np.round(y[i,j]*2))
image[i_x,i_y]=a[i*h+w-1]
plt.figure()
plt.subplot(111)
extent=(0,200,0,200)
plt.imshow(image,cmap=plt.cm.rainbow,vmin=min(a),vmax=max(a),extent=extent)
plt.title('$\Omega$')
plt.colorbar()
plt.show()
