Pandas 如何用python从数据(表格)绘制等高线图?

Pandas 如何用python从数据(表格)绘制等高线图?,pandas,matplotlib,plot,contour,Pandas,Matplotlib,Plot,Contour,我想用表格数据画一个等高线图。 我有2个变量和响应(3列)。 我不知道如何用它来建造这个地块。我尝试了下面的代码。但我还有一个错误:输入z必须是2D,而不是1D feature_x = data.factor1 feature_y = data.factor2 # Creating 2-D grid of features [X, Y] = np.meshgrid(feature_x, feature_y) fig, ax = plt.subplots(1, 1) Z = da

我想用表格数据画一个等高线图。 我有2个变量和响应(3列)。 我不知道如何用它来建造这个地块。我尝试了下面的代码。但我还有一个错误:输入z必须是2D,而不是1D

feature_x = data.factor1
feature_y = data.factor2
  
# Creating 2-D grid of features
[X, Y] = np.meshgrid(feature_x, feature_y)
  
fig, ax = plt.subplots(1, 1)
  
Z = data.response
  
# plots filled contour plot
ax.contourf(X, Y, Z)
  
ax.set_title('Filled Contour Plot')
ax.set_xlabel('feature_x')
ax.set_ylabel('feature_y')
  
plt.show()
资料


要绘制等高线图,
z
需要是2d矩阵,包含所有点的值
(x,y)
。您可以将等高线图所需的数据视为数据框,其中索引为
x
,列为
y
,值为
z
。因此
z
需要是一个二维形状数组
(x.size,y.size)

由于
z
不是二维矩阵,而是一维数组,因此无法绘制等高线图

例如,您可以使用
hue
和/或
size
进行
relplot

将numpy导入为np
作为pd进口熊猫
导入seaborn作为sns
x=np.数组([1,1,1,1,2,2,2,3,3,3])
y=np.数组([1,2,3,4,1,2,3,4,1,2,3,4])
z=np.数组([24952360377577638069564252579575858])
df=pd.DataFrame({'x':x,'y':y,'z':z})
sns.relplot(
数据=df,
x='x',y='y',
尺寸='z',尺寸=(10100),
hue='z',
调色板“='coolwarm',
);

编辑 但是。。。例如,如果您正在寻找一个连续的估计值,您可以使用
gaussian_kde

import scipy.stats as sps
import matplotlib.pyplot as plt

offset = .25
xmin = x.min()-offset
xmax = x.max()+offset
ymin = y.min()-offset
ymax = y.max()+offset

X, Y = np.mgrid[xmin:xmax:100j, ymin:ymax:100j]
positions = np.vstack([X.ravel(), Y.ravel()])
values = np.vstack([x, y])
kernel = sps.gaussian_kde(values, weights=z)
Z = np.reshape(kernel(positions).T, X.shape)

fig, ax = plt.subplots(figsize=(7, 7))
ax.imshow(np.rot90(Z), cmap=plt.cm.gist_earth_r,
          extent=[xmin, xmax, ymin, ymax],
          aspect='auto'
         )
sns.scatterplot(
    data=df,
    x='x', y='y',
    size='z', sizes=(10, 200),
    color='k'
)
ax.set_xlim([xmin, xmax])
ax.set_ylim([ymin, ymax])
ax.legend(loc='upper left', bbox_to_anchor=(1,1))
plt.show()

当x和y值未排列在网格上时,您可以尝试
ax.tricontourf(data.factor1,data.factor2,data.response)
。是否可以发布
data.factor1.shape
data.factor2.shape
data.response.shape
的结果?如果
Z
不是一个二维矩阵,每个二维点[x,y]都有要指定的值,则无法绘制等高线图,因为您没有足够的数据。比如说,
feature_x
feature_y
是100个元素的1d数组,
Z
需要是一个(100100)矩阵,你能提供x、y和Z的样本吗?谢谢你的回复。x,y,z的形状是(12,)我把我的数据集的例子添加到我的问题中:用“连续”我的意思是你的数据x,y∈ N²用高斯函数,你可以得到X,Y∈ A²⊂ R²当z数据为负时,会出现一个错误,“a权重不能为负”。如果z.min(),则可以添加一行
z-=z.min()