1. Home
  2. Docs
  3. Python-DataScience
  4. Visualization with Matplotlib
  5. pie chart

pie chart

主要参数

plt.pie(
    x, # 各扇形的数值
    explode=None, # 爆炸分离显示与否,通过bool array指定
    labels=None, # 显示的标签
    colors=None, 
    autopct=None, # 自动计算百分比并按格式显示,例如'%.2f%%'时显示为23.45%
    pctdistance=0.6,
    shadow=False,
    labeldistance=1.1,
    startangle=0,
    radius=1,
    counterclock=True, # 数据放置默认按逆时针
    wedgeprops=None, # 扇形参数
    textprops=None, # 可以通过dict传入字体设置参数
    center=(0, 0),
    frame=False,
    rotatelabels=False,
    *,
    normalize=None,
    data=None,
)

设置填充(用于科研绘图)

这里利用的主要时pyplot的实例化思想,单独修改某个参数。

# 内置的填充种类
patterns = ('/','//','-', '+', 'x', '\\', '\\\\', '*', 'o', 'O', '.')

ax.cla()
fig_nested_pie, ax = plt.subplots(figsize=(16,8))

size = 0.3
FS = 14
PD = 0.85
cmap = plt.get_cmap('tab20')
outer_colors = cmap(np.arange(4)*2)
inner_colors = cmap(np.arange(4)*2+1)
wedge_dic = dict(width=size,edgecolor='w')
font_dic = dict(fontsize=FS,weight='bold')

wedges_num,texts_num,autotexts_num = ax.pie(x=list(sec_counts.values()),autopct='%.2f%%',shadow=False,
                       colors=inner_colors,textprops=font_dic,wedgeprops=wedge_dic,pctdistance=PD,radius=1-size)

# 此处利用了ax.pie返回的第一个参数是wedges的特点
wedges_loss,texts_loss,autotexts_loss =  ax.pie(x=list(loss_counts.values()),radius=1,autopct='%.2f%%',shadow=False,textprops=font_dic,colors=outer_colors,wedgeprops=wedge_dic,pctdistance=PD)

lgd_num = ax.legend(handles=wedges_num,labels=sec_counts.keys(),title='Num Counts',loc='lower right',fontsize='x-large')

ax.add_artist(lgd_num) # 添加到画布,实现一图双legend

ax.legend(handles=wedges_loss,labels=loss_counts.keys(),title='Loss Counts',loc='upper right',fontsize='x-large')

此时的效果

还可以进一步设置图像填充

# 面向对象的设置填充
hatches=['/','//','-', '+']

for wedge,hatch in zip(wedges_num,hatches):
    wedge.set_hatch(hatch)

# 设置边界颜色
for wedge in wedges_num:
    wedge.set_edgecoler('k')

# 设置legend title大小
egend.get_title().set_fontsize(fontsize=18)

# 移除多于的legend
ax.artists.clear()

效果图

图例legend设置

legend(loc  # Location code string, or tuple (see below).
            #  图例所有figure位置。  labels  # 标签名称。
    prop    # the font property.
            #  字体参数
    fontsize  # the font size (used only if prop is not specified).
              #  字号大小。
    markerscale  # the relative size of legend markers vs.
                 # original  图例标记与原始标记的相对大小
    markerfirst  # If True (default), marker is to left of the label.
                 #  如果为True,则图例标记位于图例标签的左侧
    numpoints  # the number of points in the legend for line.
               #  为线条图图例条目创建的标记点数
    scatterpoints  # the number of points in the legend for scatter plot.
                  #  为散点图图例条目创建的标记点数
    scatteryoffsets    # a list of yoffsets for scatter symbols in legend.
                    #  为散点图图例条目创建的标记的垂直偏移量
    frameon    # If True, draw the legend on a patch (frame).
               #  控制是否应在图例周围绘制框架
    fancybox    # If True, draw the frame with a round fancybox.
                #  控制是否应在构成图例背景的FancyBboxPatch周围启用圆边
    shadow    # If True, draw a shadow behind legend.
                #  控制是否在图例后面画一个阴影
    framealpha  # Transparency of the frame.
                #  控制图例框架的 Alpha 透明度
    edgecolor    # Frame edgecolor.
    facecolor    # Frame facecolor.
    ncol    # number of columns.
            #  设置图例分为n列展示
    borderpad    # the fractional whitespace inside the legend border.
                # 图例边框的内边距
    labelspacing    # the vertical space between the legend entries.
                  #  图例条目之间的垂直间距
    handlelength    # the length of the legend handles.
                  #   图例句柄的长度
    handleheight    # the height of the legend handles.
                  #   图例句柄的高度
    handletextpad    # the pad between the legend handle and text.
                    #   图例句柄和文本之间的间距
    borderaxespad    # the pad between the axes and legend border.
                    #  轴与图例边框之间的距离
    columnspacing    # the spacing between columns.
                    #  列间距
    title    # the legend title.
             #  图例标题
    bbox_to_anchor    # the bbox that the legend will be anchored.
                    #  指定图例在轴的位置
    bbox_transform)    # the transform for the bbox.
                    # transAxes if None.

tips:

个人推荐输出纯色填充图像后再用AI修改,更加直观快捷。

Official Docs

https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.pie.html

Was this article helpful to you? Yes No

How can we help?