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])