轮廓没有浮动文物

时间:2016-07-04 06:21:18

标签: python matplotlib scipy contour

我在轮廓数据之后进行线性插值。对于计算我使用浮点类型,因为我不知道输入数据中会有多少小数。有时它可能没有小数,有时一个或十几个。

不幸的是因为在插值和使用相同值的轮廓后使用浮点数会产生不必要的伪像。如何修复我的代码,以便不产生任何不存在的轮廓伪像?

简单的代码示例:

import numpy as np
from scipy.interpolate import griddata
import matplotlib.pyplot as plt

interval_in = np.linspace(1, 100, 10)
interval_out = np.linspace(1, 100, 100)
xin, yin = np.meshgrid(interval_in, interval_in)
zin = np.ones((10, 10))*10
xout, yout = np.meshgrid(interval_out, interval_out)
zout = griddata((xin.flatten(),yin.flatten()),zin.flatten(),(xout,yout),method='linear')

contours = plt.contour(xout, yout, zout, levels=[10])
plt.show()

Contour artifacts

1 个答案:

答案 0 :(得分:2)

使用您的示例zout应该全部为10.但实际上在9.9999999999999982和10.000000000000002之间变化,因此轮廓试图绘制此图。您可以使用numpy舍入到给定的精度,

zout_ = np.round_(zout, decimals=3)
contours = plt.contour(xout, yout, zout_, levels=[10])
plt.show()

但是,如果您的数据范围很大,轮廓应该正常工作......