我有一个海运计数图,但不是彩色条,我需要的价值高于每个酒吧。我的输入是pandas数据框。
ax = sns.countplot(x="variable", hue="value", data=pd.melt(dfs))
这里,DFS具有用于不同列的许多条目。例如,这里的“男人”在蓝色条上方,“女人”在棕色条上方,“孩子”在绿色条上方,而不是颜色描述。
qyzbxkaa1#
有时候,不去寻找调整seaborn的方法更容易,而是直接使用matplotlib并从头开始构建图表。在这里,我们可以假设有一个名为counts的 Dataframe ,它看起来像
counts
hue c m w class A 20 31 29 B 40 112 63 C 85 203 117
其中索引是沿着x轴的位置,并且列是不同的色调。在下文中,groupedbarplot是一个函数,用于将此类 Dataframe 作为输入并将条形图绘制为组,此外还为每个条形图添加标签。
groupedbarplot
import pandas as pd import matplotlib.pyplot as plt import numpy as np; np.random.seed(42) def groupedbarplot(df, width=0.8, annotate="values", ax=None, **kw): ax = ax or plt.gca() n = len(df.columns) w = 1./n pos = (np.linspace(w/2., 1-w/2., n)-0.5)*width w *= width bars = [] for col, x in zip(df.columns, pos): bars.append(ax.bar(np.arange(len(df))+x, df[col].values, width=w, **kw)) for val, xi in zip(df[col].values, np.arange(len(df))+x): if annotate: txt = val if annotate == "values" else col ax.annotate(txt, xy=(xi, val), xytext=(0,2), textcoords="offset points", ha="center", va="bottom") ax.set_xticks(np.arange(len(df))) ax.set_xticklabels(df.index) return bars df = pd.DataFrame({"class" : np.random.choice(list("ABC"), size=700, p=[.1,.3,.6]), "hue" : np.random.choice(["m", "w" ,"c"], size=700, p=[.5,.3,.2])}) counts = df.groupby(["class", "hue"]).size().unstack() groupedbarplot(counts, annotate="col") plt.show()
我们也可以直接标记值groupedbarplot(counts, annotate="values")
groupedbarplot(counts, annotate="values")
qgelzfjb2#
您可以使用ax.bar_label()在条形图顶部添加注解。使用您的代码的示例:
for bars, hue_label in zip(ax.containers, pd.melt(dfs).value.unique()): ax.bar_label(bars, labels=[hue_label]*len(bars))
基于图像的示例:
for bars, hue_label in zip(ax.containers, df.who.unique()): ax.bar_label(bars, labels=[hue_label]*len(bars))
可以使用plt.legend([],[], frameon=False)删除图例。
plt.legend([],[], frameon=False)
2条答案
按热度按时间qyzbxkaa1#
有时候,不去寻找调整seaborn的方法更容易,而是直接使用matplotlib并从头开始构建图表。
在这里,我们可以假设有一个名为
counts
的 Dataframe ,它看起来像其中索引是沿着x轴的位置,并且列是不同的色调。在下文中,
groupedbarplot
是一个函数,用于将此类 Dataframe 作为输入并将条形图绘制为组,此外还为每个条形图添加标签。我们也可以直接标记值
groupedbarplot(counts, annotate="values")
qgelzfjb2#
您可以使用ax.bar_label()在条形图顶部添加注解。
使用您的代码的示例:
基于图像的示例:
可以使用
plt.legend([],[], frameon=False)
删除图例。