我正在尝试使用MATPLOTLIB绘制2D有限元网格。我在使用MAYAVI时遇到一些问题,因此这不是一种选择。
我想知道MATPLOTLIB是否在Matlab中具有“ PATCH”之类的功能,其工作方式如下:
x = [0.0, 0.5, 1.0, 1.0, 1.0, 0.5, 0.0, 0.0];
y = [0.0, 0.0, 0.0, 0.5, 1.0, 1.0, 1.0, 0.5];
v = [0.0, 0.0, 0.0, 0.5, 1.0, 1.0, 1.0, 0.5];
patch(x, y, v)
并生成如下所示的图。简而言之,我需要一个简单的补丁绘图功能,这意味着我不想要使用任何特殊的库来这样做。 (以防有人问我为什么需要这个:我教本科生,我正在使用Python3.6进行编码。)
答案 0 :(得分:2)
由于插值之间只有8个点,因此无法很好地定义结果图。即plt.scatter(x,y,c=v)
看起来像
使用类似tricontourf
的情节
plt.tricontourf(x,y,v)
看起来像
当然,您可以自由选择任意多个级别,例如100
plt.tricontourf(x,y,v,100)
虽然这看起来像是一个有问题的情节,但我认为它不适合用于教学目的,您宁愿教人们有关插值的问题以及执行这种插值的不同方法。
从这个意义上讲,将数据和绘图分开保存可能是一个更好的选择。因此,我宁愿先进行插值,然后再显示结果。这里的Contour plot of irregularly spaced data示例也许是一个很好的起点。而这种情况的示例可能看起来像
x = [0.0, 0.5, 1.0, 1.0, 1.0, 0.5, 0.0, 0.0];
y = [0.0, 0.0, 0.0, 0.5, 1.0, 1.0, 1.0, 0.5];
v = [0.0, 0.0, 0.0, 0.5, 1.0, 1.0, 1.0, 0.5];
import numpy as np
from scipy.interpolate import griddata
import matplotlib.pyplot as plt
xi = np.linspace(min(x), max(x), 100)
yi = np.linspace(min(y), max(y), 100)
zi = griddata((x, y), v, (xi[None,:], yi[:,None]), method='linear')
plt.pcolormesh(xi,yi,zi)
plt.show()
这使用pcolormesh
绘图,由于它本身不执行任何插值,因此更易于掌握以在常规网格上显示数据。