使用matplotlib绘制2D网格网格

时间:2014-05-08 06:31:35

标签: python matplotlib plot

我想绘制一个非常规的2D离散矩形网格 x轴值,例如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是一维非常规向量。

这段代码产生了良好的离散化网格,问题就在于此 xtics和ytics标签因为它们出现在xPoints和yPoints的所有值上(它们重叠)。 如何轻松重新定义轴中的打印值? 让我们说我只想显示x和y的最小值和最大值,而不是离散化网格中的所有值。 我不能发布一个示例图,因为这是我第一次在这里问一些东西(我可以通过邮件发送请求)

2 个答案:

答案 0 :(得分:0)

问题是你在写下时明确告诉matplotlib标记每个点:

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

注释掉这些行,看看结果如何。

当然,如果您只想标记第一个和最后一个点,它就会变为:

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

答案 1 :(得分: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.2s,希望我能在这里发布一张图片。