【问题标题】:Create density plot from 2d matrix从二维矩阵创建密度图
【发布时间】:2021-05-12 04:55:28
【问题描述】:

我有一个二维值矩阵,我想将其绘制为二维直方图。

一个简化的例子: 我有一个初始速度的一维数组,比如vi = [1, 2, 3],对于vi 中的每个值,我有一行相应的最终速度存储在二维数组vf = [ [0.7, 1.1, 1.5], [1.8, 2.1, 2.4], [2.7, 2.9, 3.1] ] 中。 我希望能够制作点(vi, vf) 的二维直方图,即坐标[1, 0.7], [1, 1.1], [1, 1.5], [2, 1.8], [2, 2.1], [2, 2.4], and [3,2.7], [3, 2.9], [3, 3.1]

有没有办法创建这样的配对?

The answer to this question 建议使用 imshow 或 matshow,但会根据分配给每个元素的值对 bin 进行着色。我需要的是一个绘图例程,它采用 2d 矩阵,将其划分为网格,并通过每个 bin 中的 count 为每个 bin 着色。

感谢任何帮助!

【问题讨论】:

  • 您至少应该添加一个数据示例,并说明您希望它们如何放入 2d bin 中。价值观代表什么?
  • 添加了一个例子

标签: python matplotlib matrix imshow


【解决方案1】:

您似乎有一个 2D 空间,其中 x 值来自 vi,y 值来自 vf。重复 vi n 次(n 的行长度为 vf)使 xy 数组具有相同数量的元素,对应于所需的元组。

在代码中:

import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt

vi = np.array([1, 2, 3])
vf = np.array([[0.7, 1.1, 1.5], [1.8, 2.1, 2.4], [2.7, 2.9, 3.1]])

x = np.repeat(vi, vf.shape[1]) # repeat the x-values by the row-length of `vf`
y = vf.ravel() # convert to a 1D array
sns.histplot(x=x, y=y)
plt.show()

数据如此之少,情节看起来很无趣。您必须使用真实数据进行测试,以确定它是否符合您的预期。

print([*zip(x,y)])(x,y) 打印为元组,即

[(1, 0.7), (1, 1.1), (1, 1.5), (2, 1.8), (2, 2.1), (2, 2.4), (3, 2.7), (3, 2.9), (3, 3.1)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-25
    • 2021-10-04
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 2020-12-07
    相关资源
    最近更新 更多