python——Matplotlib饼图、直方图的绘制

实验环境

python 3.6

matplotlib 2.2.3

饼图的绘制

matplotlib.pyplot.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轴的范围和饼图的中心位置;

芝麻信用失信用户的分析

我们借用芝麻信用近300万失信人群的样本统计数据,该数据显示,从受教育水平上来看,中专占比25.15%,大专占比37.24%,本科占比33.36%,硕士占比3.68%,剩余的其他学历占比0.57%。

# 导入包
import matplotlib.pyplot as plt
# 设置绘图的主题风格
plt.style.use("ggplot")
# 构造数据
edu = [0.2515,0.3724,0.3336,0.0368,0.0057]
labels = ["中专","大专","本科","硕士","其他"]

explode = [0,0.05,0,0,0] # 用于突出显示大专学历人群

colors = ['#9999ff','#ff9999','#7777aa','#2442aa','#dd5555'] # 自定义颜色

# 中文乱码和坐标轴负号处理
plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.rcParams['axes.unicode_minus'] = False
# 将横、纵坐标轴标准化处理,保证饼图是一个正圆,否则为椭圆
plt.axes(aspect = "equal")

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

# 绘制饼图
plt.pie(x = edu,# 绘图数据
        explode=explode, #突出显示大专人群
        labels = labels,# 添加教育水标签
        colors = colors,# 设置饼图的自定义填充色
        autopct='%.1f%%',# 设置百分比格式,这里保留一位小数
        pctdistance = 0.8,# 设置百分比标签与圆心的距离
        labeldistance = 1.1,# 设置教育水平标签与圆心的距离,1.1指1.1倍半径的位置
        startangle = 180,# 设置饼图的初始角度
        radius = 3.3,# 设置饼图的半径
        counterclock = False,# 是否逆时针,这里设置为顺时针方向
        wedgeprops = {'linewidth': 0.1, 'edgecolor':'green'},# 设置饼图内外边界的属性值
        textprops = {'fontsize':12, 'color':'k'},# 设置文本标签的属性值
        center = (4,4),# 设置饼图的原点
        shadow = False, #在饼图下面画一个阴影。默认值:False,即不画阴影;
        frame = 1 )# 是否显示饼图的图框 ,这里设置显示
# 删除x轴和y轴的刻度        
plt.xticks(())
plt.yticks(())
plt.legend()
# 添加图标签
plt.title("芝麻信用失信用户教育水平分布")
plt.show()# 显示图形

在这里插入图片描述

直方图的绘制

matplotlib.pyplot.hist(x, bins=10, range=None, normed=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False)

  • x:指定要绘制直方图的数据;

  • bins:指定直方图条形的个数;

  • range:指定直方图数据的上下界,默认包含绘图数据的最大值和最小值;

  • normed:是否将直方图的频数转换成频率;

  • weights:该参数可为每一个数据点设置权重;

  • cumulative:是否需要计算累计频数或频率;

  • bottom:可以为直方图的每个条形添加基准线,默认为0;

  • histtype:指定直方图的类型,默认为bar,除此还有’barstacked’, ‘step’, ‘stepfilled’;

  • align:设置条形边界值的对其方式,默认为mid,除此还有’left’和’right’;

  • orientation:设置直方图的摆放方向,默认为垂直方向;

  • rwidth:设置直方图条形宽度的百分比;

  • log:是否需要对绘图数据进行log变换;

  • color:设置直方图的填充色;

  • label:设置直方图的标签,可通过legend展示其图例;

  • stacked:当有多个数据时,是否需要将直方图呈堆叠摆放,默认水平摆放;

使用titanic数据集

一元直方图的绘制

# 导入第三方包
import numpy as np
import pandas as pd 
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
# 中文和负号的正常显示
plt.rcParams["font.sans-serif"] = ["KaiTi"]
plt.rcParams["axes.unicode_minus"] = False
# 读取泰坦尼克数据集
titanic = pd.read_csv("train.csv")
# 检查年龄是否有缺失
age_isnull = any(titanic.Age.isnull())
print("年龄是否有缺失:",age_isnull)
# 删除年龄确实的样本
titanic.dropna(subset=["Age"],inplace=True) 
年龄是否有缺失: True
# 设置图形的显示风格
plt.style.use('ggplot')
# 绘图:乘客年龄的频数直方图
plt.hist(titanic.Age, # 绘图数据
        bins = 20, # 指定直方图的条形数为20个
        color = 'steelblue', # 指定填充色
        edgecolor = 'k', # 指定直方图的边界色
        label = '直方图' )# 为直方图呈现标签

# 去除图形顶部边界和右边界的刻度
plt.tick_params(top='off', right='off')
# 显示图例
plt.legend()
# 显示图形
plt.show()

在这里插入图片描述

上图绘制的是年龄的频数直方图,从整体的分布来看,有点像正态分布,两边低中间高的倒钟形状。

二元直方图的绘制

如果想对比男女乘客的年龄直方图的话,我们可以通过两个hist将不同性别的直方图绘制到一张图内

# 提取不同性别的年龄数据
age_female = titanic.Age[titanic.Sex == "female" ]
age_male = titanic.Age[titanic.Sex == "male" ]
# 设置直方图的组距
bins = np.arange(titanic.Age.min(),titanic.Age.max(),2)
# 男性乘客年龄的直方图
plt.hist(age_male,bins = bins,label = "男性",color = "blue",alpha = 0.5)
# 女性乘客年龄的直方图
plt.hist(age_female,bins = bins,label = "女性",color = "r",alpha = 0.8)

# 设置坐标轴标签和标题
plt.title("乘客年龄直方图")
plt.xlabel("年龄")
plt.ylabel("人数")

# 去除图形顶部边界和右部边界的刻度
plt.tick_params(top = "off",right = "off")
# 显示图例
plt.legend()
# 显示图形
plt.show()

在这里插入图片描述

图中结果反映不同年龄组内几乎都是男性乘客比女性乘客要多;同时,也说明男女性别的年龄组分布几乎一致

本文章主要作为学习历程的记录,如有侵权,请联系作者删除,原文地址https://www.kesci.com/home/project/59f6f21bc5f3f511952c2966

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MatplotlibPython 中常用的绘库之一,可以用于绘制各种类型的形。以下是 Matplotlib 绘制常见形的基本原理和设计说明: 1. 折线 折线用于展示数据随时间或其他变量的变化趋势。绘制折线的基本原理是通过 `plt.plot()` 函数绘制数据点的连续线条。在绘时,可以设置线条的颜色、线型、标记点等属性,以便更好地展示数据。 2. 散点 散点用于展示数据点之间的关系。绘制散点的基本原理是通过 `plt.scatter()` 函数绘制数据点的位置和颜色等属性。在绘时,可以设置数据点的大小、颜色、标记形状等属性,以便更好地展示数据。 3. 条形 条形用于展示不同类别之间的数据比较。绘制条形的基本原理是通过 `plt.bar()` 函数绘制每个类别的数据条。在绘时,可以设置条形的宽度、颜色、边框等属性,以便更好地展示数据。 4. 用于展示各类别数据所占比例。绘制的基本原理是通过 `plt.pie()` 函数绘制每个类别的数据所占比例。在绘时,可以设置的大小、颜色、标签等属性,以便更好地展示数据。 5. 直方图 直方图用于展示数据的分布情况。绘制直方图的基本原理是通过 `plt.hist()` 函数绘制数据的频率直方图。在绘时,可以设置直方图的宽度、颜色、边界、标签等属性,以便更好地展示数据。 总的来说,Matplotlib 绘制常见形的基本原理是通过调用各种绘函数,设置各种绘属性,以便更好地展示数据。在使用 Matplotlib时,需要对不同类型的形有一定的了解,在实际绘制时需要根据数据特点和展示目的进行调整和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值