我想在条形图上创建一个注释,将条形图的值与两个参考值进行比较.可以使用图片中显示的叠加,一种人员测量,但我愿意接受更优雅的解决方案.
使用pandas API到matplotlib生成条形图(例如data.plot(kind =“bar”)),所以如果解决方案正好与之相配,则会有一个加号.
解决方法:
您可以使用较小的条形图作为目标和基准指标. Pandas不能自动注释条形图,但您可以简单地循环覆盖值并使用matplotlib的pyplot.annotate代替.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
a = np.random.randint(5,15, size=5)
t = (a+np.random.normal(size=len(a))*2).round(2)
b = (a+np.random.normal(size=len(a))*2).round(2)
df = pd.DataFrame({"a":a, "t":t, "b":b})
fig, ax = plt.subplots()
df["a"].plot(kind='bar', ax=ax, legend=True)
df["b"].plot(kind='bar', position=0., width=0.1, color="lightblue",legend=True, ax=ax)
df["t"].plot(kind='bar', position=1., width=0.1, color="purple", legend=True, ax=ax)
for i, rows in df.iterrows():
plt.annotate(rows["a"], xy=(i, rows["a"]), rotation=0, color="C0")
plt.annotate(rows["b"], xy=(i+0.1, rows["b"]), color="lightblue", rotation=+20, ha="left")
plt.annotate(rows["t"], xy=(i-0.1, rows["t"]), color="purple", rotation=-20, ha="right")
ax.set_xlim(-1,len(df))
plt.show()