如何在matplotlib条形图中添加单个星型标记标识无数据的最后一根柱子
条形图第10根柱子添加星形标记实现方案
你可以通过plt.scatter在第10组对应柱子的位置绘制星形标记实现需求,顺便修复原代码中x轴刻度位置传参错误的问题,完整修改后代码如下:
import pandas as pd import numpy as np import matplotlib.pyplot as plt from matplotlib.lines import Line2D # 用于自定义星号图例 data = pd.read_csv('data.csv') df = pd.DataFrame(data) plt.figure(figsize=(3,2)) X = list(df.iloc[:, 0]) Y = list(df.iloc[:, 1]) Z = list(df.iloc[:, 2]) X_axis = np.arange(len(X)) plt.bar(X_axis - 0.2, Y, 0.4, label='Actual', color='#436bad') plt.bar(X_axis + 0.2, Z, 0.4, label='Predicted', color='#c5c9c7') # 给第10组(索引为9)的柱子添加星形标记,标记位置可根据实际需求调整y坐标 # 这里假设无数据的柱子高度为0,将星号放在y=62的位置(接近y轴下限) x_10_actual = X_axis[9] - 0.2 x_10_pred = X_axis[9] + 0.2 # 如果只有其中一根柱子无数据,只保留对应scatter语句即可 plt.scatter(x_10_actual, 62, marker='*', c='red', s=50, zorder=10) plt.scatter(x_10_pred, 62, marker='*', c='red', s=50, zorder=10) # 新增星号的图例说明 custom_legend = [Line2D([0], [0], marker='*', color='w', markerfacecolor='red', markersize=10, label='无对应数据')] original_legend = plt.legend(loc=2, prop={'size': 6.5}) plt.gca().add_artist(original_legend) plt.legend(handles=custom_legend, loc=1, prop={'size': 6.5}) labels=['1','2','3','4','5','6','7','8','9','10'] # 修复原代码刻度位置传参错误,原X为数据列不是刻度位置 plt.xticks(X_axis, labels, rotation=60) plt.xlabel("Node no") plt.ylabel("Accuracy (%)") plt.ylim(60,95) plt.tight_layout() # 避免标签被截断 plt.show()
参数调整说明
- 你可以调整
scatter中的y坐标值,修改星号的显示高度 s参数控制星号大小,c参数控制星号颜色- 如果仅编号10的其中一类(Actual/Predicted)柱子无数据,删除对应
scatter语句即可
内容的提问来源于stack exchange,提问作者abaair davis
相关产品推荐
相关产品推荐

