有没有办法用 sns.jointplot
绘制 2D numpy.array?
这是我的数组:
a = np.array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
1., 0., 0., 0., 0., 0., 1., 1., 2., 1., 2., 1., 1., 1., 0., 0.,
0., 0., 0., 0., 0.],
[0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 0., 0., 1., 0., 0.,
1., 0., 0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 0., 0., 0.,
0., 0., 0., 0., 0.],
[0., 0., 2., 1., 2., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 1.,
0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1.,
1., 1., 1., 0., 0.],
[0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0.]])
我尝试执行df = pd.DataFrame(a)
,并且得到了预期的矩阵,但是sns.jointplot(df)
失败了,因为我不知道不知道 x
和 y
使用什么。它应该看起来像这样:https://seaborn.pydata.org/examples/joint_kde.html
非常感谢任何帮助。 谢谢。
编辑:我想要的图是存储在 a 中的值的图形表示。这些值表示某个位置的人数,数据的第 2 轴是楼层的 x
和 y
坐标。
最佳答案
sns.jointplot
不采用二维数组作为参数。它需要 (x,y) 坐标。如果您按照您发布的示例并将 x1
和 x2
绘制为散点图,您将得到以下结果:
现在,如果你执行jointplot
,你会得到:
现在您看到了,这绘制了点密度。但这些点来自 R->R 函数。你的二维数组是一个 R²->R 函数。如果您希望将其重新解释为点密度,则可以将其转换为 R->R 函数,在计算其密度时,该函数看起来与旧的 R²->R 函数相同。
幸运的是,你只有整数,所以如果你想要
值 2
在数组坐标 [0,24]
处,那么您只需要在坐标 (0,24)
处有两个点即可接收密度值2
。所以我们需要做的就是找出应该有多少个点,然后我们得到所需的两个数组:
#initiate
y1 = np.array([])
y2 = np.array([])
#create locations
for i in range(1,a.max()+1):
for j in range(i):
locs = np.where(a==i)
try:
y1 = np.append(y1, locs[0])
y2 = np.append(y2, locs[1])
except: #this number doesn't exist in the array
break
对于数组中的每个数字n,这将在正确的位置创建n 个点。然后您可以调用:
g2 = sns.jointplot(y1, y2, kind="kde")
并得到你的结果:
编辑刚刚看到您的编辑。那么显示数组的最简单方法是
import matplotlib.pyplot as plt
plt.imshow(a)
给出:
编辑2在进一步研究您的问题后:存储房间中人员的坐标应该更容易、更准确。
关于pandas - 使用seaborn jointplot绘制2D numpy数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53164122/