python 画图 图例自由定义方式

饼图图例自由定义方式

在使用Python画图时,各种图表类型都需要配合图例,图例通常位于图表的一侧或者底部,帮助我们更好地理解和解释数据。而在绘制饼图时,图例的位置与大小尤为重要,因为饼图由多个扇形组成,必须通过图例来标识每个扇形所代表的数据。

1.基础饼图图例设置

首先,我们来看一下如何在Python中生成一个简单的饼图,并添加图例。我们可以使用matplotlib库中的pie()函数来实现:

import matplotlib.pyplot as plt

#构造数据

data = [20, 30, 50]

#设置标签

label = ['A', 'B', 'C']

#绘制饼图

plt.pie(data, labels=label)

#显示图例

plt.legend()

#显示图形

plt.show()

上述代码中,我们首先构造了一个包含3个元素的列表,代表了3个数据。然后,我们使用pie()函数绘制了一个简单的饼图,并使用label参数指定了每个扇形的标签。最后,我们使用legend()函数显示了图例。执行上述代码后,会在窗口中显示一个包含3个扇形的饼图,每个扇形都有对应的标签。

2.自定义饼图图例位置

有时候,我们并不想让图例显示在默认的位置,例如右上角。在这种情况下,我们可以通过loc参数来设置图例的位置。该参数可以接受一个字符串常量,表示图例应该显示在哪个位置。例如,如果我们想将图例放到右下角,可以这样设置:

#显示图例(右下角)

plt.legend(loc='lower right')

除了lower right以外,常见的图例位置还包括:upper leftupper rightlower leftcentercenter leftcenter rightlower centerupper center等。

3.自定义饼图图例大小

除了位置以外,有时候我们还需要根据具体情况自定义饼图图例的大小。可以通过legend()函数的fontsize参数来实现:

#显示图例(设置字号为12)

plt.legend(fontsize=12)

上述代码中,我们设置了图例的字号为12。

4.自定义饼图图例颜色、边框和阴影

在默认情况下,饼图的每个扇形会自动分配一种颜色,并且没有边框和阴影效果。如果需要自定义这些效果,可以通过修改wedgeprops参数来实现。该参数接受一个字典,包含linewidthedgecolorfacecolor三个参数。

例如,如果我们想要设置边框宽度为2、边框颜色为黑色、扇形颜色为灰色、阴影效果为关闭,可以这样设置:

#定义图形颜色、边框和阴影

wedgeprops = {'linewidth':2, 'edgecolor':'black', 'facecolor':'gray', 'shadow':False}

#绘制饼图并定义图例

plt.pie(data, labels=label, autopct='%.0f%%', wedgeprops=wedgeprops)

plt.legend()

plt.show()

5.自定义图例标记

在默认情况下,图例的标记(也就是表示每个扇形标签的小方块)会自动根据扇形颜色绘制。如果需要自定义标记形状或颜色,可以通过在legend()函数中使用handles参数来实现。该参数接受一个Line2D对象列表,每个对象代表一个标记。可以使用handles参数来添加图例,并通过修改对象属性来自定义每个标记的颜色、形状等。

例如,如果我们想要将默认的方形标记改为圆形,并且设置每个标记的颜色为白色,可以这样设置:

#绘制饼图

patches, texts, autotexts = plt.pie(data, labels=label, autopct='%.0f%%', wedgeprops=wedgeprops)

#自定义标记

from matplotlib.lines import Line2D

import matplotlib.patches as mpatches

handles = [mpatches.Circle(xy=(0.5, 0.5), radius=0.2, facecolor='white', edgecolor='black') for i in range(len(label))]

#显示图例

plt.legend(handles=handles, labels=label)

#显示图形

plt.show()

上述代码中,我们使用Circle对象创建了一个白色的圆形标记,并将其作为列表元素添加到handles参数中。最终结果显示出来的图例标记就是一组白色的圆形。

6.自定义图例文本

有时候,我们还需要自定义图例中的文本内容。例如,可能需要在标签中添加一些额外的信息,或者在数据比例非常小的情况下,需要主动添加一个“其他”标签,以便更好地表达数据。

在matplotlib库中,我们可以使用Text对象来创建自定义的图例文本。该对象通常被用于在图形的任意位置上添加文本,但是它也可以被用于图例中:

#构造文本对象

txt = [plt.text(0, 0, '', va='center') for i in range(len(label))]

#定义图例文本信息

text_props = {'fontsize':12, 'color':'black', 'weight':'bold'}

#自定义图例文本

for i, t in enumerate(txt):

t.set_text('{} ({:.1f}%)'.format(label[i], data[i] / sum(data) * 100))

t.set_position((1.1, 1.1 - i * 0.05))

t.set_bbox(dict(facecolor='gray', alpha=0.5))

t.set_fontdict(text_props)

#显示图例

plt.legend()

plt.show()

上述代码中,我们使用text()函数创建了一个包含所有标签的Text对象列表,然后分别对每个对象进行了自定义。具体地,我们使用set_text()方法设置了文本内容,使用set_position()方法设置了文本位置,使用set_bbox()方法添加了文本背景色及透明度,使用set_fontdict()方法设置了文本字体属性(字号、颜色、粗细)。最终结果显示出来的图例中,每个标签都会显示当前扇形数值的百分比。

总结

无论是在什么场景下,图例都是展示数据的重要组成部分。在绘制饼图时,我们需要根据实际情况灵活调整图例的位置、大小、颜色、边框、阴影、标记和文本等属性,以便更好地解释和传达数据信息。以上就是一些常见的饼图图例自由定义方法,希望对大家有所启发。

后端开发标签