Matlab中带有密度的散点图

12
我想在一个垂直的图中绘制数据集1和数据集2。不幸的是,数据量很大,所以只有一堆点,无法看到密度。我尝试了hist3和其他建议,但它会覆盖我的数据集,而且分箱看起来很糟糕。是否有另一种方法来绘制散点密度图?真的没有Matlab函数可以做到吗?如果没有,我应该使用哪个程序来轻松生成这样的图形?这两个示例之间的混合物:

Example1

Example2
(来源:bcgsc.ca)


我不确定我完全理解这个问题 - 但是拥有半透明圆圈不会解决你的问题吗?在较暗的地方密度会更高(因为更多的圆圈重叠在那里)。如果这已经足够好了,那么不能通过“标准”手段来完成(设置绘图/散点的alpha),但是可以使用补丁进行变通(可以是半透明的),例如,请参见[https://dev59.com/g2w15IYBdhLWcg3w1vSB]。 - TJ27
2个回答

22

感谢@Emil Albert指出错误(漏了一个转置)


使用 hist3 进行计算并使用 imagesc 显示结果有什么问题吗?

data1 = randn(1,1e5); %// example data
data2 = randn(1,1e5) + .5*data1 ; %// example data correlated to above
values = hist3([data1(:) data2(:)],[51 51]);
imagesc(values.')
colorbar
axis equal
axis xy

enter image description here


如果您希望轴与真实数据值相符:请使用hist3的第二个输出获取条形图中心的位置,并将其传递给imagesc
data1 = randn(1,1e5); %// example data
data2 = 2*randn(1,1e5) + 1.2*data1 + 4; %// example data correlated to above
[values, centers] = hist3([data1(:) data2(:)],[51 51]);
imagesc(centers{:}, values.')
colorbar
axis xy

enter image description here


2
@C.Colden 当然可以。您可以使用 hold on 并在其上绘制线条。例如,尝试在我的代码后输入 hold on; plot(1:50,1:50,'k--','linewidth',1.5) - Luis Mendo
@LuisMendo 绘制图表或散点图的问题在于你会失去密度。我真的希望能够保持完全相同的图像,只更改轴。 - Integral
1
@Integral 我想我现在明白了。请查看已编辑的答案。 - Luis Mendo
就是这样!你理解得非常好。感谢你的编辑,它对我帮助很大。 - Integral
@EmilAlbert 感谢您的编辑。您是正确的,缺少了一个转置。我已经更新了图片。 - Luis Mendo
显示剩余5条评论

2
尝试在文件交换平台上提交小提琴图。它非常可定制。我一直在使用它。感谢@Jonas。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接