目录:
准备工作
7种线条创建方法介绍
`Method #1: ax.axhline()`
`Method #2: ax.axvline()`
`Method #3: ax.axline()`
`Method #4: ax.axhspan()`
`Method #5: ax.axvspan()`
`Method #6: ax.hlines()`
`Method #7: ax.vlines()`
一个综合的例子
绘制线条是关于数据可视化的最简单形式。绘制线条可能很简单,但它们却有很多应用。您可能需要用不同类型的线条方法来突出显示数据的重要属性,例如:
标记数据的中心值(平均值、中位数、众数)。 指出数据的限制或范围。 突出极值点。
matplotlib API中有7种不同的线条创建方法!在本文中,我将介绍每种方法并提供如何使用它们的示例。
准备工作
导入库:
import matplotlib.pyplot as plt
import numpy as np
# Optional imports
from matplotlib import rcParams
from matplotlib import font_manager
上面有两个可选的导入,我使用它们来使图表看起来更好。
下面的设置仅当您想使用可选导入时这些设置才适用。
其中一个设置是使用自定义字体。我选择了Roboto,它是从 Google Fonts 免费下载的。
使matplotlib查看所有已安装字体的代码:
for font in font_manager.findSystemFonts(fontpaths=None, fontext='ttf'):
font_manager.fontManager.addfont(font)
使用以下代码更新外观rcParams
:
rcParams.update(
{
"font.family": "Roboto",
"figure.figsize": (20, 9),
"figure.facecolor": "#fbfbfb",
"figure.titlesize": 40,
"figure.titleweight": "bold",
"font.size": 25,
"lines.linewidth": 3,
"grid.linewidth": 1.25,
"grid.color": "#f6f5f4",
"xtick.bottom": False,
"ytick.left": False,
"axes.spines.right": False,
"axes.spines.top": False,
"axes.edgecolor": "#c0bfbc" # spine colour
}
)
开始之前的最后一件事。下面的所有示例,都将会都遵循这个相同的绘图模板:
fig, axs = plt.subplots(
1, 3,
sharex=True,
sharey=True,
layout="constrained"
)
fig.suptitle("The TITLE")
# Axis limits
axs[0].set_xlim(0, 10)
axs[0].set_ylim(0, 10)
# PLOTS
# Plot functions go here
# ...
# Other settings
for ax in axs:
ax.set_xticks(
ticks=np.arange(2, 11, 2),
labels=[f"{x}" for x in np.arange(2, 10, 2)] + [""],
)
ax.set_yticks(
ticks=np.arange(2, 11, 2),
labels=[f"{y}" for y in np.arange(2, 10, 2)] + [""],
)
ax.grid()
7种线条创建方法介绍
Method #1: ax.axhline()
ax.axhline()
用于创建水平线,通过使用可选参数xmin
,xmax
可以限制线的范围。
下面是创建 3 条水平线的案例:
axs[0].set_title("A")
axs[0].axhline(
y=5 # data coordinates
)
axs[1].set_title("B")
axs[1].axhline(
y=3, # data coordinates
xmax=.5 # axe coordinates [0, 1]
)
axs[1].axhline(
y=7, # data coordinates
xmin=.5 # axe coordinates [0, 1]
)
axs[2].set_title("C")
axs[2].axhline(
y=1,
xmin=.2, # axe coordinates [0, 1]
xmax=.8 # axe coordinates [0, 1]
)
axs[2].axhline(
y=5,
xmin=.3, # axe coordinates [0, 1]
xmax=.7 # axe coordinates [0, 1]
)
axs[2].axhline(
y=9,
xmin=.4, # axe coordinates [0, 1]
xmax=.6 # axe coordinates [0, 1]
)
这段代码在不同的y值处绘制了3条线,每一条线都提供了不同的限制。
Method #2: ax.axvline()
可使用 ax.axvline()
创建垂直线, 3 条垂直线图示例如下:
axs[0].set_title("D")
axs[0].axvline(
x=5
)
axs[1].set_title("E")
axs[1].axvline(
x=3, # data coordinates
ymax=.5, # axe coordinates [0, 1]
color=colour_val
)
axs[1].axvline(
x=7, # data coordinates
ymin=.5, # axe coordinates [0, 1]
color=colour_val
)
axs[2].set_title("F")
axs[2].axvline(
x=1, # data coordinates
ymin=.2, # axe coordinates [0, 1]
ymax=.8, # axe coordinates [0, 1]
color=colour_val
)
axs[2].axvline(
x=5, # data coordinates
ymin=.3, # axe coordinates [0, 1]
ymax=.7, # axe coordinates [0, 1]
color=colour_val
)
axs[2].axvline(
x=9, # data coordinates
ymin=.4, # axe coordinates [0, 1]
ymax=.6, # axe coordinates [0, 1]
color=colour_val
)
Method #3: ax.axline()
使用 ax.axline()
创建斜线,有两种不同的方法来调用此绘图函数:
在数据坐标系中提供两个点 一个点(在数据坐标系中)以及斜率值
示例如下:
axs[0].set_title("G")
axs[0].axline(
xy1=(0, 0),
xy2=(1, 1)
)
axs[1].set_title("H")
axs[1].axline(
xy1=(5, 5),
slope=-1
)
Method #4: ax.axhspan()
使用 ax.axhspan()
可以创建轴跨度线,跨度是非常粗的线。它们实际上是矩形,必须至少使用两个参数(起点和终点)。同样的,轴跨度线跨度可以:
延伸跨越整个轴 或者在一侧或者两侧受到限制
创建的 2 条水平跨度线图示例:
注意:
ax.axhspan()
在y轴上使用数据(绝对)值来确定其在y方向上的大小。x轴使用在 0 到 1 之间的轴坐标系相对值
axs[0].set_title("I")
axs[0].axhspan(
ymin=3, # data coordinates
ymax=7, # data coordinates
color=colour_val
)
axs[1].set_title("J")
axs[1].axhspan(
ymin=1, # data coordinates
ymax=2, # data coordinates
xmax=0.2, # axe coordinates [0, 1]
color=colour_val
)
axs[1].axhspan(
ymin=4, # data coordinates
ymax=5.1, # data coordinates
xmin=0.4, # axe coordinates [0, 1]
xmax=0.65, # axe coordinates [0, 1]
color=colour_val
)
axs[1].axhspan(
ymin=7, # data coordinates
ymax=9, # data coordinates
xmin=0.8, # axe coordinates [0, 1]
color=colour_val
)
Method #5: ax.axvspan()
ax.axvspan()
,绘制垂直跨度线,其使用方法与水平跨度现完全相同。不同之处在于:
xmin
并xmax
定义跨度的范围和数据坐标。ymin
并ymax
定义跨度的开始和结束。它们以Axe
坐标(0 到 1)表示。
示例:
axs[0].set_title("K")
axs[0].axvspan(
xmin=3, # data coordinates
xmax=7, # data coordinates
color=colour_val
)
axs[1].set_title("L")
axs[1].axvspan(
xmin=1, # data coordinates
xmax=2, # data coordinates
ymax=0.2, # axe coordinates [0, 1]
color=colour_val
)
axs[1].axvspan(
xmin=4, # data coordinates
xmax=5.1, # data coordinates
ymin=0.4, # axe coordinates [0, 1]
ymax=0.65, # axe coordinates [0, 1]
color=colour_val
)
axs[1].axvspan(
xmin=7, # data coordinates
xmax=9, # data coordinates
ymin=0.8, # axe coordinates [0, 1]
color=colour_val
)
Method #6: ax.hlines()
这次,您可以通过一次函数调用来绘制多条线条——只需传递一个参数列表即可。
ax.hlines()
只需一次调用即可创建多条水平线。除此之外,您还可以改变每条线的外观,如长度或颜色。示例:
axs[0].hlines(
y=[2, 4, 6, 8], # data coordinates
xmin=1, # data coordinates
xmax=9, # data coordinates
color=colour_val
)
axs[1].hlines(
y=[2, 4, 6, 8], # data coordinates
xmin=1, # data coordinates
xmax=[9, 7, 5, 3], # data coordinates
color=colour_val
)
axs[2].hlines(
y=[2, 4, 6, 8], # data coordinates
xmin=[1, 5, 1, 5], # data coordinates
xmax=[3, 7, 2, 9], # data coordinates
color=["red", "green", "blue", "black"]
)
Method #7: ax.vlines()
垂直线遵循与水平线完全相同的创建逻辑,示例如下:
axs[0].set_title("P")
axs[0].vlines(
x=[2, 4, 6, 8], # data coordinates
ymin=1, # data coordinates
ymax=9, # data coordinates
color=colour_val
)
axs[1].set_title("Q")
axs[1].vlines(
x=[2, 4, 6, 8], # data coordinates
ymin=1, # data coordinates
ymax=[9, 7, 5, 3], # data coordinates
color=colour_val
axs[2].set_title("R")
axs[2].vlines(
x=[2, 4, 6, 8], # data coordinates
ymin=[1, 5, 1, 5], # data coordinates
ymax=[3, 7, 2, 9], # data coordinates
color=["red", "green", "blue", "black"]
)
一个综合的例子
您已经在文章简介中看到它了,就是:
此示例演示了如何使用线条指向或突出显示基础数据的某些属性。
创建它需要的方法:
ax.axhline()
为平均值。ax.axhspan()
为+/-一个标准差带。ax.hlines()
指向数据集中最小值和最大值的线。
🌟关于该实验的完整代码🌟
首先非常感谢朋友们对我的文章和公众号的支持!非常高兴能和大家分享一些文献和机器学习相关信息。如果你觉得这篇文章对你有帮助,并对完整的代码感兴趣,两步就可以得到这份代码啦:1)将我的公众号文章(任一)分享到朋友圈,并收集到10个赞;2)完成后,请将分享截图后台私信给我想要的代码并留下邮箱,后续将发送完整的实验代码给您作为感谢。
这样不仅可以帮助更多的人获得有价值的信息,也能鼓励我继续创作出更多优质内容。感谢你的支持与理解,期待你的截图哦!😊
声明:本公众号分享的前沿学术成果来源于各学术网站,不依法享有其所有权。若原作者发现本次分享中的文字及图片涉及侵权,请立刻联系公众号后台或发送邮件,我们将及时修改或删除!
邮箱:environmodel@sina.com
若您认为有用,欢迎
将Environmodel设为星标,或
点击“在看”或“分享”给他人