如何在Python中绘制带色条的三角区域(类似Matlab patch)?
Python实现带色条的三角区域绘制(类似Matlab patch函数)
要实现你要的效果,直接用plt.fill没法给每个三角形单独分配颜色并生成对应色条,推荐用matplotlib的PolyCollection类,它专门用来绘制多个多边形,支持根据数值映射颜色,完全对标Matlab的patch(x,y,c)。
下面是修正后的完整代码:
import numpy as np import matplotlib.pyplot as plt from matplotlib.collections import PolyCollection # 原始坐标数据 a1 = [0.90899658,1.10720062,1.47019958,0.90899658,1.47019958,3.14479828,0.90899658,3.14479828,3.17749786,0.90899658] b1 = [-0.38689995,0.22739983,0.69180012,-0.38689995,0.69180012,-0.34249973,-0.38689995,-0.34249973,-0.38329983,-0.38689995] # 构造每个三角形的顶点坐标列表 a2 = a1[:9] b2 = b1[:9] a3 = np.reshape(a2, (3,3)) b3 = np.reshape(b2, (3,3)) # 把每个三角形的x、y坐标配对,形成多边形顶点数组 triangles = [np.column_stack((a3[i], b3[i])) for i in range(3)] # 对应每个三角形的颜色数据 c1 = [0.234, 0.034, 0.006] # 创建绘图对象 fig, ax = plt.subplots() # 创建多边形集合,设置颜色映射和对应数值 poly_coll = PolyCollection(triangles, array=np.array(c1), cmap='viridis', edgecolors='black') ax.add_collection(poly_coll) # 添加色条,关联多边形集合 plt.colorbar(poly_coll, ax=ax, label='Triangle Value') # 自动调整坐标轴范围,确保所有三角形都显示 ax.autoscale() plt.xlabel('X') plt.ylabel('Y') plt.title('Colored Triangles with Colorbar') plt.show()
关键说明:
PolyCollection接受一个多边形列表,每个元素是该多边形的顶点坐标数组(形状为(n,2)),这里我们把每个三角形的x和y坐标用np.column_stack配对。array参数传入c1,用来指定每个多边形对应的颜色数值,matplotlib会自动根据你选的cmap(颜色映射)给每个三角形上色。- 添加色条时必须把
poly_coll对象传给plt.colorbar,这样色条才会和三角形的颜色对应起来。 ax.autoscale()会自动调整坐标轴范围,避免部分三角形被截断。
内容的提问来源于stack exchange,提问作者Vijay Kumar Sagar
相关产品推荐
相关产品推荐

