使用matplotlib作图
注意事项:
- 由于默认的pyplot字体并不支持中文字符的显示,因此需要通过甚至font.sans-serif参数来改变绘图时的字体,使得图形可以正常显示中文。同时用于更改字体后,会导致坐标轴中欧给的部分字符无法显示,因此需要同时更改axes.unicode.minus参数
plt.rcParams['font.sans-serif']="SimHei"
plt.rcParams['axes.unicode_minus']=False
- 设置绘图风格
使用matplotlib绘图时,可以设置系统预先设定好的绘图风格
使用:plt.style.available语句可以查看系统中可以使用的所有绘图风格
预设风格的使用:plt.style.use(“ggplot”)
1. 创建画布与创建子图
构建出一张空白画布,并可以选择是否将整个画布划分为多个部分,方便在同一幅画上绘制多个图形的情况。
函数名称 | 函数作用 |
---|---|
plt.figure | 创建一个空白画布,可以指定画布的大小、像素 |
figure.add_subplot | 创建并选中子图,可以指定子图的行数,列数,与选中图片的编号 |
- figure函数:matplotlib.pyplot.figure()
1.matplotlib绘制的图像均位于figure对象中
2.参数figsize用于设置图像的大小和纵横比 - subplot函数:plt.subplot(a,b,c)
1.a、b表示将图片窗口分割为ab的区域,即:行列
2. c表示当前选中要操作的区域
2. 添加画布内容
第二部分是绘图的主体部分。其中添加标题、坐标轴名称、绘制图形等步骤是并列的,没有先后顺序,可以先绘制图形,也可以先添加各种标签。
函数名称 | 函数作用 |
---|---|
plt.title | 在当前图形中添加标题,可以指定标题的名称、位置、颜色、字体等参数 |
plt.xlable | 在当前图形中添加x轴的名字,可以指定位置、颜色、字体等参数 |
plt.ylable | 在当前图形中添加y轴的名字,可以指定位置、颜色、字体等参数 |
plt.xlim | 指定当前x轴的范围,只能确定一个数值区间,而无法使用字符串标识 |
plt.ylim | 指定当前y轴的范围,只能确定一个数值区间,而无法使用字符串标识 |
plt.xticks | 指定x轴刻度的数目和取值 |
plt.yticks | 指定y轴刻度的数目和取值 |
plt.legend | 指定当前图形的图例,可以指定当前图例的大小、位置和标签 |
3. 设置pyplot的动态rc参数
pyplot使用rc配置文件来自定义图形的各种默认属性,被称为rc配置或rc参数,在pyplot中几乎所有的默认属性均可以控制,例如视图窗口的大小、线条宽度、颜色、样式,坐标轴、网格属性、文本、字体等。
3.1 线条常用的rc参数
rc参数名称 | 解释 | 取值 |
---|---|---|
lines.linewidth | 线条宽度 | 取0-10之间的取值,默认为1.5 |
lines.linestyle | 线条样式 | 可取"-"、"–"、"."、":“四种,默认为”-" |
lines.marker | 线条上点的形状 | 可取"o"、“D”、“h”、"."、","、“S”等20多种,默认为None |
lines.markersize | 点的大小 | 取0-10之间的数值,默认为1 |
3.2 常用线条类型
linestyle取值 | 意义 | linestyle取值 | 意义 |
---|---|---|---|
- | 实线 | -. | 点线 |
– | 长虚线 | : | 短虚线 |
4. 图形绘制
4.1 散点图
散点图又称散点分布图,是以一个特征为横坐标,另一个特征为纵坐标,利用坐标点的分布形态反映特征间统计关系的一种图形。
值是由点在图表中的不同位置表示,类别是由图表中的不同标记表示,通常用来比较跨类别的数据。
- scatter函数:matplotlib.pyplot.scatter(x,y,s=None,c=None,marker=None,alpha=None,**kwargs),常用参数即说明如下:
参数名称 | 说明 |
---|---|
x,y | 接收array,表示x轴和y轴的对应数据。无默认。 |
s | 接收数值或一维的array,指定点的大小,若传入一维array则表示每个点的大小,默认为None |
c | 接收数值或一维的array,指定点的颜色,若传入一维array则表示每个点的颜色,默认为None |
marker | 接收特定string,表示绘制的点的类型,默认为None |
alpha | 接收0-1的小时,表示点的透明度,默认为None |
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']="SimHei"
plt.rcParams['axes.unicode_minus']=False
data1 = pd.DataFrame({
"姓名":["韩梅梅","李雷","Lucy","Lily","Jim","小明","Amy"],
"身高":[160,170,163,165,178,182,168],
"体重":[48,55,52,50,60,58,49]})
#绘制散点图查看身高和体重之间的关系
figure = plt.figure(figsize=(6,5))
plt.scatter(data1["身高"],data1["体重"],color="b",marker="s")
plt.xlabel("height(cm)")
plt.ylabel("weight(kg)")
plt.title("身高体重关系图")
4.2 绘制折线图
折线图是一种将数据点按照顺序连接起来的图形,可以看作是将散点图,按照x轴坐标顺序连接起来的图形,折线图的主要功能是查看因变量y随着自变量x改变的趋势,最适合用于随时间(根据常用比例设置)而变化的连续数据。同时还可以看出数量的差异,增长趋势的变化。
- plot函数:
matplotlib.pyplot.plot(*args,**kwargs)
常用参数及说明如下表所示:
参数名称 | 说明 |
---|---|
x、y | 接收array。表示x轴和y轴对应的数据。无默认 |
color | 接收特定string。指定线条的颜色。默认为None |
linestyle | 接收特定string。指定线条类型,默认为“-” |
marker | 接收特定string。表示绘制的点的类型。默认为None |
alpha | 接收0-1的小数。表示点的透明度。默认为None。 |
data_x = list(range(1,1000))
data_y = [10]
for i in range(998):
data_y.append(data_y[i]+np.random.randint(-1,2))
plt.plot(data_x,data_y)
5. 分析特征内部数据分布与分散状况
5.1 绘制直方图
直方图是统计报告图的一种,一般用于表示连续型数据的分布情况,一般用横轴表示数据分组,纵轴表示属于该组取值范围的样本数量或者占比。
用直方图可以比较直观的看出产品质量特性的分布状态,便于判断其总体质量分布情况。直方图可以发现分布表无法发现的数据模式、样本的频率分布和总体的分布。
- hist函数:matplotlib.pyplot.hist(x,y)
其中:
x:待绘制直方图的一维数组
y:可以是整数,表示均匀分为n组,也可以是
#正态分布数据
import random
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']="SimHei"
plt.rcParams['axes.unicode_minus']=False
mu,sigma = 100,15
x = mu+sigma*np.random.randn(10000)
#the histgram of data
n,bins,pathces = plt.hist(x,50,density=0,facecolor="g",alpha=0.75)
plt.title("Histogram of IQ")
plt.xlabel("Smart")
plt.ylabel("频数")
plt.text(60,500,r"$\mu=100,\ \sigma=15$")
plt.axis=([40,160,0,600])
plt.grid(True)
注意:plt.hist()函数中的density参数是布尔类型,默认为None,当其值为False时,y轴表示频数,当其值为True时,y轴表示频率
5.2 绘制条形图
条形图是统计报告图的一种,由一系列高低不等的纵向条纹或线段表示类别型数据分布情况,一般用横轴表类别,纵轴表示该样本数量或占比。
用条形图可以比较直观的看出产品质量特性的分布状态,便于判断其总体质量情况,
- bar()函数:plt.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 |
grades = ["高一","高二","高三"]
values = [879,517,725]
plt.bar(grades,values,color="b",width=.4)
plt.title("全校人数")
- 组合图示例:
year = ["2017","2018","2019","2020"]
sales = np.random.rand(4)*1000000
conv = np.random.rand(4)
fig,ax = plt.subplots(figsize=(12,8))
ax1 = ax.twinx()#创建次坐标轴
ax.bar(year,sales,color="skyblue")
ax1.plot(year,conv,"-o",color = "y")
5.3创建饼图
饼图是将各项的大小与各项的比例显示在一张图中,以每一部分的大小来确定每一项的占比。
饼图可以比较清楚的反映出部分与部分、部分与整体之间的比例关系,易于显示每组数据相对于整体数据的大小,且比较直观。
- pie()函数:
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, …)
# 频次或频率
data = [1, 2, 3, 4, 5] # 各类别占比
# 各类别标签
label = ['猫', '狗', '牛', '羊', '马']
# 每个类别要绘制的颜色
color = ['lightblue', 'lightgreen', 'lightyellow', 'pink', 'orange'] # 各类别颜色
explode = (0, 0, 0, 0, 0.1) # 各类别的偏移半径
plt.pie(data,colors = color,labels=label,shadow=True,autopct="%.2f%%",explode=explode)
5.4 绘制箱形图
箱形图,能够提供有关数据位置和分散情况的关键信息,尤其是在比较常用的统计量,能提供有关数据位置和分散情况的关键性心,尤其是在表不同特征时,更加可以表现其分散程度的差异。
箱形图使用的5个统计量,分别是:最小值、下四分位数、中位数、上四分位数和最大值,它可以粗略的看出数据时候具有对称性、分布的分散程度等信息,特别可以用于对几个样本的比较。
- boxplot函数
matplotlib.pyplot.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None,meanline=None, labels=None, …)
常用参数:
5.5 雷达图
雷达图适用于显示三个或更多的维度的变量,雷达图是以在同一点开始的轴上显示三个或者更多个变量的而为图表的形式来显示多元数据的方法,其中轴的相对位置和角度通常是无意义的。
雷达图对于查看哪些变量具有相似的值、变量之间是否有异常值都很用。雷达图也可以用于查看哪些变量在数据集内得分较高或较低,因此非常适合显示性能相关数据,常用于排名、评估、评论等数据的展示。
fig = plt.figure(figsize=(10,5))
# 玩家数据(0-10分)
data4 = np.array([[3.2, 1.7, 1.9, 2.5, 8.0],
[8.2, 6.9, 5.4, 1.7, 3.6],
[5.2, 4.2, 8.7, 0.5, 1.7],
[7.4, 5.4, 4.1, 3.5, 6.2]])
n,k = data4.shape#获取数组的行列信息
# 各维度名称
names = ['打钱速度', '击杀助攻', '输出能力', '控制时长', '吸收伤害']
ax = fig.add_subplot(111,polar=True)#设置极坐标
angles = np.linspace(0,2*np.pi,k,endpoint=False)#创建等差数列绘制周长
angles = np.concatenate((angles,[angles[0]]))#使周长闭合,即在数列的最后增加一个数字,该数字为数列开始的数字
Linestyle = ['bo-', 'ro:', 'gD--', 'yv-.'] # 点线形状
Fillcolor = ['b', 'r', 'g', 'y'] # 填充颜色\点线颜色
for i in range(n):
data = np.concatenate((data4[i],[data4[i][0]]))#每一组数据都让其闭合,形成一个封闭的图形
data = data4[i]
ax.plot(angles,data,Linestyle[i],linewidth = 2)
ax.fill(angles,data,facecolor=Fillcolor[i],alpha=0.25)
ax.set_thetagrids(angles[:-1] * 180/np.pi, names) # 显示类别名字
ax.set_title("玩家能力值对比图", va='bottom') # 设定标题
ax.set_rlim(0, 11) # 设置各指标的最终范围
ax.grid(True) # 显示网格
转载:https://blog.csdn.net/ava_zhang2017/article/details/108497056