目录
1.1.1 导入 import matplotlib.pyplot
1.2.4 因为可以一段代码里存在多个plt.figure(),因此可以设置多个画布
(多张画布,多个坐标轴系,分别包含1个图形,且按内部序号排列)
4.2.1 用plt.legend() 可设置多个曲线的图例,且默认展示在一起。
4.2.2?plt.plot(lable="")也可以设置单个plot 曲线的label,和图例效果差不多
5.4 移动两个spine到0,0 点,达到把坐标轴移动的目的
import numpy as np
import matplotlib.pyplot as plt?
matplotlib 推测词源
figure是一顶级的容器,包含了绘图所有的元素。我把这个理解为画布
画布语法:figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)
plt.subplot() 可以看到figure的编号
import numpy as np
import matplotlib.pyplot as plt
fig1=plt.figure("名字",figsize=None,dpi=None,facecolor="gray", edgecolor="white", frameon=True)
x=np.linspace(-5,5, 10)
y=x*2+1
y2=x**2
# 绘图
plt.plot(x, y)
plt.plot(x, y2)
# 显示图像
plt.show()
设置函数的关键:
函数就是形如 y=f(x)的样式,但是函数的作图需要具体的数据。
import numpy as np
import matplotlib.pyplot as plt
plt.plot(x,
np.cos(x),
color = 'r', # 线条颜色
linewidth = 2, # 线条宽度
linestyle='-.', # 线的类型:虚线:'--',点线:'-.',短虚线':',实线:'-'
marker='*', # 线上点的形状
markersize = 5, # 点的大小
markeredgecolor = 'b', # 点的边框颜色
markerfacecolor ='green', # 点的背景颜色,可能因为点太小没显示出来?
label = 'cos', # 图例
alpha = 1 ) # 透明度:0-1之间 ,默认1
plt.legend(fontsize = 15) # 显示图例
plt.show()
matplotlib
作图,要显示图像,必须调用plt.show()
, 否则不显示import numpy as np
import matplotlib.pyplot as plt
fig1=plt.figure(num=1)
x=np.linspace(-5,5, 10)
y=x*2+1
y2=x**2
# 绘图
plt.plot(x, y)
plt.plot(x, y2)
# 显示图像
plt.show()
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(-5,5, 10)
fig1=plt.figure(num=1,figsize=(3,3))
y=x*2+1
# 绘图
plt.plot(x, y)
#新开一个画布
fig2=plt.figure(num=2,figsize=(5, 5))
y2=x**2
# 绘图
plt.plot(x, y2)
# 显示图像
plt.show()
?
plt.subplot()
方式绘制多子图plt.subplot()
方式绘制多子图,只需要传入简单几个参数即可:plt.subplot(rows, columns, current_subplot_index)
plt.subplot(2, 2, 1)
,其中:rows
表示最终子图的行数;columns
表示最终子图的列数;current_subplot_index
表示当前子图的索引;plt.subplot(2, 2, 1),写成
plt.subplot(221)
,两者是等价的。import numpy as np
import matplotlib.pyplot as plt
# 子图1,散点图
plt.subplot(2, 2, 1)
plt.scatter(np.linspace(-2, 2, 5), np.random.randn(5))
# 子图2,折线图+网格
plt.subplot(2, 2, 2)
plt.plot(np.linspace(-2, 2, 5), np.random.randn(5))
plt.grid(True)
# 子图3,柱状图
plt.subplot(2, 2, 3)
x = np.linspace(0, 5, 5)
plt.bar(x, np.random.random(5))
plt.xticks(np.arange(0, 6))
# 子图4,饼图
plt.subplot(2, 2, 4)
plt.pie(np.random.random(5), labels=list("ABCDE"))
plt.show()
import numpy as np
import matplotlib.pyplot as plt
fig1=plt.figure(num=1)
x=np.linspace(-5,5, 10)
y=x*2+1
y2=x**2
# 设置坐标轴描述
plt.xlabel("X axis")
plt.ylabel("Y axis")
# 设置坐标轴范围
plt.xlim((-10,10))
plt.ylim((-10,10))
# 设置坐标轴刻度
plt.xticks([-4, -2, 0, 2, 4])
plt.yticks(np.linspace(-10, 10, 10))
# 这样可以清除刻度 plt.xticks()
# 这样可以清除刻度 plt.yticks()
# 绘图
plt.plot(x, y)
plt.plot(x, y2)
# 显示图像
plt.show()
?
?
import numpy as np
import matplotlib.pyplot as plt
#原始的
figure = plt.figure(num=99)
# x,y
x = np.linspace(-4, 4, 50)
y = x ** 2 - 4
xx_label = r"y = x ^ 2 - 4"
x_label = r"y = x"
plt.title("here is title")
# 绘图
plt.plot(x, y, color="#ff0000",label="xxx")
# 显示图例
plt.legend()
plt.plot(x, x)
# 显示网格
plt.grid(True)
# 显示图例
plt.legend(labels=[xx_label, x_label])
# 移动坐标轴的第2个图
figure = plt.figure(num=100)
# x,y
x = np.linspace(-4, 4, 50)
y = x ** 2 - 4
# 获取到坐标轴
ax = plt.gca()
# 隐藏右边、上边的spine
ax.spines["right"].set_color("none")
ax.spines["top"].set_color("none")
# 移动两个spine到0,0,达到把坐标轴移动的目的
ax.spines["bottom"].set_position(("data", 0))
ax.spines["left"].set_position(("data", 0))
xx_label = r"y = x ^ 2 - 4"
x_label = r"y = x"
plt.title("here is title")
# 绘图
plt.plot(x, y, color="#ff0000",label="xxx")
# 显示图例
plt.legend()
plt.plot(x, x)
# 显示网格
plt.grid(True)
# 显示图例
plt.legend(labels=[xx_label, x_label])
plt.show()
?运行代码时可能会出现如下警告:No artists with labels found to put in legend. Note that artists whose label
#plt.plot() 相关代码中缺乏label名称的说明
- plt.plot(x, y, color="#ff0000")
- plt.plot(x, y, color="#ff0000",label="xxx")? ?#没有这个就会警告 label="xxx"
#legend相关代码中缺乏label名称的说明,需要给予图例对应的名字
- # 显示图例
- plt.legend()
- plt.legend(labels=[xx_label, x_label])?# 调整后不报错并显示图例
import numpy as np
import matplotlib.pyplot as plt
# 散点图
# x, y
x = np.random.normal(0, 1, 20)
y = np.random.normal(0, 1, 20)
# 绘制散点图
plt.scatter(x, y, s=25, alpha=0.75)
plt.xlabel("X")
plt.ylabel("Y")
# 显示图像
plt.show()
7 直方图
import numpy as np
import matplotlib.pyplot as plt
# 直方图
# x, y
size = 12
x = np.arange(size)
y = np.random.uniform(0, 1, size) * 10
# 直方图
plt.bar(x, y, edgecolor="white")
plt.bar(x, -y, facecolor="#999999", edgecolor="white")
# 设置坐标
plt.xticks(x)
plt.yticks(np.linspace(-12, 12, 13))
# 显示数值
for (X, Y) in zip(x, y):
plt.text(x=X, y=Y+0.2, s="%.1f" % Y, ha="center")
print(X, Y)
# 显示图像
plt.show()