大家好,本篇的目的是使用python画出如下的饼图,并且介绍其中参数的作用
目录
完整代码
一、导入所需的库
二、中文显示
三、调整图例的大小(长、宽)
四、导入数据
五、绘制饼图+参数介绍 (重点)
六、调整饼图外标签和内标签的字体大小
a的结果如下:
对a的结果进行介绍:
b的结果如下:
对b的结果进行介绍:
c的结果:
对c的结果进行介绍:
(敲黑板啦!) 调整外标签字体大小:
七、添加图例+调整图例字体大小与位置
八、调整标题与图之间的距离
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams['font.sans-serif']='SimHei'#设置中文显示
#设置图例大小,宽,高
plt.figure(figsize=(6,9))
# 数据
data = {
'column1': ['A', 'B', 'C', 'D'],
'column2': [100, 250, 156, 90]
}
df = pd.DataFrame(data)
# 绘制饼图
a,b,c=plt.pie(df["column2"], labels=df["column1"], autopct='%1.1f%%', colors=["red","lightskyblue","blue","yellowgreen"],pctdistance=0.6,shadow=True,labeldistance=1.1,
frame=False,explode = (0.2, 0.1, 0.1, 0.2),textprops={'fontsize': 15},startangle=40)
# sizes = [100, 250, 156, 90]#内标签
# labels = ['A', 'B', 'C', 'D']#外标签
# a,b,c=plt.pie(sizes, labels=labels, autopct='%1.1f%%', colors=["red","lightskyblue","blue","yellowgreen"],pctdistance=0.6,shadow=True,labeldistance=1.1,
# frame=False,explode = (0.2, 0.1, 0.1, 0.2),textprops={'fontsize': 15},startangle=40)
for i in b:
i.set_size(30)
for i in c:
i.set_size(20)
# 添加图例并设置字体大小
plt.legend(df["column1"], fontsize=14,loc='upper right',bbox_to_anchor=(1.5, 1))
plt.title('饼图',fontsize=25,pad=35)#绘制标题
# # 设置字体大小
# plt.rcParams['font.size'] = 20
# plt.axis('equal')这个自己体会一下,影响不大
plt.show()
下边将完整代码拆解开来,分别介绍
import pandas as pd
import matplotlib.pyplot as plt
采用matplotlib绘制饼图
使用pandas处理数据
plt.rcParams['font.sans-serif']='SimHei'#设置中文显示
避免画图时标题等字体不显示,此行代码可以让中文显示出来
作用是设置Python绘图库Matplotlib中的字体为SimHei。这使得绘图中的文本显示为简体中文。
这里的`plt.rcParams`用于配置Matplotlib的参数,`font.sans-serif`表示字体系列,'SimHei'表示具体的字体名称。
plt.figure(figsize=(6,9))
# 数据
data = {
'column1': ['A', 'B', 'C', 'D'],
'column2': [100, 250, 156, 90]
}
df = pd.DataFrame(data)
结果如下:
a,b,c=plt.pie(df["column2"], labels=df["column1"],
autopct='%1.1f%%',
colors=["red","lightskyblue","blue","yellowgreen"],
pctdistance=0.6,shadow=True,labeldistance=1.1,
frame=False,explode = (0.2, 0.1, 0.1, 0.2),
textprops={'fontsize': 15},startangle=40)
plt.title('饼图',fontsize=20)#绘制标题
plt.show()
①data["column2"]:以data的第二列作为绘制饼图的数据,展示数据框(df)中"column2"列的占比情况
②labels=df["column1"]:在绘制饼图时,使用 `df["column1"]` 中的值作为标签。这些标签会显示在饼图的每个部分旁边,帮助用户识别各个部分所代表的数据。
labels是plt.pie()中的一个参数,参数值为df["column1"]
③`autopct`参数用于设置百分比标签的格式,这里设置为`'%1.1f%%'`,表示保留一位小数的百分比。如果你不需要这个功能,可以将其设置为`None`,或者不设置此参数。
④`colors=["red","lightskyblue","blue","yellowgreen"]`:设置饼图的颜色,分别为红色、浅天空蓝、蓝色和黄色绿色。
⑤pctdistance:饼块内标签与圆心的距离。
⑥shadow:饼图下是否有阴影。布尔值。默认值为False。
⑦labeldistance:饼块外标签与圆心的距离。如果设置为None,标签不会显示,但是如果图中有设置图例,图例可以使用标签。(图例怎么设置,下边会进行介绍)
⑧frame:是否绘制子图边框,布尔值。默认为False
⑨explode:控制饼块分离,设置爆炸效果,也就是使饼图的每部分扇形分开,不在圆心聚合。
此例中使每个部分的比例为0.2、0.1、0.1和0.2。
⑩textprops控制外标签字体大小,此例中也就是ABCD的字体大小,
⑪startangle:饼块起始角度。默认值为0,即从x轴开始,逆时针旋转为第一块。
上面代码中a、b、c的具体含义,留到第六节进行介绍,请看下边
上面我们介绍了通过参数textprops控制外标签字体大小,下面我们介绍另一种方法分别调整外标签和内标签的字体大小。
首先我们先来介绍一下a、b、c分别是什么,分别打印输出a、b、c,查看结果
这个结果包含了四个matplotlib.patches.Wedge对象,每个对象的内存地址不同。这些对象是在绘制图形时创建的扇形图。
第一行"at 0x22d9ee6b400"表示这个对象(在这个例子中是matplotlib.patches.Wedge对象)的内存地址。这个地址是一个十六进制数,用于唯一标识这个对象在内存中的位置。
因为我们刚才设置了饼块的起始角度“startangle=40”,比方改一下这个参数,结果就会变,也就是地址就会变。
#
这些对象存储在内存中的地址不同,分别为:
1.0x22d9ee6b400 2.0x22d9ee95970 3.0x22d9ff4d8e0 4.0x22d9ff4d4c0
这是一个表示四个文本框的位置坐标的信息。可以从这些坐标中解析出以下信息:
1. 文本框A的位置:x坐标为0.440330613235106,y坐标为1.2231553258061691。
2. 文本框B的位置:x坐标为-1.196937984635972,y坐标为0.08567065387621148。
3. 文本框C的位置:x坐标为0.5730229693109448,y坐标为-1.0543456153662651。
4. 文本框D的位置:x坐标为1.2675995774046722,y坐标为0.28842904043021794。
稍后用b来调整外标签ABCD的字体大小!
这是一段描述四个文本框位置的文本,文本框中包含四种文字,是饼图的文本标签,分别是:[16.8%、41.9%、26.2%、15.1%]
可以从这些坐标中解析出以下信息
1. 第一个文本标签表示第一个部分占整个饼图的16.8%
坐标为 (-0.17996082887875442, 0.7794960551980181) 的点;
2.第二个文本标签表示第二个部分占整个饼图的41.9%
坐标为 (-0.6820590482982658, -0.1574657252689104) 的点;
3.第三个文本标签表示第三个部分占整个饼图的26.2%。
坐标为 (0.048829557772520085, -0.6982948333531762) 的点;
4.第四个文本标签表示第四个部分占整个饼图的15.1%。
坐标为 (0.7980512355054844, 0.055805246242355014) 的点。
在这里,[16.8%、41.9%、26.2%、15.1%]表示饼图的各个部分所占的比例。
稍后用c来调整内标签(比例)字体大小!
for i in b:
i.set_size(30)
将外标签字体大小设置为30
(敲黑板啦!) 调整内标签字体大小:
将内标签字体大小设置为20
for i in c:
i.set_size(20)
plt.legend(df["column1"], fontsize=14,loc='upper right',bbox_to_anchor=(1.5, 1))
①要设置图例的位置,可以使用plt.legend()函数的loc参数。loc参数接受一个字符串,表示图例的位置
loc参数可选如下:
'upper right':右上
'upper left' :左上
'lower left':左下
'lower right':右下
②除此之外,还可以通过bbox_to_anchor参数调整图例的位置:
bbox_to_anchor参数设置为(1.05, 1),表示图例的位于图形的右上角的某个位置。小伙伴可以根据需要调整这个值。
③fontsize控制图例的大小
④df["column1"]:将数据df中的column1列数据作为标签
plt.title('饼图',fontsize=25,pad=35)#绘制标题
可以通过pad参数来调整标题与图之间的距离。