【问题标题】:three level pie plot matplotlib - how to "prettify"三级饼图 matplotlib - 如何“美化”
【发布时间】:2019-12-20 03:30:56
【问题描述】:

我试图在 matplotlib 中模拟一个三级饼图,但对它的美感不满意。

具体来说,我似乎无法让三个级别(或甜甜圈)更具特色。另外,我想理想地将标签显示为图例,而不是它们当前的显示方式。最后,如果可能的话,我希望能有一套互补的 8 种颜色。

我的代码如下:

import matplotlib.pyplot as plt
import numpy as np

first_labels = ["B", "S", "D", "SG", "OBGL", "G", 'T', "O", "I"]
first_sizes = [2000, 300, 200, 100, 100, 150, 40, 30, 700]

second_sizes = [1000, 200, 200, 400, 500, 40, 1, 1, 1000]

third_sizes = [500, 300, 400, 500, 400, 100, 5, 2, 800]

flatui = (sns.diverging_palette(20, 250, n=8))


bigger = plt.pie(first_sizes, labels=first_labels, colors=flatui,
                 startangle=90, frame=True, radius = 1)


smaller = plt.pie(second_sizes,
                  colors=flatui, radius=0.9,
                  startangle=90, labeldistance=0.9)



smallest = plt.pie(third_sizes,
                  colors=flatui, radius=0.8,
                  startangle=90, labeldistance=0.8)


centre_circle = plt.Circle((0, 0), 0.7, color='white', linewidth=0)


fig = plt.gcf()
fig.gca().add_artist(centre_circle)

plt.axis('equal')
plt.tight_layout()

plt.show()

有人可以建议如何“美化”饼图吗?

【问题讨论】:

    标签: python matplotlib pie-chart donut-chart


    【解决方案1】:

    来自documentation of plt.piethis page

    [...]
    wedgeprops : dict, optional, default: None
    Dict of arguments passed to the wedge objects making the pie. For example, you can pass in wedgeprops = {'linewidth': 3} to set the
    width of the wedge border lines equal to 3. For more details, look at
    the doc/arguments of the wedge object. By default clip_on=False.
    [...]
    

    您可以通过将名为 wedgeprops 的字典输入到您的饼图中来自定义楔形。例如:

    [...] repeating your code [...]
    
    bigger = plt.pie(first_sizes, labels=first_labels, colors=flatui,
                     startangle=90, frame=True, radius = 1,
                    wedgeprops={'edgecolor':'k'})
    
    
    smaller = plt.pie(second_sizes,
                      colors=flatui, radius=0.9,
                      startangle=90, labeldistance=0.9,
                     wedgeprops={'edgecolor':'k'})
    
    
    
    smallest = plt.pie(third_sizes,
                      colors=flatui, radius=0.8,
                      startangle=90, labeldistance=0.8,
                      wedgeprops={'edgecolor':'k'})
    
    centre_circle = plt.Circle((0, 0), 0.7, color='white', linewidth=0)
    
    fig = plt.gcf()
    fig.gca().add_artist(centre_circle)
    
    # add legend to current ax:
    plt.gca().legend(loc='center right', bbox_to_anchor=(1,0,0.5,0.5))
    

    如果您只想要图例中的标签而不是情节:

    # make first pie without labels:
    bigger = plt.pie(first_sizes, colors=flatui,
                     startangle=90, frame=True, radius = 1,
                    wedgeprops={'edgecolor':'k'})
    
    # feed labels to legend:
    plt.gca().legend(first_labels, loc='center right', bbox_to_anchor=(1,0,0.5,0.5))
    

    【讨论】:

    • 漂亮的结果!
    猜你喜欢
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2021-06-05
    相关资源
    最近更新 更多