matplotlib 使用Seaborn创建分组条形图

a6b3iqyw  于 2023-02-09  发布在  其他
关注(0)|答案(1)|浏览(177)

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

svmlkihl

svmlkihl1#

我不知道你为什么需要seaborn,你的数据是宽格式的,所以Pandas不需要融化就能做得很好:

from matplotlib import rcParams
sns.set(style="whitegrid")
rcParams.update({'figure.autolayout': True})
fig, ax1 = plt.subplots(figsize=(12,6))

dataframe.plot.bar(x='nuts_region_', ax=ax1)
plt.tight_layout()
plt.xticks(rotation=45, ha="right")
plt.show()

输出:

相关问题