使用matplotlib绘制2D网格

2 投票
2 回答
5606 浏览
提问于 2025-04-18 05:47

我想绘制一个二维的矩形网格,这个网格的x和y轴的值是不规则的,比如在计算流体力学(CFD)中常用的那种离散化网格。下面是一个代码示例:

    fig = plt.figure(1,figsize=(12,8))

    axes = fig.add_subplot(111)

    matplotlib.rcParams.update({'font.size':17})

    axes.set_xticks(self.xPoints)
    axes.set_yticks(self.yPoints)

    plt.grid(color='black', linestyle='-', linewidth=1)

    myName = "2D.jpg" 

    fig.savefig(myName)

在这个代码中,self.xPoints和self.yPoints是一些一维的不规则向量。

这段代码能生成一个不错的离散化网格,但问题在于x轴和y轴的标签,因为它们会显示所有xPoints和yPoints的值(会重叠在一起)。我该如何简单地重新定义轴上显示的值呢?比如我只想显示x和y的最小值和最大值,而不是所有的离散化网格的值。

我不能发图给你们,因为这是我第一次在这里提问(如果需要,我可以通过邮件发送)。

2 个回答

0

如果你是通过 axes.set_xticks() 来设置网格线的话,我觉得在你的情况下,显示不重叠的刻度是不太可能的。

我可能有个解决办法给你:

...

ax = plt.gca()

#Arr_y: y-direction data, 1D numpy array or list.
for j in range(len(Arr_y)):
    plt.hline(y = Arr_y[j], xmin = Arr_x.min(), xmax = Arr_x.max(), color = 'black')

#Arr_x: x-direction data, 1D numpy array or list.
for i in range(len(Arr_x)):
    plt.vline(x = Arr_x[i], ymin = Arr_y.min(), ymax = Arr_y.max(), color = 'black')

#Custom your ticks here, 1D numpy array or list.
ax.set_xticks(Arr_xticks)
ax.set_yticks(Arr_yticks)

plt.xlim(Arr_x.min(), Arr_x.max())
plt.ylim(Arr_y.min(), Arr_y.max())

plt.show()
...

hlinesvlines 分别是水平线和垂直线,你可以用边界数据来指定这些线在 x 和 y 方向上的位置。

我试过用一个 60×182 的不规则网格,这花了我 1.2 秒,希望我能在这里发张图片。

0

问题在于你明确告诉matplotlib要给每个点加标签,当你写了以下代码时:

axes.set_xticks(self.xPoints)
axes.set_yticks(self.yPoints)

把那些行注释掉,看看结果会是什么样子。

当然,如果你只想给第一个和最后一个点加标签,可以这样写:

axes.set_xticks([self.xPoints[0], self.xPoints[-1]])
...

撰写回答