【发布时间】:2023-03-22 06:53:01
【问题描述】:
我有一个 pandas DataFrame,其中 x、y 和 z 列给出了非均匀间隔的数据点,其中 x 和 y 是变量对,z 是因变量。例如:
import matplotlib.pyplot as plt
from matploblib.mlab import griddata
import numpy as np
import pandas as pd
df = pd.DataFrame({'x':[0, 0, 1, 1, 3, 3, 3, 4, 4, 4],
'y':[0, 1, 0, 1, 0.2, 0.7, 1.4, 0.2, 1.4, 2],
'z':[50, 40, 40, 30, 30, 30, 20, 20, 20, 10]})
x = df['x']
y = df['y']
z = df['z']
我想在 x 和 y 上绘制因变量 z 的等高线图。为此,我创建了一个新网格来使用 matplotlib.mlab 的 griddata 函数插入数据。
xi = np.linspace(x.min(), x.max(), 100)
yi = np.linspace(y.min(), y.max(), 100)
z_grid = griddata(x, y, z, xi, yi, interp='linear')
plt.contourf(xi, yi, z_grid, 15)
plt.scatter(x, y, color='k') # The original data points
plt.show()
虽然这可行,但输出不是我想要的。我不希望 griddata 在 x 和 y 数据的最小值和最大值给出的边界之外进行插值。以下图表是调用 plt.show() 后显示的内容,然后以紫色突出显示我想要插值和绘制轮廓的数据区域。紫色线外的轮廓应该是空白的。我怎么能去屏蔽外围数据?
很遗憾,linked question 没有回答我的问题,因为我没有明确的数学方法来定义进行三角测量的条件。是否可以仅根据数据定义一个条件来屏蔽数据,以上面的Dataframe为例?
【问题讨论】:
-
不幸的是,链接的问题没有回答我的问题,因为我没有明确的数学方法来定义进行三角测量的条件。是否可以仅根据数据定义一个条件来屏蔽数据,以上面的Dataframe为例?
-
我解释了您的“最小值和最大值”,以便您有条件。如果不是这种情况,请参阅下面的答案。
标签: python matplotlib plot