饼图图例自由定义方式
在使用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 left、upper right、lower left、center、center left、center right、lower center、upper center等。
3.自定义饼图图例大小
除了位置以外,有时候我们还需要根据具体情况自定义饼图图例的大小。可以通过legend()函数的fontsize参数来实现:
#显示图例(设置字号为12)
plt.legend(fontsize=12)
上述代码中,我们设置了图例的字号为12。
4.自定义饼图图例颜色、边框和阴影
在默认情况下,饼图的每个扇形会自动分配一种颜色,并且没有边框和阴影效果。如果需要自定义这些效果,可以通过修改wedgeprops参数来实现。该参数接受一个字典,包含linewidth、edgecolor和facecolor三个参数。
例如,如果我们想要设置边框宽度为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()方法设置了文本字体属性(字号、颜色、粗细)。最终结果显示出来的图例中,每个标签都会显示当前扇形数值的百分比。
总结
无论是在什么场景下,图例都是展示数据的重要组成部分。在绘制饼图时,我们需要根据实际情况灵活调整图例的位置、大小、颜色、边框、阴影、标记和文本等属性,以便更好地解释和传达数据信息。以上就是一些常见的饼图图例自由定义方法,希望对大家有所启发。