使用matplotlib绘制2D网格
我想绘制一个二维的矩形网格,这个网格的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()
...
hlines
和 vlines
分别是水平线和垂直线,你可以用边界数据来指定这些线在 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]])
...