【问题标题】:4D heatmap in Python or MATLAB [duplicate]Python或MATLAB中的4D热图[重复]
【发布时间】:2018-02-04 23:34:02
【问题描述】:

我有一个 3D 数据集,我用散点图对其进行可视化。看起来是这样的:

我现在想根据数据的密度为不同的点着色。有什么办法可以在 Python 或 MATLAB 中做到这一点?另一种选择可能是对数据进行分箱并根据其中有多少数据点为分箱着色。我使用 Python 的 histogramdd 函数对数据进行了分箱。

H,edges = np.histogramdd(al,bins=(16,16,16))

我们的想法是让它看起来像这样:

使用此线程中提供的代码:3D discrete heatmap in matplotlib

如果您对我如何做到这一点有任何想法,我会很高兴听到他们的意见!

【问题讨论】:

  • 散点图本身(matlab中的scatter3)可以带一个参数来确定每个散点的大小,另一个参数来确定颜色。
  • 参见stackoverflow.com/a/38557802/4183191 以获取 2D 示例; 3D 示例是相同的;只需为第三维添加另一个参数。如果您喜欢正方形,也可以为您的点选择形状。
  • 是的,谢谢,我虽然是这样,但我如何获得各个数据点的数据密度以确定它们的颜色?
  • 我现在计算一定范围内的邻居数量来确定颜色,它给出了一个漂亮的结果。如果有一个用于 3d 热图的内置函数,那么知道它真的很酷:)
  • 据我所知,没有内置函数,但您应该能够相当有效地实现您所描述的内容,在这种情况下您有您的解决方案,请考虑将其发布为答案

标签: python matlab plot heatmap 4d


【解决方案1】:

感谢大家的想法。不幸的是,使用 hist3 fundtion 不起作用,因为我有 3 个维度,而 hist3 只需要两个变量并将直方图值计算为第三个。我现在的解决方案是为每个数据点计算一定半径内的点数。然后我使用这些值用 scatter3(x,y,z,2,c) 为我的绘图着色

c=zeros(size(x));
for i=1:length(x)
  j=1:length(x);
  j(i)=[];
  s = sort((x(j)-x(i)).^2+(y(j)-y(i)).^2+(d(j)-d(i)).^2);
  c(i)=sum(s<2);
end
scatter3(d,x,y,2,c)

【讨论】:

  • 添加一个包含一些代码的最小工作示例,以便它对未来的访问者更多有用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 2016-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
相关资源
最近更新 更多