You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:06:02