Matplotlib教程
Luo zerone 菜菜子
Matplotlib

matplolib的三层结构:

  • 容器层

    • Canvas层

    • 画布层(Figure)

    • 绘图区(Axes)

  • 辅助显示层

    • 标题

    • 图线的描述信息

    • x的刻度

    • 网格

  • 图像层

    • 折线图
    • 柱状图

容器层可以接触到的只是绘图区,其他的都在底层,辅助显示层其实就是函数图像之外的辅助的图例,像标题,刻度之类的,而图像层就是函数图像

image-20211029211459445


图像绘制的基本步骤

1
2
3
4
5
6
7
8
9
10
11
# 1.引用库
import matplotlib.pyplot as plt
# 2.准备数据
x = [1,2,3]
y = [3,4,5]
# 3.创建画布
plt.figure(figsize=(20,8),dpi=80) # 设置画布属性,figure:画布大小,单位是英寸
# 4.绘制图像
plt.plot(x,y)
# 5.显示图像
plt.show() # 使用show方法后,会释放figure画布

image-20211029213211713


基础功能

图像的辅助信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 准备数据
time = range(60)
temp = [np.random.uniform(10,20) for i in time] # 列表生成式
# 等价于:temp = [20 + 10 * np.random.rand(20,30) for i in time]

plt.figure(figsize=(20,8)) # figsize:画布大小单位是英寸

x_label = ["11 hours:{} secd".format(i) for i in time]
plt.xticks(time[::5],x_label[::5]) # 前面是修改刻度,后面刻度的是名称
plt.yticks(range(0,40,5)) # 修改y轴的刻度
plt.xlabel("时间") # 设置y轴的名称
plt.ylabel("温度") # 设置y轴的名称
plt.title("温度变化图") # 设置大标题
plt.grid(linestyle="-",alpha=0.9) # 设置网格 linestyle:网格风格 alpha:透明度

plt.plot(time,temp,label="function",color="red",marker="x",linewidth="5") # 设置曲线的颜色和名称,点的形状
plt.plot([1,2,3,4,10],[1,2,3,4,10],'gx-') # 属性简写形式
plt.show()

image-20211114140614536

显示图例

1
2
3
4
5
6
x,y1 = [1,2,3],[2,3,4]
x,y2 = [4,5,6],[9,6,3]
plt.figure(figsize=(20,8))
plt.plot(x,y1,label="function_1") # 如果只是在这里设置label并不会在图像中显示,因为我们只是修改了图像层
plt.legend(loc="lower right") # 要想显示图例还要在辅助图像层用legend()方法,loc:图例的位置,右上角还是其他地方
plt.show()

一个格里绘制两个图

1
2
3
4
5
plt.figure()
plt.plot(x,y1,color="red",linestyle="--",label="line 1") # 修改图线属性,颜色,粗细等等
plt.plot(x,y2,label="line 2")
plt.legend(loc="best")
plt.show()

image-20211114141007028

多绘图区,绘制多个图

面向对象的画图方法

1
2
3
4
5
6
7
8
figure,axes = plt.subplots(1,2,figsize=(20,8))    # 返回figure画布,和axes绘图区,注意是subplots而不是subplot
axes[0].plot(x,y1,color="red") # 表示第一个绘图区
axes[0].set_xticks(range(1,10,1)) # 和正常的方法相似又有点区别

axes[1].plot(x,y2,label="function_2")
axes[1].set_xlabel("fig title") # 显示标题
axes[1].legend() # 函数曲线图例,需要注意的是每个图的辅助层并不是同一个,也需要用对象的方式指定是哪个图的legend
plt.show()

image-20211114141024917

绘制散点图 scatter

绘制简单的散点图

1
2
3
4
5
x = 10 * np.random.rand(30,1)
y = np.linspace(1,10,30)
plt.figure()
plt.scatter(x,y)
# 散点图还可以用:plt.plot(kind="scatter",alpha=0.4,x="",y="")

image-20211114141249839

漂亮的的散点图

1
2
3
s = (30*np.random.rand(30))**2       # s参数:设置每个点的大小也就是面积,大小值是上面定义的s,默认是20
c = np.random.rand(30) # c参数:设置点的颜色
plt.scatter(x,y,s=s,c=c,alpha=0.5) # 设置透明度

image-20211114141301120

设置每个点的形状

1
2
3
s = (30*np.random.rand(30))**2       
c = np.random.rand(30)
plt.scatter(x,y,s=s,c=c,alpha=0.5,marker="+") #

image-20211114141525240

一张图绘制两组数据的散点图

1
2
3
plt.scatter(x,y,alpha=0.5,marker="+",label="scat1")   # 
plt.scatter(x,y*3,alpha=0.5,marker="^",label="scat2") #
plt.legend()

image-20211114141647415

柱状图 bar

1
2
3
4
5
6
7
x = ["北大","清华","中科大","南大","浙大","哈工大"]
y = [1,2,3,4,5,6]
plt.figure(figsize=(20,8))
plt.bar(x,y,color=["r","blue","green"],width=0.2) # 设置颜色的时候,如果没有和数量对上的话,就会再循环重复用之前的颜色
plt.title("Test fig")
plt.grid(alpha=0.4)
plt.show()

image-20211114141718791

水平柱状图 barh

1
2
3
4
x = np.arange(1,8)
y = np.random.randn(7)*10
plt.barh(x,y)
plt.yticks(range(1,8),["bar{}".format(i) for i in range(1,8)])

image-20211114145906514

直方图 hist 和柱状图很像

1
2
3
4
5
6
7
8
9
10
11
12
y = np.random.randn(10000) 
plt.figure()
plt.hist(y,bins=30,edgecolor="black")

"""
y:必选参数,绘图数据
bins:直方图的长条形数目,可选项,默认为10
normed:是否将得到的直方图向量归一化,可选项,默认为0,代表不归一化,显示频数。normed=1,表示归一化,显示频率。
facecolor:长条形的颜色
edgecolor:长条形边框的颜色
alpha:透明度
"""

image-20211114150816363

饼图 pie

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
x = [1,2,3,4,5]
plt.figure(figsize=(20,8),facecolor="white") # 设置底色
plt.pie(x,labels=["part a","part b","part c","part d","part e"]) #
plt.legend()
plt.show()

"""
explode:设置各部分突出
label:设置各部分标签
labeldistance:设置标签文本距圆心位置,1.1表示1.1倍半径
autopct:设置圆里面文本
shadow:设置是否有阴影
startangle:起始角度,默认从0开始逆时针转
pctdistance:设置圆内文本距圆心距离
返回值
l_text:圆内部文本,matplotlib.text.Text object
p_text:圆外部文本
"""

image-20211114150846304

  • 本文标题:Matplotlib教程
  • 本文作者:Luo zerone
  • 创建时间:2022-05-09 22:32:23
  • 本文链接:http://zer-one.github.io/2022/05/09/matplotlib使用/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!