微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – Matplotlib用线条和数字注释条形图的方法

enter image description here

我想在条形图上创建一个注释,将条形图的值与两个参考值进行比较.可以使用图片显示的叠加,一种人员测量,但我愿意接受更优雅的解决方案.

使用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()

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐