gpt4 book ai didi

python - matplotlib 图例中的副标题,具有已定义的类别子集和堆积图

转载 作者:太空宇宙 更新时间:2023-11-04 05:05:41 24 4
gpt4 key购买 nike

pandas dataframe 具有以下形式,其中 Year 是索引:

      A:Cat1  A:Cat2  B:Cat1  B:Cat2  B:Cat3
Year
1977 0.5 0.25 0.15 0.1 0.1
1981 0.2 NaN 0.40 0.1 0.2
1983 0.1 0.10 0.30 0.2 0.3

重要的是您在两个不同的“父类(super class)别”A 和 B 中有相同的类别 Cat1 和 Cat2。为了绘制所有类别的变化,我使用了堆叠图并使用了两组不同的颜色对于每个父类(super class)别。所有这些颜色都保存在 colors 列表中。

我现在正在做的绘制图形是(pltpyplot):

plt.stackplot(data.index.values,data.fillna(0).T.values,colors=colors,labels=data.columns.values)
plt.legend(loc="best")

这给出了以前数据的以下内容:

Result of previous code

现在,我想做的是避免在图例中重复父类(super class)别 A 和 B,方法是为每个父类(super class)别创建两个不同的图例,或者在同一图例中包含子标题。我看了this other question关于副标题,但重点是我希望能够指定图例两列之间的断点,因此仅指定 ncol=2 不起作用,因为它不会在正确的观点,因为我在每个 «supercategory» 中没有相同数量的类别。

最佳答案

也许尝试添加一个占位符来处理每个父类(super class)别中类别数量不相等的问题。或者使用水平组标签:

import io

import pandas as pd
import matplotlib.lines as mlines
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt

s = """1977 0.5 0.25 0.15 0.1 0.1
1981 0.2 NaN 0.40 0.1 0.2
1983 0.1 0.10 0.30 0.2 0.3"""
t = [('A', 'Cat1'),
('A', 'Cat2'),
('B', 'Cat1'),
('B', 'Cat2'),
('B', 'Cat3')]
index = pd.MultiIndex.from_tuples(t)
df = pd.read_table(io.StringIO(s), names=index)
df.index.name = 'Year'
colors = ['b', 'c', 'k', 'g', 'w']
plt.stackplot(df.index.values,df.fillna(0).T.values,colors=colors)

ha = mlines.Line2D([], [], marker='None', linestyle='None')
hb = mlines.Line2D([], [], marker='None', linestyle='None')
ha1 = mpatches.Patch(color=colors[0], ec='k')
ha2 = mpatches.Patch(color=colors[1], ec='k')
hb1 = mpatches.Patch(color=colors[2], ec='k')
hb2 = mpatches.Patch(color=colors[3], ec='k')
hb3 = mpatches.Patch(color=colors[4], ec='k')
hblank = mpatches.Patch(visible=False)
l1 = plt.legend([ha, ha1, ha2, hblank, hb, hb1, hb2, hb3],
['A', 'Cat1', 'Cat2', '', 'B', 'Cat1', 'Cat2', 'Cat3'],
loc=2, ncol=2) # Two columns, vertical group labels
l2 = plt.legend([ha, hblank, hb, hblank, hblank, ha1, ha2, hb1, hb2, hb3],
['A', '', 'B', '', '', 'Cat1', 'Cat2', 'Cat1', 'Cat2', 'Cat3'],
loc=4, ncol=2) # Two columns, horizontal group labels

ax = plt.gca()
ax.add_artist(l1)
ax.get_xaxis().get_major_formatter().set_useOffset(False)
plt.show()

enter image description here

关于python - matplotlib 图例中的副标题,具有已定义的类别子集和堆积图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44578258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com