matplotlib 如何用相同的色标填充多个多边形

nwsw7zdq  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(139)

我试图做一个有限元(FEM),我有问题,以显示预期的结果。
我可以用一个多边形(三角形,四边形)做一个colourfill,但问题是当我对另一个多边形做同样的事情时,颜色图会自动重置,它有不同的值,这意味着我在一个节点上得到的相同张力,从一边到另一边有不同的颜色。

tri1 = np.array([[0.25,0.1],[1,2],[0.5,2]])
val1 = np.array([1,3,2])
tri2 = np.array([[0.5,2],[1,2],[1.2,3.75]])
val2 = np.array([2,3,6])

mat1 = np.c_[tri1,val1]
mat2 = np.c_[tri2,val2]
fig,ax = plt.subplots()

def colourfill(mat_global,ax, label = None):
    import matplotlib.tri as tri
    triangulacion = tri.Triangulation(mat_global[:,0],mat_global[:,1])
    
    pc = ax.tripcolor(triangulacion, mat_global[:,2], cmap='viridis', shading='gouraud')
    
    cbar = plt.colorbar(pc)
    cbar.set_label(label)

colourfill(mat1,ax,'Testing')
colourfill(mat2,ax)
plt.show()

这是输出:

我希望,首先,有相同的规模的颜色,也是一个很好的颜色条。

mrfwxfqh

mrfwxfqh1#

您可以在tripcolor函数中指定vminvmax

import matplotlib.pyplot as plt

tri1 = np.array([[0.25,0.1],[1,2],[0.5,2]])
val1 = np.array([1,3,2])
tri2 = np.array([[0.5,2],[1,2],[1.2,3.75]])
val2 = np.array([2,3,6])

mat1 = np.c_[tri1,val1]
mat2 = np.c_[tri2,val2]
fig,ax = plt.subplots()

def colourfill(mat_global,ax, label = None):
    import matplotlib.tri as tri
    triangulacion = tri.Triangulation(mat_global[:,0],mat_global[:,1])
    
    pc = ax.tripcolor(triangulacion, mat_global[:,2], cmap='viridis', shading='gouraud', vmin=0, vmax=3)
    
    cbar = plt.colorbar(pc)
    cbar.set_label(label)
    return 

colourfill(mat1,ax,'Testing')
colourfill(mat2,ax)
plt.show()

这将返回:

**编辑:*而不是像我在上面的例子中那样硬编码vminvmax,你可以从mat1[:,2]mat2[:,2]矩阵中的最小值和最大值导出它们, 例如 *:

vmin = np.min([mat1[:,2],mat1[:,2]])

相关问题