1. 本来还想整理一下,后面发现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 

# 原始坐标 x,y 和对应的状态变量值 a
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))

# 将坐标映射到image像素中
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()

请添加图片描述

Logo

鸿蒙生态一站式服务平台。

更多推荐