从二维矩阵创建密度图

2024-04-25 11:59:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个2d值矩阵,我想将其绘制为2d直方图

一个简化的例子: 我有一个1d初始速度数组,比如vi = [1, 2, 3],对于vi中的每个值,我有一行相应的最终速度存储在一个2d数组中,vf = [ [0.7, 1.1, 1.5], [1.8, 2.1, 2.4], [2.7, 2.9, 3.1] ]。 我希望能够制作点(vi, vf)的2d直方图,即坐标[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,但这会根据分配给每个元素的值为容器着色。我需要的是一个绘图例程,它获取一个2d矩阵,将其划分为一个网格,并通过每个网格中的计数为每个网格着色

感谢您的帮助


Tags: andtheto方法answer网格绘制矩阵
1条回答
网友
1楼 · 发布于 2024-04-25 11:59:42

您似乎有一个2D空间,其中x值来自vi,y值来自vf。重复vi{}次(使用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)]

相关问题 更多 >