两级分组小区

n9vozmp4  于 2022-09-21  发布在  其他
关注(0)|答案(1)|浏览(130)

有没有办法使用Pythonmatplotlib和/或Pandas创建两级分组条形图(即x轴上的组)?

我的意思的一个例子显示为

z9smfwbn

z9smfwbn1#

显然这是在wishlist上。Here's在POST中引用的一个示例,它可以做您想做的事情,但有几个函数。

然而,一个快速的解决方案是只需并排绘制两个条形图,并对图形进行一点定制。

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# create multindex dataframe

arrays = [['Fruit', 'Fruit', 'Fruit', 'Veggies', 'Veggies', 'Veggies'],
          ['Bananas', 'Oranges', 'Pears', 'Carrots', 'Potatoes', 'Celery']]
index = pd.MultiIndex.from_tuples(list(zip(*arrays)))
df = pd.DataFrame(np.random.randint(10, 50, size=(1, 6)), columns=index)

# plotting

fig, axes = plt.subplots(nrows=1, ncols=2, sharey=True, figsize=(14 / 2.54, 10 / 2.54))  # width, height
for i, col in enumerate(df.columns.levels[0]):
    print(col)
    ax = axes[i]
    df[col].T.plot(ax=ax, kind='bar', width=.8)

    ax.legend_.remove()
    ax.set_xlabel(col, weight='bold')
    ax.yaxis.grid(b=True, which='major', color='black', linestyle='--', alpha=.4)
    ax.set_axisbelow(True)

    for tick in ax.get_xticklabels():
        tick.set_rotation(0)

# make the ticklines invisible

ax.tick_params(axis=u'both', which=u'both', length=0)
plt.tight_layout()

# remove spacing in between

fig.subplots_adjust(wspace=0)  # space between plots

plt.show()

相关问题