matplotlib绘图

Matplotlib 是一个 Python 的 2D绘图库

  • 绘制如下图形:
    • 线图:plot()
    • 散点图:scatter()
    • 条形图:bar()
    • 箱线图:baxplot()
    • 饼图:pie()
    • 直方图和密度图:hist()
    • 多图合并显示:subplot()和subplots()

导入相关包

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

中文乱码的处理

#plt.rcParams[‘font.sans-serif’]=[‘PingFang HK’] #mac系统使用
plt.rcParams[‘font.sans-serif’] = [‘Microsoft YaHei’]# windows使用设置微软雅黑字体
plt.rcParams[‘axes.unicode_minus’] = False # 避免坐标轴不能正常的显示负号

线图:plot()

  • 函数功能:展现变量的变化趋势

  • 调用方法:plt.plot(x, y, linestyle, linewidth,color,marker, markersize, markeredgecolor, markerfactcolor, label, alpha)

    • x:指定折线图的x轴数据;
    • y:指定折线图的y轴数据;
    • linestyle:指定折线的类型,可以是实线、虚线、点虚线、点点线等,默认文实线;
    • linewidth:指定折线的宽度
    • marker:可以为折线图添加点,该参数是设置点的形状;
    • markersize:设置点的大小;
    • markeredgecolor:设置点的边框色;
    • markerfactcolor:设置点的填充色;
    • label:为折线图添加标签,类似于图例的作用;
  • 画一条直线

x1 = [1,2,3,4,5]
y1 = [2,4,6,8,10]

plt.plot(x1,y1)
在这里插入图片描述

  • 画一条抛物线

x2 = np.linspace(1,50,num=20).astype(‘int’)
y2 = x2 ** 3 + 3

plt.plot(x2,y2)
在这里插入图片描述

x2 = np.linspace(1,50,num=20).astype(‘int’)
y2 = x2 ** 3 + 3

plt.plot(x2,y2,marker=‘*’) #marker是用来指定点的样式
在这里插入图片描述

  • 用plot方法画出x=(0,10)间sin的图像

x3 = np.linspace(1,50,num=50).astype(‘int’)
y3 = np.sin(x3)

plt.plot(x3,y3)
在这里插入图片描述

  • 用点加虚线的方式画出x=(0,10)间sin的图像
    • #还有其他line的属性:如color,linestyle,linewidth,marker等。

x4 = np.linspace(1,50,num=15).astype(‘int’)
y4 = np.sin(x4)

plt.plot(x4,y4,color=‘red’,alpha=0.5,linestyle=‘:’)
在这里插入图片描述

  • 同时绘制cos和sin图像在同一图中
    • 两条线的要求如下:
      • sin曲线:蓝色,实线,'+'号表示;
      • cos曲线:绿色,虚线,'*'号表示;

x = np.linspace(1,100,num=20)
y = np.sin(x)

yy = np.cos(x)

plt.plot(x,y)
plt.plot(x,yy)

#连续对plot调用多次就可以将多个图例绘制在同一个坐标系中
在这里插入图片描述

  • 给上图添加图例
    • 使用label参数结合这legend方法

x = np.linspace(1,100,num=20)
y = np.sin(x)

yy = np.cos(x)

plt.plot(x,y,label=‘sin正弦’)
plt.plot(x,yy,label=‘cos余弦’)
plt.legend(loc=0)

#连续对plot调用多次就可以将多个图例绘制在同一个坐标系中
在这里插入图片描述

  • 没有线性关系的两组数据的折线图

x = np.random.randint(0,100,size=(20,))
y = np.random.randint(0,100,size=(20,))
plt.plot(x,y)
在这里插入图片描述

  • 图像添加标题、x和y轴的标识

x = np.linspace(1,160,num=20)
y = np.sin(x)

yy = np.cos(x)

plt.plot(x,y,label=‘sin正弦’)
plt.plot(x,yy,label=‘cos余弦’)
plt.legend(loc=0)

plt.xlabel(‘temp温度’)
plt.ylabel(‘dist距离’)
plt.title(‘dist&temp’)
在这里插入图片描述

  • 调整图例的大小比例

x = np.linspace(1,160,num=20)
y = np.sin(x)

yy = np.cos(x)

#调整图例大小
plt.figure(figsize=(10,8))

plt.plot(x,y,label=‘sin正弦’)
plt.plot(x,yy,label=‘cos余弦’)
plt.legend(loc=0)

plt.xlabel(‘temp温度’)
plt.ylabel(‘dist距离’)
plt.title(‘dist&temp’)
在这里插入图片描述

散点图

  • 函数功能:散点图,寻找变量之间的关系

  • 调用方法:plt.scatter(x, y, s, c, marker, cmap, norm, alpha, linewidths, edgecolorsl)

  • 参数说明:

    • x: x轴数据
    • y: y轴数据
    • s: 散点大小
    • c: 散点颜色
    • marker: 散点图形状
    • cmap: 指定某个colormap值,该参数一般不用,用默认值
    • alpha: 散点的透明度
    • linewidths: 散点边界线的宽度
    • edgecolors: 设置散点边界线的颜色
  • 绘制两组100个随机数的散点图

x1 = np.random.randint(0,200,size=(30,))
y1 = np.random.randint(0,200,size=(30,))

plt.scatter(x,y)
在这里插入图片描述

x1 = np.random.randint(0,200,size=(30,))
y1 = x1**2 + 3

plt.scatter(x1,y1)
在这里插入图片描述

  • 多图例的整合

x1 = np.random.randint(0,200,size=(30,))
y1 = x1**2 + 3

plt.scatter(x1,y1)
plt.plot(x1,y1)
在这里插入图片描述

条形图:bar(), barh()

  • 调用方法:plt.bar(x, y, width,color, edgecolor, bottom, linewidth, align, tick_label, align)

  • 参数说明:

    • x:指定x轴上数值
    • y:指定y轴上的数值
    • width:表示条形图的宽度,取值在0~1之间,默认为0.8
    • color:条形图的填充色
    • edgecolor:条形图的边框颜色
    • bottom:百分比标签与圆心距离
    • linewidth:条形图边框宽度
    • tick_label:条形图的刻度标签
    • align:指定x轴上对齐方式,“center”,"edge"边缘
  • 简单垂直条形图

GDP = [36112,38710,14093,25092]
city = [‘北京’,‘上海’,‘天津’,‘重庆’]

plt.bar(city,GDP)
在这里插入图片描述

#给图像添加相关的标识
GDP = [36112,38710,14093,25012]
city = [‘北京’,‘上海’,‘天津’,‘重庆’]

plt.bar(city,GDP,color=‘red’)

plt.xlabel(‘城市名称’)
plt.ylabel(‘城市GDP’)
plt.title(‘城市&GDP’)
在这里插入图片描述

#在柱子上面显示柱高的数值
GDP = [36112,38710,14093,25012]
city = [‘北京’,‘上海’,‘天津’,‘重庆’]

plt.bar(city,GDP,color=‘red’)

plt.xlabel(‘城市名称’)
plt.ylabel(‘城市GDP’)
plt.title(‘城市&GDP’)

for i,j in enumerate(GDP):
#i表示GDP列表的索引,j表示GDP列表的元素
plt.text(i,j+200,j,ha=‘center’) #text()作用是可以在图例的相关位置增加文本内容
#将j表示的文本内容显示在第i根柱子的j+200的位置
在这里插入图片描述

#水平方向的条形图
GDP = [36112,38710,14093,25012]
city = [‘北京’,‘上海’,‘天津’,‘重庆’]

plt.barh(city,GDP,color=‘red’)

箱线图:barplot()

  • 函数功能:反映数据的异常情况;是一种用作显示一组数据分散情况的统计图。因形状如箱子而得名。在各种领域也经常被使用。
    在这里插入图片描述

  • 参数:
    在这里插入图片描述

  • 绘制箱型图

x = [10,10,10,20,20,20,30,40,50,50,50,60,60,60,70,500,600]
plt.boxplot(x)
在这里插入图片描述

饼图

  • 函数功能:表示离散变量各水平占比情况
  • 参数说明:
    • x:指定绘图的数据
    • explode:指定饼图某些部分的突出显示,即呈现爆炸式
    • labels:为饼图添加标签说明,类似于图例说明
    • colors:指定饼图的填充色
    • autopct:自动添加百分比显示,可以采用格式化的方法显示
    • pctdistance:设置百分比标签与圆心的距离
    • shadow:是否添加饼图的阴影效果
    • labeldistance:设置各扇形标签(图例)与圆心的距离;
    • startangle:设置饼图的初始摆放角度;
    • radius:设置饼图的半径大小;
    • counterclock:是否让饼图按逆时针顺序呈现;
    • wedgeprops:设置饼图内外边界的属性,如边界线的粗细、颜色等;
    • textprops:设置饼图中文本的属性,如字体大小、颜色等;
    • center:指定饼图的中心点位置,默认为原点
    • frame:是否要显示饼图背后的图框,如果设置为True的话,需要同时控制图框x轴、y轴的范围和饼图的中心位置;

#简单的饼图
education = [9833, 5631, 3769, 1410, 460]
labels = [‘小学’, ‘初中’, ‘高中’, ‘大学’, ‘研究生及以上’]
plt.pie(education,labels=labels)
在这里插入图片描述

  • 为饼图添加一些参数

#构造数据:某城镇受教育程度
education = [9833, 5631, 3769, 1410, 460]
labels = [‘小学’, ‘初中’, ‘高中’, ‘大学’, ‘研究生及以上’]

explode = [0,0,0,0.6,0.8] # 用于突出显示特定人群
colors=[‘#9999ff’,‘#ff9999’,‘#7777aa’,‘#2442aa’,‘#dd5555’] # 自定义颜色

#绘制饼图
a = plt.pie(x = education, # 绘图数据
explode=explode, # 分割部分距离圆心的距离
labels=labels, # 添加教育水平标签
colors=colors, # 设置饼图的自定义填充色
autopct=‘%.2f%%’, # 设置百分比的格式,这里保留一位小数
pctdistance=0.3, # 设置百分比标签与圆心的距离
labeldistance = 1.15, # 设置教育水平标签与圆心的距离
startangle = 180, # 设置饼图的初始角度
radius = 1.5, # 设置饼图的半径
counterclock = False, # 是否逆时针,这里设置为顺时针方向
wedgeprops = {‘linewidth’: 1.5, ‘edgecolor’:‘green’},# 设置饼图内外边界的属性值
textprops = {‘fontsize’:12, ‘color’:‘k’}, # 设置文本标签的属性值
)
在这里插入图片描述

图像的保存

#1.创建一个fig对象
fig = plt.figure()
#2.画图
education = [9833, 5631, 3769, 1410, 460]
labels = [‘小学’, ‘初中’, ‘高中’, ‘大学’, ‘研究生及以上’]
plt.pie(education,labels=labels)
#3.保存
plt.savefig(‘111.png’)
在这里插入图片描述

直方图/密度图:hist()

  • 函数功能:判定数据的分布情况

  • 参数说明:

    • x:指定要绘制直方图的数据;
    • bins:指定直方图条形的个数;
    • range:指定直方图数据的上下界,默认包含绘图数据的最大值和最小值;
    • density:是否将直方图的频数转换成频率;
    • weights:该参数可为每一个数据点设置权重;
    • cumulative:是否需要计算累计频数或频率;
    • bottom:可以为直方图的每个条形添加基准线,默认为0;
    • histtype:指定直方图的类型,默认为bar,除此还有’barstacked’, ‘step’, ‘stepfilled’;
    • align:设置条形边界值的对其方式,默认为mid,除此还有’left’和’right’;
    • orientation:设置直方图的摆放方向,默认为垂直方向;
    • rwidth:设置直方图条形宽度的百分比;
    • log:是否需要对绘图数据进行log变换;
    • color:设置直方图的填充色;
    • label:设置直方图的标签,可通过legend展示其图例;
    • stacked:当有多个数据时,是否需要将直方图呈堆叠摆放,默认水平摆放;
  • 绘制简单频数直方图

x = [1,1,1,2,2,2,2,2,2,3,3,4,5]
plt.hist(x,bins=9)
在这里插入图片描述

  • hist()函数会返回三组结果:
    • 返回值1:原始数据在不同区间存在的元素个数
    • 返回值2:表示每根柱子对应的数值区间
    • 返回值3:直方图图像

多图合并显示:subplot()和subplots()

  • subplot()函数多次绘制多图

ax1 = plt.subplot(2,2,1) #创建了一个2行2列的表格,然后在表格的第1个位置显示图例
#折线图
x1 = np.linspace(0,10,30)
y1 = x1**2 + 3
ax1.plot(x1,y1)

ax2 = plt.subplot(2,2,2)
#散点图
ax2.scatter(x1,y1)

#直方图
ax3 = plt.subplot(2,2,3)
ax3.hist(x1)

#饼图
ax4 = plt.subplot(2,2,4)
ax4.pie([11,22,33])
在这里插入图片描述

  • 35
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ak2111

你的鼓励将是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值