python - Seaborn barplot 在不同高度添加水平线
问题描述
我有一个条形图,我想根据 pandas 列值在每个条形中添加一条水平线。我已经看到了如何在所有条上添加一条水平线的示例,但这不是我的目标。
到目前为止,我尝试过的是:
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame([[1, 2, 1], [2, 4, 3], [3, 6, 1], [4, 8, 3]], columns=["X", "Value", "Hor"])
fig, ax = plt.subplots()
sns.barplot(x="X", y="Value", data=df, color='green', ax=ax)
sns.barplot(x="X", y="Hor", data=df, color='green', linewidth=2.5, edgecolor='black', ax=ax)
这与我想要的比较接近,但我只想要顶部边缘,最好是虚线。
我的问题是双重的:
- 这是这样做的方法吗?通过将两个条形图堆叠在一起?
- 如果是这样,我该如何调整所有边缘以适应我的需要?
解决方案
您可以迭代 barplot 中的补丁,提取宽度和位置并使用 plt.plot 绘制值。请注意,如果数据框未排序,这将中断。
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame([[1, 2, 1], [2, 4, 3], [3, 6, 1], [4, 8, 3]], columns=["X", "Value", "Hor"])
fig, ax = plt.subplots()
sns.barplot(x="X", y="Value", data=df, color='green', ax=ax)
for ix, a in enumerate(ax.patches):
x_start = a.get_x()
width = a.get_width()
ax.plot([x_start, x_start+width], 2*[df.loc[ix, 'Hor']], '--', c='k')
推荐阅读
- variables - PowerBI_logic 变量的操作
- python - Discord.py connect() 60 秒后超时
- c - 如何使我的函数“在所有控制路径中返回一个值”?
- android - 如何使用适用于 android 的颤振 google_sign_in 插件在身份令牌过期之前刷新身份令牌
- c++ - 你可以在 C++ 中使用类名作为变量名吗
- php - Laravel 相对路径在 localhost 上未按预期工作
- android - 使用 Xamarin Forms 在 Android 10+ 中启动热点
- c# - 绕过gridview上不受信任的ssl链接
- google-bigquery - NetSuite 到 Google BigQuery
- gml - gamemaker 2.0 中的碰撞失败