科研绘图教程4 | 有代码!功法多不压身,绘制线条的7种实用方法!

文摘   2024-11-02 11:54   浙江  
点击订阅公众号 | 前沿学术成果每日更新               

目录:

  • 准备工作

  • 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(
    13,
    sharex=True,
    sharey=True,
    layout="constrained"
)
fig.suptitle("The TITLE")

# Axis limits
axs[0].set_xlim(010)
axs[0].set_ylim(010)

# PLOTS

# Plot functions go here
# ...

# Other settings
for ax in axs:
    ax.set_xticks(
        ticks=np.arange(2112),
        labels=[f"{x}" for x in np.arange(2102)] + [""],
    )
    ax.set_yticks(
        ticks=np.arange(2112),
        labels=[f"{y}" for y in np.arange(2102)] + [""],
    )
    ax.grid()

7种线条创建方法介绍

Method #1: ax.axhline()

ax.axhline() 用于创建水平线,通过使用可选参数xminxmax可以限制线的范围。

下面是创建 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(),绘制垂直跨度线,其使用方法与水平跨度现完全相同。不同之处在于:

  • xminxmax定义跨度的范围和数据坐标。
  • yminymax定义跨度的开始和结束。它们以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=[2468],  # data coordinates
    xmin=1,  # data coordinates
    xmax=9,  # data coordinates
    color=colour_val
)

axs[1].hlines(
    y=[2468],  # data coordinates
    xmin=1,  # data coordinates
    xmax=[9753],  # data coordinates
    color=colour_val
)

axs[2].hlines(
    y=[2468],  # data coordinates
    xmin=[1515],  # data coordinates
    xmax=[3729],  # data coordinates
    color=["red""green""blue""black"]
)

Method #7: ax.vlines()

垂直线遵循与水平线完全相同的创建逻辑,示例如下:

axs[0].set_title("P")
axs[0].vlines(
    x=[2468],  # data coordinates
    ymin=1,  # data coordinates
    ymax=9,  # data coordinates
    color=colour_val
)

axs[1].set_title("Q")
axs[1].vlines(
    x=[2468],  # data coordinates
    ymin=1,  # data coordinates
    ymax=[9753],  # data coordinates
    color=colour_val
    
axs[2].set_title("R")
axs[2].vlines(
    x=[2468],  # data coordinates
    ymin=[1515],  # data coordinates
    ymax=[3729],  # data coordinates
    color=["red""green""blue""black"]
)

一个综合的例子

您已经在文章简介中看到它了,就是:

此示例演示了如何使用线条指向或突出显示基础数据的某些属性。

创建它需要的方法:

  • ax.axhline()为平均值。
  • ax.axhspan()为+/-一个标准差带。
  • ax.hlines()指向数据集中最小值和最大值的线。
image-20241026200635564image-20241022191312573

🌟关于该实验的完整代码🌟

首先非常感谢朋友们对我的文章和公众号的支持!非常高兴能和大家分享一些文献和机器学习相关信息。如果你觉得这篇文章对你有帮助,并对完整的代码感兴趣,两步就可以得到这份代码啦:1)将我的公众号文章(任一)分享到朋友圈,并收集到10个赞;2)完成后,请将分享截图后台私信给我想要的代码并留下邮箱,后续将发送完整的实验代码给您作为感谢。

这样不仅可以帮助更多的人获得有价值的信息,也能鼓励我继续创作出更多优质内容。感谢你的支持与理解,期待你的截图哦!😊

               

               

声明:本公众号分享的前沿学术成果来源于各学术网站,不依法享有其所有权。若原作者发现本次分享中的文字及图片涉及侵权,请立刻联系公众号后台或发送邮件,我们将及时修改或删除!         

邮箱:environmodel@sina.com         

若您认为有用,欢迎

Environmodel设为星标,或

点击“在看”或“分享”给他人

Environmodel
Environmodel(环境模型)专注于环境科学与工程领域的建模及模型研究进展,并分享涵盖机器学习、深度学习以及人工智能等相关领域的理论知识、主流工具和Python编程技巧。
 最新文章