如何在plt.contourf填充等高线图上正确标注等高线数值
如何在plt.contourf填充等高线图上正确标注数值?
我尝试生成带内部数值标注的等高线图,使用plt.contourf绘制填充等高线图后用plt.clabel标注数值,结果标注的数值对应错误(填充区域的数值标签和实际等高区间不匹配);但改用plt.contour搭配plt.clabel时,数值标注完全正常。
原问题代码
X = Data3.iloc[:,0].drop_duplicates() Y = Data3.iloc[:,1].drop_duplicates() Z = Data3.pivot('Battery capacity (kWh)','Solar capacity (kW)', 'Diesel electricity generation (kWh)') plt.figure(figsize=(7, 5)) contours = plt.contourf(X, Y, Z, 10, cmap='viridis', alpha=0.8 ) plt.colorbar(); plt.clabel(contours, inline = True, fontsize=8, fmt='%d', colors = 'black') plt.xlabel('Solar Capacity (kW)',fontsize = 13) # x-axis label with fontsize 12 plt.ylabel('Battery Capacity (kWh)',fontsize = 12) # y-axis label with fontsize 12 plt.title('Diesel Electricity Generation (% of total generation)',fontsize = 15) plt.scatter(x=(233*1.83*0.16), y=250, color = 'r', marker='o')
解决方案
问题核心是plt.contourf返回的对象并不适合直接用于plt.clabel标注,正确的做法是同时使用contourf和contour:用contourf绘制填充背景,再用contour绘制等高线条并标注数值,两者保持相同的等高线层级参数,确保标签与填充区域完全对应。
修改后的代码:
X = Data3.iloc[:,0].drop_duplicates() Y = Data3.iloc[:,1].drop_duplicates() Z = Data3.pivot('Battery capacity (kWh)','Solar capacity (kW)', 'Diesel electricity generation (kWh)') plt.figure(figsize=(7, 5)) # 绘制填充等高线,定义等高层级 contour_fill = plt.contourf(X, Y, Z, 10, cmap='viridis', alpha=0.8 ) plt.colorbar() # 绘制等高线条,使用和contourf完全相同的层级,保证区间匹配 contour_lines = plt.contour(X, Y, Z, 10, colors='black', linewidths=0.5) # 对contour生成的线条对象进行数值标注 plt.clabel(contour_lines, inline=True, fontsize=8, fmt='%d', colors='black') plt.xlabel('Solar Capacity (kW)', fontsize=13) plt.ylabel('Battery Capacity (kWh)', fontsize=12) plt.title('Diesel Electricity Generation (% of total generation)', fontsize=15) plt.scatter(x=(233*1.83*0.16), y=250, color='r', marker='o') plt.show()
关键注意点
- 必须让
contourf和contour使用相同的层级数(示例中为10),确保等高区间完全一致 - 可调整
contour的colors、linewidths参数,让等高线与填充背景视觉协调 plt.clabel仅对contour返回的对象能正确匹配数值标注
内容的提问来源于stack exchange,提问作者Roozbeh Ghasemi
相关产品推荐
相关产品推荐

