利用矩阵制作二维人体生理图

2024-10-03 13:19:54 发布

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

我是python初学者,我有一个问题无法解决。我需要用txt中的矩阵做一个2d的横截面图,也可以用xls。 矩阵示例:

4.52   4.54   4.52   4.44   4.34   4.28
5.10   4.92   4.82   4.80   4.66   4.44
6.12   5.80   5.57   5.50   5.15   4.70 
6.47   6.54   6.27   6.13   6.21   5.97
8.11   8.73   8.70   8.63   8.84   8.55

我可以在代码中获得它:

a = np.loadtxt('matrix.txt')

然后我就要了。所以我有一部分代码,这使得一个hystogram像一个例子,但我不明白如何在这里集成我的矩阵:

import matplotlib.pyplot as plt

n = 100000
x = np.random.standard_normal(n)
y = 2.0 + 3.0 * x + 4.0 * np.random.standard_normal(n)

xedges = np.linspace(-4, 4, 42)
yedges = np.linspace(-25, 25, 42)

hist, xedges, yedges = np.histogram2d(x, y, (xedges, yedges))
xidx = np.clip(np.digitize(x, xedges), 0, hist.shape[0]-1)
yidx = np.clip(np.digitize(y, yedges), 0, hist.shape[1]-1)
c = hist[xidx, yidx]
plt.scatter(x, y, c=c)

plt.show()

在这段代码的帮助下,我想用我的矩阵做一个hystogram,但我不明白怎么做。我会很感激的


Tags: 代码txtclipnpplt矩阵randomhist
1条回答
网友
1楼 · 发布于 2024-10-03 13:19:54

显示矩阵的最简单方法是通过seaborn的热图。它看起来像:

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

a = np.array([[4.52, 4.54, 4.52, 4.44, 4.34, 4.28],
              [5.10, 4.92, 4.82, 4.80, 4.66, 4.44],
              [6.12, 5.80, 5.57, 5.50, 5.15, 4.70],
              [6.47, 6.54, 6.27, 6.13, 6.21, 5.97],
              [8.11, 8.73, 8.70, 8.63, 8.84, 8.55]])
sns.heatmap(a, annot=True, fmt='.2f', square=True)
plt.show()

resulting plot

由于这些值不是整数,也不是总和为1的浮点值,a似乎不是直方图

另一种方法是创建3D plot

import matplotlib.pyplot as plt
import numpy as np

a = np.array([[4.52, 4.54, 4.52, 4.44, 4.34, 4.28],
              [5.10, 4.92, 4.82, 4.80, 4.66, 4.44],
              [6.12, 5.80, 5.57, 5.50, 5.15, 4.70],
              [6.47, 6.54, 6.27, 6.13, 6.21, 5.97],
              [8.11, 8.73, 8.70, 8.63, 8.84, 8.55]])
fig = plt.figure(figsize=plt.figaspect(0.5))
ax = fig.add_subplot(1, 1, 1, projection='3d')

xedges = np.arange(a.shape[1] + 1)
yedges = np.arange(a.shape[0] + 1)

# Construct arrays for the anchor positions of the 30 bars.
xpos, ypos = np.meshgrid(xedges[:-1] + 0.25, yedges[:-1] + 0.25, indexing="ij")
xpos = xpos.ravel()
ypos = ypos.ravel()
zpos = 0

# Construct arrays with the dimensions for the 30 bars.
dx = dy = 0.5 * np.ones_like(zpos)
dz = a.ravel()

ax.bar3d(xpos, ypos, zpos, dx, dy, dz, zsort='average', color='turquoise')

plt.show()

3d bar plot

相关问题 更多 >