我一直在试图理解this post的答案,以便填充两个不同的传说
我为每个条创建了一个带有不同图案填充的聚集堆叠条形图,下面的代码与前面文章的答案略有不同
但我还并没有弄清楚如何得到一个带有颜色的图例和一个带有图案填充的图例
颜色图例应对应于A、B、C、D、E,如果条带阴影,则阴影图例应显示“带”,如果未带阴影,则应显示“不带”
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap as coloring
# copy the dfs below and use pd.read_clipboard() to reproduce
df_1
A B C D E
Mg 10 15 23 25 27
Ca 30 33 0 20 17
df_2
A B C D E
Mg 20 12 8 40 10
Ca 7 26 12 22 16
hatches=(' ', '//')
colors_ABCDE=['tomato', 'gold', 'greenyellow', 'forestgreen', 'palevioletred']
dfs=[df_1,df_2]
for each_df, df in enumerate(dfs):
df.plot(ax=plt.subplot(111), kind="barh", \
stacked=True, hatch=hatches[each_df], \
colormap=coloring.from_list("my_colormap", colors_ABCDE), \
figsize=(7,2.5), position=len(dfs)-each_df-1, \
align='center', width=0.2, edgecolor="darkgrey")
plt.legend(loc='center left', bbox_to_anchor=(1.0, 0.5), fontsize=12)
我得到的图是:
有没有办法创建两个传说,然后一个挨着另一个或一个放在另一个下面?提前感谢^ ^
由于在{{CD1>}中添加传奇是一个复杂的、广泛的步骤,请考虑使用@ jjjc与function solution引用的非常链接。不过,您需要根据水平条形图的需要调整该函数。具体而言:
DataFrame.plot
调用添加一个参数kind='bar'
调整为kind='barh'
rect.set_y(rect.get_y() + 1 / float(n_df + 1) * i / float(n_col))
rect.set_height(1 / float(n_df + 1))
行中用width
交换height
axe.set_xticks
和axe.set_xticklabels
的np.arange(0, 120, 20)
值功能
呼叫
输出
我认为这个function solution by @jrjc对我的理解来说是相当复杂的,因此,我宁愿稍微改变我自己的东西并调整它
因此,我花了一些时间才明白,当为绘图创建第二个图例时,python会自动删除第一个图例,而此时必须使用
add_artist()
添加第二个图例的另一个先决条件是命名绘图,并将.add_artist()方法应用于该特定绘图,以便python知道将新绘图粘贴到何处
简言之,这就是我如何创造我心目中的情节,我希望这些评论能让它变得更清晰,对任何人都有用
我敢肯定,它可以更加优雅和自动化
相关问题 更多 >
编程相关推荐