首页 > 解决方案 > 如何在 matplotlib 中绘制二维结构化网格

问题描述

我正在尝试使用 matplotlib 绘制结构化网格(见下图)

import numpy as np
import matplotlib.pyplot as plt

x, y = np.meshgrid(np.linspace(0,1, 11), np.linspace(0, 0.6, 7))

plt.scatter(x, y)
plt.show()

我有一个离散的点,但我不知道如何将它们连接起来得到这样的东西:

期望的结果是:

此链接中的预期结果

我很感激任何帮助

标签: pythonnumpymatplotlibmesh

解决方案


我会为此使用两个 linecollections:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection

x, y = np.meshgrid(np.linspace(0,1, 11), np.linspace(0, 0.6, 7))

plt.scatter(x, y)

segs1 = np.stack((x,y), axis=2)
segs2 = segs1.transpose(1,0,2)
plt.gca().add_collection(LineCollection(segs1))
plt.gca().add_collection(LineCollection(segs2))
plt.show()

在此处输入图像描述

另请参阅如何使用 matplotlib (python) colah 的变形网格进行绘图?

因为如果网格不变形,画一个单一的linecollection会更高效,比如

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection

x, y = np.meshgrid(np.linspace(0,1, 11), np.linspace(0, 0.6, 7))

segs1 = np.stack((x[:,[0,-1]],y[:,[0,-1]]), axis=2)
segs2 = np.stack((x[[0,-1],:].T,y[[0,-1],:].T), axis=2)

plt.gca().add_collection(LineCollection(np.concatenate((segs1, segs2))))
plt.autoscale()
plt.show()

推荐阅读