Matplotlib介绍

Matplotlib 能够创建多数类型的图表,如条形图,散点图,条形图,饼图,堆叠图,3D 图和地图图表。

安装pip install matplotlib

导入模块import matplotlib.pyplot as plt

绘制第一个图

.plot(x,y)接受两个参数,分别是x坐标,y坐标。下面有三个坐标,即(1,7),(2,8),(3,9)

1
2
3
import matplotlib.pyplot as plt
plt.plot([1,2,3],[7,8,9])
plt.show()

Pycharm运行

image-20230102160340123

如果你是用IDLE打开

image-20230102160812307

那么这里会有一些按钮可以使用,摸索一下很快就能了解作用。

图例、标题和标签

在这里,我们要了解一个概念,轴域(Axes) 就是两条坐标轴围成的区域。

这里中文标题会出现问题,必须加一条语句来显示中文。

1
plt.rcParams["font.sans-serif"] = ["SimHei"]   # 用来显示中文

如果 负号 不显示,那再加一条语句。

1
plt.rcParams["axes.unicode_minus"] = False  # 用来显示负号

如果加了上述语句,还是无效,那就是系统缺少这个字体,需要下载对应的字体。

图例、标题和标签展示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"] = ["SimHei"]
# x为学号,y为得分
x1 = [1,2,3]
y1 = [5,7,4]

x2 = [1,2,3]
y2 = [10,14,12]

# 画出两个线条
# label为图例
plt.plot(x1,y1,label='1')
plt.plot(x2,y2,label='2')

# x,y坐标轴标签
plt.xlabel('学号')
plt.ylabel('得分')

# 统计图的标题
plt.title('成绩分布')
plt.legend() # 生成默认图例
plt.show()

使用plt.xlabelplt.ylabel,我们可以为这些相应的轴创建标签。 接下来,我们可以使用plt.title创建图的标题,然后我们可以使用plt.legend()生成默认图例。 结果图如下

image-20230102163310050

条形统计图和直方图

条形图

使用xticks与yticks(设置坐标轴刻度)、xlabel与ylabel(设置坐标轴标签)、title(标题)、legend(图例)、xlim与ylim(设置坐标轴数据范围)、grid(设置网格线)等命令来装饰图形。

plt.bar为我们创建条形图。 如果你没有明确选择一种颜色,那么虽然做了多个图,所有的条看起来会一样。 你可以在任何类型的绘图中使用颜色,例如g为绿色,b为蓝色,r为红色,等等。 你还可以使用十六进制颜色代码,如#191970。

具体可以查看这里:常用十六进制颜色对照表代码查询 - 緈諨の約錠 - 博客园 (cnblogs.com)

1
2
3
4
5
6
7
8
9
10
11
12
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]

# 输入条形图的数据
plt.bar([1,3,5,7,9],[4,6,7,3,8],label="数据1")
plt.bar([2,4,6,8,10],[9,3,6,3,9],label="数据2", color='g')

plt.legend()
plt.xlabel('学号')
plt.ylabel('得分')
plt.title("成绩分步条形图")
plt.show()

image-20230102164032543

直方图

直方图和条形图很像,一般是通过区间显示。举例,年龄分步,我们20-25,25-30,30-35去输出人数。

plt.hist,你首先需要放入所有的值,然后指定放入哪个桶或容器。

1
2
3
4
5
6
7
8
9
10
11
12
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]

ages = [22,45,56,34,67,23,67,33,44,55,88,38,49,27,34,35,99,91,84,82]
bins = [0,10,20,30,40,50,60,70,80,90,100]
plt.hist(ages,bins,histtype='bar',rwidth=0.8) # 输出类型是条形图

plt.xlabel('年龄')
plt.ylabel('人数')
plt.title('各年龄段人数分布')
plt.legend()
plt.show()

image-20230102170138593

散点图

基本散点图

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

# 第一组散点
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
plt.scatter(x, y) # x 代表x轴 y 代表y轴数据, 数据维度必须相同

plt.show()

实际上,这里不用np也是可以的。

1
2
3
4
5
6
7
8
9
import matplotlib.pyplot as plt


# 第一组散点
x = [1, 2, 3, 4, 5, 6, 7, 8]
y = [1, 4, 9, 16, 7, 11, 23, 18]
plt.scatter(x, y) # x 代表x轴 y 代表y轴数据, 数据维度必须相同

plt.show()

image-20230102170908252

点的大小、颜色和透明度

plt.scatter(x, y,s=100,c='red')设置。

s 点的大小 c 点的颜色 alpha 透明度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']

# 第一组散点
x = [1, 2, 3, 4, 5, 6, 7, 8]
y = [1, 4, 9, 16, 7, 11, 23, 18]
plt.xlabel('横坐标')
plt.ylabel('纵坐标')

# x 代表x轴 y 代表y轴数据, 数据维度必须相同
# s 点的大小 c 点的颜色 alpha 透明度(越接近0越透明)
plt.scatter(x, y,s=200,c='g',alpha=0.1)


plt.show()

image-20230102171707698

颜色条

通过plt.colorbar() #显示颜色条

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']

# 第一组散点
x = [1, 2, 3, 4, 5, 6, 7, 8]
y = [1, 4, 9, 16, 7, 11, 23, 18]
plt.xlabel('横坐标')
plt.ylabel('纵坐标')

# x 代表x轴 y 代表y轴数据, 数据维度必须相同
# s 点的大小 c 点的颜色 alpha 透明度(越接近0越透明)
colors = [0, 10, 20, 30, 40, 45, 50, 55]
plt.scatter(x, y,s=200,c=colors,alpha=0.9)
plt.colorbar()

plt.show()

image-20230102172119888

多组散点图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']


x = [1, 2, 3, 4, 5, 6, 7, 8]
y = [1, 4, 9, 16, 7, 11, 23, 18]
# 新增Z
z = [4, 7, 12, 19, 10, 14, 26, 21]
plt.xlabel('横坐标')
plt.ylabel('纵坐标')


colors = [0, 10, 20, 30, 40, 45, 50, 55]
plt.scatter(x, y,s=200,c=colors,alpha=0.9)
# 多绘画一个Z
plt.scatter(x, z,s=200,c=colors,alpha=0.9)

plt.colorbar()

plt.show()

image-20230102172340617

最后,感谢二十九、3D 绘图 - 《Matplotlib 入门教程》 - 书栈网 · BookStack(108条消息) Matplotlib 散点图 绘制详解_一条菜鸟鱼的博客-CSDN博客_matplotlib绘制散点图