如何从Python中的matplotlib饼图获取颜色映射?

问题描述 投票:0回答:1

来自 pandas 文档中有关从数据框创建饼图的信息:

我有以下代码:

df = pd.DataFrame({'mass': [0.330, 4.87 , 5.97],
                   'radius': [2439.7, 6051.8, 6378.1]},
                  index=['Mercury', 'Venus', 'Earth'])
plot = df.plot.pie(y='mass', figsize=(5, 5))

这将创建一个按质量排列的行星饼图:

现在我在绘图线中添加一个参数来指定我想使用特定的 Seaborn 调色板“Set2”:

df = pd.DataFrame({'mass': [0.330, 4.87 , 5.97],
                   'radius': [2439.7, 6051.8, 6378.1]},
                  index=['Mercury', 'Venus', 'Earth'])
plot = df.plot.pie(y='mass', figsize=(5, 5), colors=sns.color_palette('Set2'))

我们得到了相同的图,但现在使用了不同的调色板:

当我使用每个调色板运行每个代码块时,与行星名称的颜色映射保持不变,告诉我映射是基于分配给每个行星名称的值。

我想要做的是“抓取”该映射作为字典,以便可以在 for 循环中使用它。

为了解释这里的目标,我有一个数据框,其中包含根据不同分析分配给每个行星的许多不同质量值。这意味着实验“A”对我们的三个行星具有这些特定质量值,实验“B”对三个行星具有不同的值,实验“C”对三个行星具有另一组不同的值,依此类推。具有这些实验值的数据帧是通过 for 循环生成的,迭代每个实验。对于每个实验,我想创建一个包含质量值的饼图。这里的要点是,我希望 for 循环中每个生成的绘图的行星的所有颜色映射都相同。因此,我们的想法是从 for 循环的第一次迭代中“获取”颜色映射字典,然后将该精确的颜色映射应用于 for 循环的每个后续迭代,假设实验中始终只有三颗行星。我该如何做到这一点,特别是从第一次迭代中获取颜色映射字典?

python pandas matplotlib
1个回答
0
投票

您可以将映射定义为字典,然后将绘图颜色定义为数组。

df = pd.DataFrame({
        'mass': [0.330, 4.87 , 5.97],
        'radius': [2439.7, 6051.8, 6378.1]
    },
    index=['Mercury', 'Venus', 'Earth'])

color_mapping = dict(zip(df.index, sns.color_palette('Set2')))

# this could be executed in a loop...
plot_colors = [color_mapping[planet] for planet in df.index]
plot = df.plot.pie(y='mass', figsize=(5, 5), colors=plot_colors)
© www.soinside.com 2019 - 2024. All rights reserved.