我尝试使用Seaborn创建一个分组条形图,但我有点迷失在杂草中。我实际上让它工作,但它不像一个优雅的解决方案。Seaborn似乎只支持在有二元选项(如男性/女性)时的聚类条形图。(https://seaborn.pydata.org/examples/grouped_barplot.html)
不得不如此依赖matplotlib感觉不太好--使用子情节感觉有点脏:)。在Seaborn中有没有完全处理这个问题的方法?
谢谢你,
安德鲁
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib import rcParams
sns.set_theme(style="whitegrid")
rcParams.update({'figure.autolayout': True})
dataframe = pd.read_csv("https://raw.githubusercontent.com/mooperd/uk-towns/master/uk-towns-sample.csv")
dataframe = dataframe.groupby(['nuts_region']).agg({'elevation': ['mean', 'max', 'min'],
'nuts_region': 'size'}).reset_index()
dataframe.columns = list(map('_'.join, dataframe.columns.values))
# We need to melt our dataframe down into a long format.
tidy = dataframe.melt(id_vars='nuts_region_').rename(columns=str.title)
# Create a subplot. A Subplot makes it convenient to create common layouts of subplots.
# https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.subplots.html
fig, ax1 = plt.subplots(figsize=(6, 6))
# https://stackoverflow.com/questions/40877135/plotting-two-columns-of-dataframe-in-seaborn
g = sns.barplot(x='Nuts_Region_', y='Value', hue='Variable', data=tidy, ax=ax1)
plt.tight_layout()
plt.xticks(rotation=45, ha="right")
plt.show()
1条答案
按热度按时间svmlkihl1#
我不知道你为什么需要
seaborn
,你的数据是宽格式的,所以Pandas不需要融化就能做得很好:输出: