matplotlib--绘图

import matplotlib.pyplot as plt
import numpy as np

figure对象,类似于绘画的画布

# 首先创建figure对象(类似画布)
fig = plt.figure()
print(fig)  # 默认大小是640*480像素

# 可以对其进行自定义设置,1000*800的像素,每个点的分辨率像素是120
fig = plt.figure(figsize=(10,8), dpi=120)

1.直接在figure上绘制所需图形

# 新建数组
arr = np.random.randn(1000)

# 将数组数据加载到画布中并保存显示
plt.plot(arr)
plt.savefig("fig1.png")
plt.show()

得到如下图片


matplotlib--绘图_第1张图片

2.对figure进行分割,在子图上进行绘图

# 对画布进行分割为2*2的四块子图,第三个参数表示子图编号
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(2,2,4)

# 将数据加载到子图中并保存显示
ax2.plot(arr)
plt.savefig("fig2.png")
plt.show()

得到如下图片(注意运行这部分代码需要将上一部分中的plt.show()注释掉,因为画布一旦进行显示,就无法再次保存,所以.show()方法一般是放在最后

matplotlib--绘图_第2张图片

常见的绘图方式

1.直方图--plt.hist

import matplotlib.pyplot as plt
import numpy as np

# 新建数据
arr = np.random.randn(1000)

# 新建figure对象
fig = plt.figure(figsize=(8,6), dpi=120)

# 传入数据,生成直方图,并设置柱体的个数(bins),颜色(color),透明度(alpha)
plt.hist(arr,bins=40,color="c",alpha=0.5)
plt.savefig("fig3.png")
plt.show()

运行得到下图

matplotlib--绘图_第3张图片

2.散点图--plt.scatter,根据两组数据的位置进行绘制

# 定义x,y轴的两组数据

x = [1,3,5,7,9]

y = [2,4,6,8,10]plt.scatter(x,y)plt.show()

得到下图

matplotlib--绘图_第4张图片

或者让他数量多一点

x = np.arange(100)
y = x + np.random.randn(100)*4
plt.scatter(x,y)
plt.show()

得到下图

matplotlib--绘图_第5张图片

3.柱形图

# 自定义一款画布
fig = plt.figure(figsize=(4.5,3.4), dpi=120)
# 建立x轴
x = np.arange(5)
# 建立两个y柱形的数值
y1,y2 = np.random.randint(1,20,(2,5))
# 建立一个子图(为啥不用整个画布呢,因为后面有需要修改x轴坐标等操作,画布没法进行,但是可以通过子图修改)
ax = plt.subplot(1,1,1)
# 柱形宽度为width
width=0.3
# 建立柱形图
ax.bar(x,y1,width, color='r',alpha=0.3)
# 为了不让第二个柱形覆盖第一个柱形,所以让他的x轴坐标偏移了一个柱形的宽度
ax.bar(x+width,y2,width,color='c',alpha=0.3)
plt.show()

得到下图:

matplotlib--绘图_第6张图片

x轴的刻度位置不对,而且也不一定是数字,我们可以对其进行修改

show()之前添加如下代码

# 修改x轴的坐标刻度位置
ax.set_xticks(x+width/2)
# 修改x轴坐标的标签名
ax.set_xticklabels(['python','java','PHP','go','C'])

得到下图:

matplotlib--绘图_第7张图片

我们也可以添加x轴的名称和y轴的名称

添加代码如下:

# 添加x轴的名称和y轴的名称
ax.set_xlabel("name")
ax.set_ylabel("numble")
得到下图:
matplotlib--绘图_第8张图片

3.混淆矩阵--imshow

# 自定义一款画布
fig = plt.figure(figsize=(4.5,3.4), dpi=120)
# 建立一个10*10的矩阵
arr1 = np.random.randint(10,100,(10,10))
# 传入数据
plt.imshow(arr1)
plt.show()

得到下图:

matplotlib--绘图_第9张图片

我们可以对其添加颜色刻度,并且更改主题颜色风格

代码如下:

# 更改各种主题
plt.imshow(arr1,cmap=plt.cm.Blues)
# plt.imshow(arr1, cmap=plt.cm.Reds)
# plt.imshow(arr1, cmap=plt.cm.Greens)
# plt.imshow(arr1, cmap=plt.cm.winter)
# 添加颜色刻度条
plt.colorbar()
不同主题的图如下:

matplotlib--绘图_第10张图片matplotlib--绘图_第11张图片matplotlib--绘图_第12张图片matplotlib--绘图_第13张图片


颜色,标记,线型

# 自定义一款画布
fig = plt.figure(figsize=(4.5,3.4), dpi=120)
# 创建子图
ax = plt.subplot(111)
# 加入数据,折线图
# color代表线的颜色,marker代表标记,linestyle代表线型
ax.plot(np.random.randint(10,40,30),color='g',marker='.',linestyle='-.')
plt.show()

图如下:

matplotlib--绘图_第14张图片


刻度,标签,图例

代码如下:

# 自定义一款画布
fig = plt.figure(figsize=(8,6), dpi=120)
# 创建子图
ax = plt.subplot(111)
# 设置画布支持的字体为细黑,使他能显示中文
plt.rcParams["font.sans-serif"]= ["SimHei"]
# 设置y轴的刻度范围
ax.set_ylim([0,1000])
# 设置刻度的显示值,0~1000 每个200显示一个
ax.set_yticks(range(0,1001,200))
# 设置y轴标签
ax.set_ylabel("Money/k")
# 设置x轴的刻度标签和轴标签
# 设置x轴为0~12的13个数
ax.set_xticks(np.linspace(0,12,13))
# 设置x轴的刻度标签
ax.set_xticklabels(range(1,13))
ax.set_xlabel("Month")
# 画图
ax.plot(np.random.randint(200,600,12),color='r',alpha=1,label="牛奶")
ax.plot(np.random.randint(200,600,12),color='c',alpha=1,label="蔬菜")
ax.plot(np.random.randint(200,600,12),color='g',alpha=1,label="肉类")
# 添加图例
plt.legend()
plt.show()

得到下图:

matplotlib--绘图_第15张图片


你可能感兴趣的:(matplotlib--绘图)