如何重新格式化数据以制作4维热图(3个空间维度+强度)
我想做一个像这样的图:

关于怎么做的代码可以在这里找到:
如何在Matplotlib中绘制3D热图颜色不过,我的数据格式和例子中的有点不同。具体来说,我有一个3x3x3的矩阵,表示一个三参数空间的数据(我把这三个参数叫做'sigma'、'mu'和'accuracy'),每个矩阵元素代表该位置(i,j,k)的数据强度,像这样:
>>> defect_averaged
array([[[ 15.81818182, 16.90909091, 6.72727273],
[ 15.63636364, 19.81818182, 6. ],
[ 1.09090909, 15.63636364, 6. ]],
[[ 16.36363636, 16. , 5.45454545],
[ 11.81818182, 15.09090909, 5.27272727],
[ 1.09090909, 16.72727273, 5.81818182]],
[[ 11.27272727, 18.36363636, 5.63636364],
[ 10.36363636, 17.27272727, 6. ],
[ 0. , 17.09090909, 8.18181818]]])
所以defect_averaged[0,0,0]
的强度是15.81,等等。
还有一个问题是,我想要一个正确缩放的图,刻度标签显示为.001、.01、.1,而不是显示数组的索引(比如0、1、2)。这是因为这些参数只在某些特定的值上进行了评估。例如,强度只在sigma = [.001, .01, .1]
、mu = [.001, .01, .1]
和accuracy = [.51,.6,.9]
上进行了评估。因此我得到了这个3x3x3的数据数组。
有没有什么好的方法可以处理我的数据,以便能轻松绘制成热图呢?非常感谢你的时间!
1 个回答
0
你需要输入具体的数值,然后把所有东西转换成简单的数组。
defect = defect_averaged.flatten()
sigma_flat = np.tile(sigma, 9) # This gives you [.001, .01, .1, .001, .01, .1...]
mu_flat = np.tile(np.repeat(sigma, 3), 3) # This is to get [.001, .001, .001, .1, .1....001, .001, .001, .1, .1...]
accuracy_flat = np.repeat(accuracy, 9) # This gives you [.51, .51, .51, .51,....
接着就可以用你喜欢的方法来绘制图形了:
plt.scatter(sigma_flat, mu_flat, accuracy_flat, defect)