Matplotlib数据可视化基础

参考《Python数据分析与应用》

Matplotlib首次发表于2007年,在函数设计上参考里MATLAB,其名字以“Mat”开头,中间的“plot”表示绘图这一作用,而结尾的“lib”则表示它是一个集合。
Matplotlib中应用最广的是matplotlib.pyplot模块。pyplot是一个命令风格函数的集合,使Matplotlib更像MATLAB。

基础语法及常用参数

基础语法

1.创建画布与创建子图

可以指定画布的大小、像素及在同一副图中绘制多个图形。

函数名称函数作用
plt.figure创建一个空白画布,可以指定画布的大小、像素
figure.add_subplot创建并选中子图,可以指定子图的行数、列数和选中图片的编号

2.添加画布内容

其中各项步骤是并列的,没有先后顺序,但是添加图例一定要在绘制图形之后。

pylot中添加各类标签和图例的常用函数
函数名称函数作用
plt.title在当前图形中添加标题,可以指定标题的名称、位置、颜色、字体大小等参数
plt.xlable在当前图形中添加x轴名称,可以指定位置、颜色、字体大小等参数
plt.ylable在当前图形中添加y轴名称,可以指定位置、颜色、字体大小等参数
plt.xlim指定当前图形x轴的范围,只能确定一个数值区间,而无法使用字符串标识
plt.ylim指定当前图形y轴的范围,只能确定一个数值区间,而无法使用字符串标识
plt.xticks指定x轴刻度的数目与取值
plt.yticks指定y轴刻度的数目与取值
plt.legend指定当前图形的图例,可以指定图例的大小、位置、标签

3.保存与显示图形

函数名称函数作用
plt.savafig保存绘制的图形,可以指定图形的分辨率、边缘的颜色等参数
plt.show在本机显示图形

下面展示 基础绘图语法

import numpy as np
import matplotlib.pyplot as plt

data = np.arange(0, 1.1, 0.01)
plt.title('lines', fontsize=24) 
#添加顶部标题,第一个参数为标题,第二个参数设定字体大小

plt.xlabel('x', fontsize=14) #添加x轴的名称
plt.ylabel('y', fontsize=14) #添加y轴的名称

plt.xlim((0,1)) #确定x轴的范围
plt.ylim((0,1)) #确定y轴的范围

plt.xticks([0,0.2,0.4,0.6,0.8,1]) #确定x轴的刻度
plt.yticks([0,0.2,0.4,0.6,0.8,1]) #确定y轴的刻度
plt.tick_params(axis='both', labelsize=14) #设定刻度标记大小

plt.plot(data, data**2 , linewidth=5) 
#添加y=x^2的曲线,第一个参数为x轴数据,第二个参数为y轴数据,第三个参数设定线条宽度
plt.plot(data, data**4, linewidth=5) #添加y=x^4的曲线

plt.legend(['y=x^2','y=x^4']) #添加图例

plt.savefig('squares_x.png', bbox_inches='tight') 
#保存图形,第一个参数为文件名,第二个参数表示将多余的空白裁剪掉
plt.show() #显示图形

以下为运行结果
在这里插入图片描述
下面展示 包含子图的基础绘图语法

import numpy as np
import matplotlib.pyplot as plt

rad = np.arange(0, np.pi*2, 0.01)
#第一幅子图
pl = plt.figure(figsize=(8,6), dpi=80) #确定画布大小
axl = pl.add_subplot(2,1,1) #创建一个2行1列的子图,并开始绘制第一幅
plt.title('lines') #添加标题
plt.xlabel('x') #添加x轴名称
plt.ylabel('y') #添加y轴名称
plt.xlim((0,1)) #确定x轴范围
plt.ylim((0,1)) #确定y轴范围
plt.xticks([0,0.2,0.4,0.6,0.8,1]) #确定x轴的刻度
plt.yticks([0,0.2,0.4,0.6,0.8,1]) #确定y轴的刻度
plt.plot(rad, rad**2) #添加y=x^2的曲线
plt.plot(rad, rad**4) #添加y=x^4的曲线
plt.legend(['y=x^2', 'y=x^4'])
#第二幅子图
ax2 = pl.add_subplot(2,1,2) #开始绘制第二幅
plt.title('sin/cos') #添加标题
plt.xlabel('rad') #添加x轴标题
plt.ylabel('value') #添加y轴标题
plt.xlim((0,np.pi*2)) #确定x轴范围
plt.ylim((-1,1)) #确定y轴范围
plt.xticks([0,np.pi/2,np.pi,np.pi*1.5,np.pi*2]) #确定x轴刻度
plt.yticks([-1,-0.5,0,0.5,1]) #确定y轴刻度
plt.plot(rad,np.sin(rad)) #添加sin曲线
plt.plot(rad,np.cos(rad)) #添加cos曲线
plt.legend(['sin','cos'])
plt.savefig('sincos.png')
plt.show()

以下为运行结果
在这里插入图片描述

设置pyplot的动态rc参数

pyplot使用rc配置文件来自定义图形的各种默认属性,被称为rc配置或rc参数。
默认rc参数可以在Python交互环境中动态更改。所有存储在字典变量中的rc参数,都被称为rcParams
原图

#原图
x = np.linspace(0, 4*np.pi) #生成x轴数据
y = np.sin(x) #生成y轴数据
plt.plot(x,y,label="$sin(x)$") #绘制sin曲线图
plt.title('sin')
plt.savefig('sin.png')
plt.show()

在这里插入图片描述
修改rc参数后的图

#修改rc参数后的图
x = np.linspace(0, 4*np.pi) #生成x轴数据
y = np.sin(x) #生成y轴数据

#修改rc参数
plt.rcParams['lines.linestyle'] = '-.' #将线条设置为点划线
plt.rcParams['lines.linewidth'] = 3 #设置线条宽度
plt.rcParams['font.sans-serif'] = 'SimHei' #设置字体为SimHei
plt.rcParams['axes.unicode_minus'] = False #设置正常显示符号,显示中文
#默认的pyplot字体并不支持中文字符的显示

plt.plot(x,y,label="$sin(x)$") #绘制sin曲线图
plt.title('sin曲线')
plt.savefig('sin.png')
plt.show()

在这里插入图片描述
线条常用的rc参数名称

rc参数名称解释取值
lines.linewidth线条宽度取0~10之间的数值,默认为1.5
lines.linestyle线条样式实线: ‘-’ , 长虚线 ‘–’,点划线 ‘-.’,短虚线 ‘:’
lines.marker线条上点的形状参照下表,默认为None
lines.markersize点的大小取0~10之间的数值,默认为1

line.marker参数取值及意义

lines.marker取值意义lines.marker取值意义
’ o ’圆圈’ . ’
’ D ’菱形’ s ’正方形
’ h ’六边形1’ * ’星号
’ H ’六边形2’ d ’小菱形
’ - ’水平线’ v ’一角朝下的三角形
’ 8 ’八边形’ < ’一角朝左的三角形
’ p ’五边形’ > ’一角朝右的三角形
’ , ’像素’ ^ ’一角朝上的三角形
’ + ’加号’ \ ’竖线
’ None ’’ x ’X

分析特征间的关系

散点图主要用于分析特征间的相关关系
折线图则用于分析自变量特征和因变量特征之间的趋势关系

绘制散点图

散点图是以一个特征为横坐标,以另一个特征为纵坐标,利用坐标点(散点)的分布形态反应特征间的统计关系的一种图形。
散点图可以提供两类关键信息:
(1)特征之间是否存在数值或者数量的关联趋势,关联趋势是线性的还是非线性的。
(2)如果某个点或者某几个点偏离大多数点,则这些点就是离群值,通过散点图可以一目了然,从而可以进一步分析这些离群值是否在建模分析中产生很大的影响。
pyplot中绘制散点图的函数为scatter,语法如下:

matplotlib.pyplot.scatter(x, y, s=None, c=None, 
marker=None, cmap=None, norm=None, vmin=None, Vmax=None,
alpha=None, linewidths=None, verts=None, edgecolors=None,
hold=None,**kwargs)
参数名称说明
x,y接收x轴和y轴对应的数据。无默认
s接收数值或者一维的array。指定点的大小,若传入一维array,则表示每个点的大小。默认为None
c接收颜色或者一维的array。指定点的颜色,若传入一维array,则表示每个点的颜色。默认为None。
颜色还可以设置为一个元组(a,b,c),其中a,b,c为三个0~1之间的数值,表示红色、绿色和蓝色分量。
cmap颜色映射,在参数c接收一个array时,可以设定一个颜色,根据array中数值的大小来显示颜色的深浅。例:c=y, cmap=plt.cm.Blues。
详细的颜色映射可参考链接
marker接收特定的string。表示绘制的点的类型。默认为None
alpha接收0~1的小数。表示点的透明度。默认为None
edgecolor表示点的轮廓。‘none’ 表示删除点的轮廓

绘制折线图

折线图是一种将数据点按照顺序连接起来的图形。折线图的主要功能是查看因变量y随着自变量x改变的趋势,最适合用于显示随时间而变化的连续数据。同时还可以看出数量的差异,增长趋势的变化。
基本语法:

matplotlib.pyplot.plot(*args, **kwargs)

plot函数在官方文档的语法中只要输入不定长参数,实际可以输入的参数主要如下表所示。

参数名称说明
x,y接收array。表示x轴和y轴对应的数据。无默认
color接收特定的string。指定线条的颜色。默认为None
linestyle接收特定string。指定线条类型。线条类型同rc参数。默认为 ‘-’
marker接收特定string。表示绘制的点的类型。点的类型同rc参数。默认为None
alpha接收0~1的小数。表示点的透明度。默认为None

color参数常用颜色

颜色缩写代表的颜色颜色缩写代表的颜色
’ b ’蓝色’ m ’品红
’ g ’绿色’ y ’黄色
’ r ’红色’ k ’黑色
’ c ’青色’ w ’白色

分析特征内部数据分布与分散情况

直方图

直方图又称质量分布图。用直方图可以比较直观的看出产品质量特性的分布状态,便于判断其总体质量分布情况。
基本使用语法如下。

matplotlib.pyplot.bar(left, height, width = 0.8, bottom = None,
	hold = None, data = None, **kwargs)
参数名称说明
left接收array。表示x轴的数据。无默认
height接收array。表示x轴所代表数据的数列。无默认
width接收0~1之间的float。指定直方图宽度。默认为0.8
color接收特定string或者包含颜色的字符串的array。表示直方图的颜色。默认为None

事例如下

import matplotlib.pyplot as plt
import csv

plt.rcParams['font.sans-serif'] = 'SimHei' # 设置字体
plt.rcParams['axes.unicode_minus'] = False # 设置中文显示

# 提取数据
filename = '年度数据.csv' # 本地数据文件名
with open(filename) as f: # 打开本地数据文件
    reader = csv.reader(f) # 读取文件内容
    
    # 提取文件中的数据转化为列表
    for index,row in enumerate(reader):
        if index == 2:
            years = row[1:]
            years.reverse() # 数据倒序排列
        elif index == 3:
            values = row[1:]
            int_values = [float(i) for i in values] # 将str数据转化为float数据
            int_values.reverse() # 数据倒序排列

# 绘制直方图
plt.figure(figsize=(7,6)) # 设置画布大小
plt.bar(years, int_values, width = 0.5, color = 'g') #创建直方图
plt.xlabel('年份') # x轴名称
plt.ylabel('国民总收入(亿元)') # y轴名称
plt.ylim((400000,1000000)) # 设置y轴数据范围
plt.xticks(years, rotation=45) # 设置x轴刻度
plt.yticks([i for i in range(400000,1000000,100000)]) # 设置y轴刻度
plt.title('2010~2019国民总收入历年比较') # 总标题
plt.savefig('国民总收入直方图.png') # 保存文件
plt.show()

绘制后的直方图
在这里插入图片描述

饼图

饼图可以比较清楚的反应出部分与部分、部分与整体之间的比例关系,易于显示每组数据相对于总数的大小,而且显示方式直观。
基本语法如下:

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, hold=None, data=None)
参数名称说明
x接收array。表示用于绘制饼图的数据。无默认
explode接收array。表示指定项距离饼图圆心为n个半径。默认为None
labels接收array。指定每一项的名称。默认为None
color接收特定string或者包含颜色字符串的array。表示饼图颜色。默认为None
autopct接收特定string。指定数值的显示方式。例如’%.1f%%'表示百分比格式,保留小数点一位。默认为None
pctdistance接收float。指定每一项的比例autopct和距离圆心的半径。默认为0.6
labeldistance接收float。指定每一项的名称labels和距离圆心的半径。默认为1.1
radius表示饼图的半径。默认为1
startangle表示饼图的起始角度
counterclock是否逆时针,默认为True
wedgeprops{‘linewidth’: 1.5, ‘edgecolor’:‘green’},设置饼图内外边界的属性值
textprops{‘fontsize’:12, ‘color’:‘k’}, 设置文本标签的属性值
center设置饼图的原点
shadow在饼图下设置阴影。默认为False

事例如下

import csv
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False

# 读取数据
filename = '年度数据.csv'
with open(filename) as f:
    reader = csv.reader(f)
    values = [row[1] for row in reader]
    float_values = [float(i) for i in values[5:8]] # 将str数据转化为float数据
    label = ['第一产业', '第二产业', '第三产业']

# 绘制饼图
plt.figure(figsize=(6,6))
explode = [0.01, 0.01, 0.01]
plt.pie(float_values, explode=explode, labels=label, autopct='%1.1f%%')
plt.title('2019年各产业增加值')
plt.savefig('2019年各产业增加值')
plt.show()

绘制后的饼图
在这里插入图片描述

箱线图

箱线图也称箱须图,其绘制需使用常用的统计量,能提供有关数据位置和分散情况的关键信息,尤其在比较不同特征时,更可表现其分散程度差异。
基本语法如下:

matlotlib.pyplot.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, 
	widths=None, patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=None, 
	meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None,
	labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, 
	whiskerprops=None, manage_xticks=True, autorange=False, zorder=None, hold=None, data=None)

boxplot函数常用参数及说明

参数名称说明
x接收array。表示用于绘制箱线图的数据。无默认
notch接收boolean。表示中间箱体是否有缺口。默认为None
sym接收string。指定异常点形状。默认为None
vert接收boolean。表示图形是纵向或者横向。默认为None
positions接收array。表示图形位置。默认为None
widths接收scalar或者array。表示每个箱体的宽度。默认为None
labels接收array。指定每一个箱线图的标签。默认为None
meanline接收boolean。表示是否显示均值线。默认为None

事例如下

import csv
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False

filename = '年度数据.csv'
with open(filename) as f:
    reader = csv.reader(f)

    for index, row in enumerate(reader):
        if index == 5:
            value_1 = [float(i) for i in row[1:]]
        elif index == 6:
            value_2 = [float(i) for i in row[1:]]
        elif index == 7:
            value_3 = [float(i) for i in row[1:]]
        else:
            continue

label = ['第一产业', '第二产业', '第三产业']
values = (value_1, value_2, value_3)
plt.figure(figsize=(6,4))
plt.boxplot(values, labels=label, meanline=True)
plt.title('2010~2018年各产业生产总值')
plt.savefig('E://Python/2010~2018年各产业生产总值.png')
plt.show()

绘制后的箱线图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值