是否可以使用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
坐标。
答案 0 :(得分:0)
sns.jointplot
不使用2D数组作为参数。它需要(x,y)坐标。如果遵循该示例,则将x1
和x2
发布并绘制为散点图,将得到以下信息:
现在,如果您执行jointplot
,您将得到:
现在您看到,这绘制了点密度。但是这些点来自R-> R函数。您的2D数组是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)
给出:
EDIT2 之后,您对问题进行了更多研究:将房间中的人的坐标存储在房间中应该更容易,更精确。