【matplotlib】饼图+legend()、loc、color位置颜色图例中文显示(一个饼图的例子)

博客已经搬家到“捕获完成”:

https://www.v2python.com

 

1、原来自己做的饼图:http://mp.blog.csdn.net/postedit/79222127

     见文章:matplotlib 中文显示-负号显示(统计微信好友性别,饼图显示)

 

2、看到网上的图,他的有图例,所以想按照他的这个进行修改

 

3、搜寻方法,找到解决办法,即添加legend:

 

#关键就是在于这里:添加一个图例
plt.legend(loc='best')

     

4、调试图例的位置

在legend的参数中, loc参数设置图例的显示位置的:
 plt.legend([l1, l2], ['first', 'second'], loc = 'upper right')             #其中,loc表示位置的;
'best'         : 0, (only implemented for axes legends)(自适应方式)
'upper right'  : 1,
'upper left'   : 2,
'lower left'   : 3,
'lower right'  : 4,
'right'        : 5,
'center left'  : 6,
'center right' : 7,
'lower center' : 8,
'upper center' : 9,
'center'       : 10,

 

5、显示中文,中文的格式、显示负号

 

 

#coding:utf-8
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
#有中文出现的情况,需要u'内容'
labels = u'男性好友', u'女性好友', u'未填性别'
下面是Windows的字体对应名称,Follow your heart, 各种换!
黑体	SimHei
微软雅黑	Microsoft YaHei
微软正黑体	Microsoft JhengHei
新宋体	NSimSun
新细明体	PMingLiU
细明体	MingLiU
标楷体	DFKai-SB
仿宋	FangSong
楷体	KaiTi
仿宋_GB2312	FangSong_GB2312
楷体_GB2312	KaiTi_GB2312

 

6、颜色,显示颜色

 

colors = ['red','yellowgreen','lightskyblue']
plt.pie(sizes,explode=explode,labels=labels,colors=colors,
         labeldistance = 1.1,autopct = '%3.1f%%',shadow = False,
         startangle = 90,pctdistance = 0.6)

 

7-1、第一次改进(改进了图形颜色,并添加了图例)

 

 

# -*- coding: UTF-8 -*-
import matplotlib.pyplot as plt

#显示中文  YaHei  JhengHei
plt.rcParams['font.sans-serif']=['Microsoft JhengHei']

male = 70
female = 20
other = 10
total = 100

# Pie chart, where the slices will be ordered and plotted counter-clockwise:
labels =[ u'男性', u'女性', u'未填']
sizes = [male,female,other]
colors = ['cornflowerblue','orange','limegreen']
explode = (0, 0.1, 0)


fig1, ax1 = plt.subplots()

'''ax1.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%',
        shadow=True, startangle=90)'''
#相对于,去掉了阴影shadow=True

ax1.pie(sizes, explode=explode, labels=labels, colors=colors,
        autopct='%1.1f%%', shadow=False, startangle=90)
ax1.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle.


#关键就是在于这里:添加一个图例

plt.legend(loc='upper right')

plt.show()

7-2 第二次改进(改进了文字颜色)

 

# -*- coding: UTF-8 -*-
import matplotlib.pyplot as plt

# 显示中文  YaHei  JhengHei
plt.rcParams['font.sans-serif'] = ['Microsoft JhengHei']

male = 70
female = 20
other = 10
total = 100

# Pie chart, where the slices will be ordered and plotted counter-clockwise:
labels = [u'男性', u'女性', u'未填']
sizes = [male, female, other]
colors = ['cornflowerblue', 'orange', 'limegreen']
explode = (0, 0.1, 0)

fig1, ax1 = plt.subplots()

'''''ax1.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', 
        shadow=True, startangle=90)'''
# 相对于,去掉了阴影shadow=True

ax1.pie(sizes,
        explode=explode,
        labels=labels,
        colors=colors,
        autopct='%1.1f%%',
        shadow=False,
        startangle=90,
        textprops={'fontsize': 12, 'color': 'w'},  # 设置文本标签的属性值,并且设置为白色
        )

ax1.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle.

# 关键就是在于这里:添加一个图例

plt.legend(loc='upper right')

plt.show()

 

 

8、补充第一个例子:

 

 

 

from matplotlib import pyplot as plt 

#调节图形大小,宽,高
plt.figure(figsize=(6,9))
#定义饼状图的标签,标签是列表
labels = [u'第一部分',u'第二部分',u'第三部分']
#每个标签占多大,会自动去算百分比
sizes = [60,30,10]
colors = ['red','yellowgreen','lightskyblue']
#将某部分爆炸出来, 使用括号,将第一块分割出来,数值的大小是分割出来的与其他两块的间隙
explode = (0.05,0,0)

patches,l_text,p_text = plt.pie(sizes,explode=explode,labels=labels,colors=colors,
                                labeldistance = 1.1,autopct = '%3.1f%%',shadow = False,
                                startangle = 90,pctdistance = 0.6)

#labeldistance,文本的位置离远点有多远,1.1指1.1倍半径的位置
#autopct,圆里面的文本格式,%3.1f%%表示小数有三位,整数有一位的浮点数
#shadow,饼是否有阴影
#startangle,起始角度,0,表示从0开始逆时针转,为第一块。一般选择从90度开始比较好看
#pctdistance,百分比的text离圆心的距离
#patches, l_texts, p_texts,为了得到饼图的返回值,p_texts饼图内部文本的,l_texts饼图外label的文本

#改变文本的大小
#方法是把每一个text遍历。调用set_size方法设置它的属性
for t in l_text:
    t.set_size=(30)
for t in p_text:
    t.set_size=(20)
# 设置x,y轴刻度一致,这样饼图才能是圆的
plt.axis('equal')
plt.legend()
plt.show()


 

 

 

 

9、补充第二个例子

 

饼图的绘制可以使用matplotlib库中的pie函数

 

plt.pie(x, explode=None, labels=None, colors=None, 
        autopct=None, pctdistance=0.6, shadow=False, 
        labeldistance=1.1, startangle=None, 
        radius=None, counterclock=True, wedgeprops=None, 
        textprops=None, center=(0, 0), frame=False)


x:指定绘图的数据;

explode:指定饼图某些部分的突出显示,即呈现爆炸式;

labels:为饼图添加标签说明,类似于图例说明;

colors:指定饼图的填充色;

autopct:自动添加百分比显示,可以采用格式化的方法显示;

pctdistance:设置百分比标签与圆心的距离;

shadow:是否添加饼图的阴影效果;

labeldistance:设置各扇形标签(图例)与圆心的距离;

startangle:设置饼图的初始摆放角度;

radius:设置饼图的半径大小;

counterclock:是否让饼图按逆时针顺序呈现;

wedgeprops:设置饼图内外边界的属性,如边界线的粗细、颜色等;

textprops:设置饼图中文本的属性,如字体大小、颜色等;

center:指定饼图的中心点位置,默认为原点

frame:是否要显示饼图背后的图框,如果设置为True的话,需要同时控制图框x轴、y轴的范围和饼图的中心位置
# 导入第三方模块
import matplotlib.pyplot as plt

# 设置绘图的主题风格(不妨使用R中的ggplot分隔)
plt.style.use('ggplot')

# 构造数据
edu = [0.2515,0.3724,0.3336,0.0368,0.0057]
labels = ['中专','大专','本科','硕士','其他']

explode = [0,0.1,0,0,0]  # 用于突出显示大专学历人群
colors=['#9999ff','#ff9999','#7777aa','#2442aa','#dd5555'] # 自定义颜色

# 中文乱码和坐标轴负号的处理
plt.rcParams['font.sans-serif'] = ['Dengxian']
plt.rcParams['axes.unicode_minus'] = False

# 将横、纵坐标轴标准化处理,保证饼图是一个正圆,否则为椭圆
plt.axes(aspect='equal')

# 控制x轴和y轴的范围
plt.xlim(0,5)
plt.ylim(0,5)

# 绘制饼图
plt.pie(x = edu, # 绘图数据
        explode=explode, # 突出显示大专人群
        labels=labels, # 添加教育水平标签
        colors=colors, # 设置饼图的自定义填充色
        autopct='%.1f%%', # 设置百分比的格式,这里保留一位小数
        pctdistance=0.8,  # 设置百分比标签与圆心的距离
        labeldistance = 1.4, # 设置教育水平标签与圆心的距离
        startangle = 180, # 设置饼图的初始角度
        radius = 1.5, # 设置饼图的半径
        counterclock = False, # 是否逆时针,这里设置为顺时针方向
        wedgeprops = {'linewidth': 1.5, 'edgecolor':'black'},# 设置饼图内外边界的属性值
        textprops = {'fontsize':12, 'color':'k'}, # 设置文本标签的属性值
        center = (2.5, 2.5), # 设置饼图的原点
        frame = 1 )# 是否显示饼图的图框,这里设置显示

# 删除x轴和y轴的刻度
plt.xticks(())
plt.yticks(())
# 添加图标题
plt.title('芝麻信用失信用户教育水平分布')

# 显示图形
plt.show()

         

 

 

 

 

参考资料:

matplotlib中的legend()——用于显示图例
https://www.cnblogs.com/yinheyi/p/6792120.html

知乎视角下的清华2017
https://mp.weixin.qq.com/s/UsMT9H__wFQ3RYBU7wpiQQ

python如何在matplotlib中绘制图例legend?
https://jingyan.baidu.com/article/f00622280d3cd5fbd3f0c8ff.html

python_使用matplotlib画饼状图(pie)
https://www.jianshu.com/p/0a76c94e9db7

matplotlib中的legend()——用于显示图例
https://www.cnblogs.com/yinheyi/p/6792120.html

  • 27
    点赞
  • 168
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值