pandas - 使用seaborn jointplot绘制2D numpy数组

标签 pandas numpy seaborn

有没有办法用 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)失败了,因为我不知道不知道 xy 使用什么。它应该看起来像这样:https://seaborn.pydata.org/examples/joint_kde.html

非常感谢任何帮助。 谢谢。

编辑:我想要的图是存储在 a 中的值的图形表示。这些值表示某个位置的人数,数据的第 2 轴是楼层的 xy 坐标。

最佳答案

sns.jointplot 不采用二维数组作为参数。它需要 (x,y) 坐标。如果您按照您发布的示例并将 x1x2 绘制为散点图,您将得到以下结果:

<code>plt.scatter(x1,x2)</code>

现在,如果你执行jointplot,你会得到:

<code>g = sns.jointplot(x1, x2, kind="kde", height=7, space=0)</code>

现在您看到了,这绘制了点密度。但这些点来自 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")

并得到你的结果:

g2 = sns.jointplot(y1, y2, kind="kde")

编辑刚刚看到您的编辑。那么显示数组的最简单方法是

import matplotlib.pyplot as plt
plt.imshow(a)

给出:

<code>plt.imshow(a)</code>

编辑2在进一步研究您的问题后:存储房间中人员的坐标应该更容易、更准确。

关于pandas - 使用seaborn jointplot绘制2D numpy数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53164122/

相关文章:

python-3.x - Python/Pandas 按日期聚合

python - 如何找到大于 n 的连续值的数量,从最近的日期回溯

python - 为什么从数组转换为图像时会发生位移?

python - 如何在Python中根据条件对多列进行分组并创建新列?

Python SciPy n选k的可能情况

python-3.x - cv2 - 用噪声掩盖图像

python - 如何在绘图中添加悬停注释

python - 具有不同范围的分割 fiddle 图

python - 如何迭代 numpy 矩阵和填充值?

Python Pandas 数据框 : replace variable by the frequency count