数据预处理—matplotlib
kai (¬‿¬)

(多图预警,图存在 GitHub,加载慢)

1.简介

1.1导入

1
import matplotlib.pyplot as plt

1.2折线图 / x轴y轴

1
2
3
4
# 只指定y轴,x轴默认列表索引
plt.plot([3,1,4,5,2])
plt.ylabel("grade")
plt.show()

image-20220623190554649

1
2
3
4
# 同时指定x、y轴
plt.plot([0,2,4,6,8], [3,1,4,5,2])
plt.ylabel("grade")
plt.show()

image-20220623190735493

1
2
3
4
5
# 同时指定x、y轴,指定x轴尺度-1~10,y轴0~6
plt.plot([0,2,4,6,8], [3,1,4,5,2])
plt.ylabel("grade")
plt.axis([-2, 10, 0, 6])
plt.show()

image-20220623191234514

1.3函数图像

1
2
3
4
5
6
7
8
9
10
11
12
13
a = np.arange(0.0, 5.0, 0.02) # x轴 

def f(t):
# 指数函数
return np.exp(t)

plt.subplot(211) # 2行1列,第1块
plt.plot(a, f(a)) # 指数函数

plt.subplot(2,1,2) # 2行1列,第2块
plt.plot(a, np.cos(2 * np.pi * a)) # 余弦函数

plt.show()

image-20220623195746380

1.4网格线

1
2
3
4
plt.plot([0,2,4,6,8], [3,1,4,5,2])
plt.ylabel("grade")
plt.grid(True) # 网格线开启
plt.show()

2.plot函数

plt.plot(x, y, format_string, **kwargs)

  • x:X轴数据,列表或数组,可选
  • y:Y轴数据,列表或数组
  • format_string:控制曲线的格式字符串,可选
  • **kwargs:第二组或更多(×,y,format_string),多条曲线

当绘制多条曲线时,各条曲线的x不能省略

2.1基本用法

1
2
3
a = np.arange(10)
plt.plot(a, a*1.5, a, a*2.5, a, a*3.5)
plt.show()

image-20220623214051095

2.2格式控制

format_string由颜色字符、风格字符和标记字符组成

  • 颜色字符:线条和点的颜色
  • 风格字符:线条的样子
  • 标记字符:点的样子

颜色字符:

颜色字符 说明 颜色字符 说明
‘b’ 蓝色 ‘m’ 洋红色magenta
‘g’ 绿色 ‘y’ 黄色
‘r’ 红色 ‘k’ 黑色
‘c’ 青绿色cyan ‘w’ 白色
‘#008000’ RGB ‘0.8’ 灰度值字符串

风格字符:

风格字符 说明 风格字符 说明
‘-‘ 实线 ‘:’ 虚线
‘–’ 破折线 ‘-.’ 点划线
‘’ 无线条

标记字符:

标记字符 说明 标记字符 说明
‘.’ 点标记 ‘s’ 实心方形标记
‘,’ 像素标记(极小点) ‘p’ 实心五角标记
‘o’ 实心圈标记 ‘*’ 星形标记
‘v’ 倒三角标记 ‘h’ 竖六边形标记
‘^’ 上三角标记 ‘H’ 横六边形标记
‘>’ 右三角标记 ‘+’ 十字标记
‘<’ 左三角标记 ‘x’ x标记
‘1’ 下花三角标记 ‘D’ 菱形标记
‘2’ 上花三角标记 ‘d’ 瘦菱形标记
‘3’ 左花三角标记 ‘|’ 垂直线标记
‘4’ 右花三角标记
1
2
3
4
a = np.arange(10)
# 都指定;不指定风格;不指定标记
plt.plot(a, a*1.5, 'g4:', a, a*2.5, 'ch', a, a*3.5, 'y-.')
plt.show()

image-20220623221123450

3.中文显示

中文字体 说明 中文字体 说明
‘SimHei’ 中文黑体 ‘FangSong’ 中文仿宋
‘Kaiti’ 中文楷体 ‘YouYuan’ 中文幼圆
‘LiSu’ 中文隶书 ‘STSong’ 华文宋体

3.1全局中文

步骤

  1. 导入matplotlib
  2. 调用matplotlib的rcParams
rcParams属性 说明
‘font.family’ 字体名字,见上表
‘font.style’ 字体风格,正常’normal’,斜体’italic’
‘font.size’ 字体大小,’large’、’x-small’或整数字号

使用方法(实例):

1
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np
import matplotlib.pyplot as plt
import matplotlib

matplotlib.rcParams['font.family']='STSong'
matplotlib.rcParams['font.size']=20

a = np.arange(0.0, 5.0, 0.02)

plt.xlabel('时间')
plt.ylabel('振幅')
plt.plot(a, np.cos(2*np.pi*a))
plt.show()

image-20220623231316112

3.2局部中文

1
2
3
4
5
6
7
8
9
10
11
12
import numpy as np
import matplotlib.pyplot as plt

a = np.arange(0.0, 5.0, 0.02)

# 只改变xlabel和ylabel
plt.xlabel('时间', fontproperties='SimHei', fontsize='20')
plt.ylabel('振幅', fontproperties='SimHei', fontsize='20', color='green')

plt.plot(a, np.cos(2*np.pi*a))

plt.show()

image-20220623230942029

4.文本显示

函数 说明 函数 说明
plt.xlabel() X轴文本标签 plt.text() 任意位置增加文本
plt.ylabel() Y轴文本标签 plt.annotate() 任意位置增加带箭头注解
plt.title() 图形标题

plt.text(0, 1, r'$\mu=100$', fontsize='15')

  • 在(0,1)位置输出
  • 内容$\mu=100$
  • 字体大小为15

plt.annotate(r'$\mu=100$', fontsize='15', xy=(2,1), xytext=(3,1.5), arrowprops=dict(facecolor='black', shrink=0.1, width=2))

  • 内容$\mu=100$
  • 字体大小为15
  • 箭头坐标(2,1)
  • 文字坐标(3,1.5)
  • 箭头样式(黑色,线两端与坐标点距离0.1,宽2)
1
2
3
4
5
6
7
8
9
10
11
12
13
a = np.arange(0.0, 5.0, 0.02)
plt.plot(a, np.cos(2*np.pi*a), 'r--')

plt.xlabel('时间', fontproperties='SimHei', fontsize='20')
plt.ylabel('振幅', fontproperties='SimHei', fontsize='20', color='blue')
plt.title('正弦波', fontproperties='SimHei', fontsize='25')
plt.text(0, 1, r'$\mu=100$', fontsize='15')
plt.annotate(r'$\mu=100$', fontsize='15', xy=(2,1), xytext=(3,1.5),
arrowprops=dict(facecolor='black', shrink=0.1, width=2))

plt.axis([-1, 6, -2, 2])
plt.grid(True)
plt.show()

image-20220624001342199

5.子绘图区域

5.1简单划分

1
2
3
4
5
6
7
# 分为nrows行,ncols列,共nrows*ncols个区域
# 图画在第plot_number个区域,横着数
plt.subplot(nrows, ncols, plot_number)

# 逗号可以省略
plt.subplot(3, 2, 4)
plt.subplot(324)

演示:

1
2
3
4
5
6
7
8
9
10
11
12
13
a = np.arange(0.0, 5.0, 0.02) # x轴 

def f(t):
# 指数函数
return np.exp(t)

plt.subplot(211) # 2行1列,第1块
plt.plot(a, f(a)) # 指数函数

plt.subplot(2,1,2) # 2行1列,第2块
plt.plot(a, np.cos(2 * np.pi * a)) # 余弦函数

plt.show()

image-20220623195746380

5.2复杂划分

函数:plt.subplot2grid(GridSpec, CurSpec, colspan=c, rowspan=r)

plt.subplot2grid((3,4), (0,2), colspan=2, rowspan=3)

  • 划分为3行4列
  • 根据下标(0,2)选中第1行第3列
  • 横向长度为2,纵向长度为3的区域
1
2
3
4
5
6
7
8
9
10
11
12
a = np.arange(0.0, 5.0, 0.02)

plt.subplot2grid((3,4), (1,0), colspan=2)
plt.plot(a, np.cos(2*np.pi*a), 'r--')

plt.subplot2grid((3,4), (2,1))
plt.plot([0,2,4,6,8], [3,1,4,5,2])

plt.subplot2grid((3,4), (0,2), colspan=2, rowspan=3)
plt.plot([0,2,4,6,8], [3,1,4,5,2])

plt.show()

image-20220624003733006

6.饼状图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
labels =  ['A', 'B', 'D', 'E'] # 标签
sizes = [15, 30, 45, 10] # 占比
explode = (0, 0.1, 0, 0) # 距离中心距离

"""
sizes,explode,labels见上面解释
autopct 数字格式
shadow 阴影
startangle开始角度,默认x轴正向开始,90y轴正向开始
"""
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False, startangle=90)

# 若图为椭圆,通过此句使之成为圆形
plt.axis('equal')
plt.show()

image-20220624165717957

7.柱状图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
x = np.array(["A", "B", "C", "D"])
y = np.array([12, 22, 6, 18])

plt.subplot(1,3,1)
plt.bar(x, y)

plt.subplot(1,3,2)
plt.bar(x, y, width=0.5, color = ["#4CAF50","red","hotpink","#556B2F"])

plt.subplot(1,3,3)
plt.barh(x, y, height=0.5, color = ["#4CAF50","red","hotpink","#556B2F"])

plt.show()

"""
bar竖立,使用width调节柱状宽度
barh横立,使用height调节柱状宽度
color:只指定一个,则所有柱状同为此色
"""

image-20220624183345787

8.散点图

matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs)

参数说明:

x,y:长度相同的数组,也就是我们即将绘制散点图的数据点,输入数据。

s:点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小。

c:点的颜色,默认蓝色 ‘b’,也可以是个 RGB 或 RGBA 二维行数组。

marker:点的样式,默认小圆圈 ‘o’。

cmap:Colormap,默认 None,标量或者是一个 colormap 的名字,只有 c 是一个浮点数数组的时才使用。如果没有申明就是 image.cmap。

norm:Normalize,默认 None,数据亮度在 0-1 之间,只有 c 是一个浮点数的数组的时才使用。

vmin,vmax::亮度设置,在 norm 参数存在时会忽略。

alpha::透明度设置,0-1 之间,默认 None,即不透明。

linewidths::标记点的长度。

edgecolors::颜色或颜色序列,默认为 ‘face’,可选值有 ‘face’, ‘none’, None。

plotnonfinite::布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。

**kwargs::其他参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
sizes = np.array([20,50,100,200,500,1000,60,90])
colors = np.array(["red","green","black","orange","purple","beige","cyan","magenta"])

plt.subplot(3,2,1)
plt.scatter(x, y)

plt.subplot(3,2,2)
plt.scatter(x, y, s=sizes)

plt.subplot(3,2,3)
plt.scatter(x, y, c=colors)

plt.subplot(3,2,4)
plt.scatter(x, y, s=sizes, c=colors)

plt.show()

image-20220624185948817

通过颜色条设置颜色 见Matplotlib 散点图 | 菜鸟教程 (runoob.com)

同一图中多组数据:

1
2
3
4
5
6
7
8
9
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x, y, color = 'hotpink')

x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y, color = '#88c999')

plt.show()

image-20220624190409831

9.直方图

plt.hist(x, bins=None, range=None, density=None, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, normed=None, *, data=None, **kwargs)

  • x:数据
  • bins:取值范围分为bins份,默认10
  • density:False频数,True频率
  • histtype:{‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’}。’bar’是传统的条形直方图;’barstacked’是堆叠的条形直方图;’step’是未填充的条形直方图,只有外边框;’stepfilled’是有填充的直方图。当histtype取值为’step’或’stepfilled’,rwidth设置失效,即不能指定柱子之间的间隔,默认连接在一起。
  • alpha:透明度
1
2
3
4
5
6
7
# 生成符合正态分布的随机数组
np.random.seed(0)
mu, sigma = 100, 20 # 均值,标准差
a = np.random.normal(mu,sigma,size=100)

plt.hist(a, 15, density=False, histtype='stepfilled', color='b', alpha=0.75)
plt.show()

image-20220624192637650

  • 本文标题:数据预处理—matplotlib
  • 本文作者:kai
  • 创建时间:2022-06-25 11:50:23
  • 本文链接:https://kainote.top/2022/06/25/数据预处理—matplotlib/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论