matplot画网格线分层级的用法

网格线分级

一般情况下,我们设置网格线都不会太在意密度和精度的问题,导致下图这种看的有些眼花,横坐标在比较密集的时候很容易看窜行。

image-20230615191231845

所以如果可以把精度设置一下,或者设置一下主级和副级网格线,就会条理很多

MultiLocator

首先引入模块

from matplotlib.ticker import MultipleLocator

在 Matplotlib 库中,MultipleLocator 是用于设置刻度线间隔的类。与xticksyticks 方法相比,MultipleLocator 更加灵活,可以用于自定义刻度线的位置、格式和间隔。

通常情况下,我们会使用 Matplotlib 自带的刻度线定位器(Locator)来设置轴上的刻度线位置。例如:

import matplotlib.pyplot as plt
from matplotlib.ticker import AutoLocator

fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6])
ax.xaxis.set_major_locator(AutoLocator())
plt.show()

image-20230615191925783

上述代码中,AutoLocator() 是一个自动刻度线定位器,它会自动计算并设置 x 轴刻度线的位置和间隔。

但是,有的时候我们想要手动控制刻度线的位置或者间隔。这个时候就可以使用MultipleLocator 来设置刻度线的间隔。例如:

import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator

fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6])

# 设置 x 轴刻度线间隔
ax.xaxis.set_major_locator(MultipleLocator(1))
ax.xaxis.set_minor_locator(MultipleLocator(0.5))

plt.show()

image-20230615192026274

1和0.5分别代表着1是major网格线,所以会有刻度显示,而0.5只作为minor网格线会有刻度,但不会显示值。这样,就能够手动设置刻度线的位置和间隔。在实际应用中,MultipleLocator 还可以用于设置其他类型的轴(例如 log 坐标轴)的刻度线间隔。

之后我们可以对两种线进行一些属性的设置,此时会用到tick_params函数来设置一些可视化的属性。

tick_params() 方法中常用的参数解析:

-axis 设置要操作的轴。可以取值 'x'、'y' 或 'both'。
-which 设置要操作的刻度线类型。可以取值 'major'(主要刻度线)、'minor'(次要刻度线)或 'both'。
-direction 设置刻度线和刻度标签的朝向。可以取值 'in'、'out' 或 'inout'。
-length 设置刻度线的长度。
-width 设置刻度线的宽度。
-color 设置刻度线和刻度标签的颜色。
-pad 设置刻度标签和刻度线的间距。
-labelsize 设置刻度标签的字号大小。
-labelrotation 设置刻度标签的旋转角度。
-grid_color 设置网格线的颜色。
-grid_alpha 设置网格线的透明度。
-grid_linewidth 设置网格线的宽度。

ax.tick_params(axis="both", which="major", direction="in", width=1, length=5)
ax.tick_params(axis="both", which="minor", direction="in", width=1, length=3)

我对两个坐标轴的主副刻度线都进行处理,主刻度线为长度5,副刻度线为3

做好之后就行对图中的网格线进行设置,

Matplotlib 的grid() 函数可以用于绘制网格线。该函数的常用参数如下:

-b 设置是否显示网格线。可以取值为 True 或 False。
-which 设置要绘制的网格线类型。可以取值 'major'(主要网格线)、'minor'(次要网格线)或 'both'。
-axis 设置在哪个轴上绘制网格线。可以取值 'x'、'y' 或 'both'。
-color 设置网格线的颜色。
-linestyle 设置网格线的类型。可以取值为 '-'(实线)、'--'(虚线)、':'(点线)或 '-.'(点划线)。
-linewidth 设置网格线的宽度。
-alpha 设置网格线的透明度。

ax.grid(True, which="major", linestyle="--", color="gray", linewidth=0.75)
ax.grid(True, which="minor", linestyle=":", color="lightgray", linewidth=0.75)

主线用灰色虚线,副线用浅灰色的点线表示

image-20230615192836765

这样子的话就可以很清楚的区分不同位置对应的坐标,看起来更优美一点

posted @ 2023-06-15 19:31  ivanlee717  阅读(492)  评论(0编辑  收藏  举报