Matlab中具有密度的散点图
Posted
技术标签:
【中文标题】Matlab中具有密度的散点图【英文标题】:Scatter plot with density in Matlab 【发布时间】:2014-01-27 04:38:27 【问题描述】:我想在一个垂直的绘图中绘制数据集 1 和数据集 2。可惜数据很大,所以只是点的涂抹,看不到密度。我尝试了 hist3 和其他建议,但它覆盖了我的数据集并且分箱看起来很糟糕。
还有另一种绘制散点密度图的方法吗?真的没有Matlab函数吗?如果没有,我可以使用哪个程序来轻松生成这样的图?
这两个例子的混合:
(来源:bcgsc.ca)
【问题讨论】:
我不能 100% 确定我明白了这个问题 - 但是半透明的圆圈不能解决你的问题吗?在较暗的地方密度会更高(由于更多的圆圈重叠在那里)。如果这足够好,则无法通过“标准”方式(设置绘图/散点图的 alpha)来完成(afaik),但是有一种使用补丁(可以是半透明的)的解决方法,例如,参见 [@987654323 @ 【参考方案1】:感谢@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
如果您希望轴与真实数据值一致:使用hist3
的第二个输出来获取bin 中心的位置,并将它们传递给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
【讨论】:
在上面的例子中我可以使用保持开/关的方法吗? @C.Colden 当然。您可以使用hold on
并在其上绘制线条。在我的代码之后尝试例如hold on; plot(1:50,1:50,'k--','linewidth',1.5)
有没有办法让 x,y 轴对应于实际采用的随机数?我确信随机数的浓度并不接近图中所示的点 (25,25)。如果可能的话会提供更多信息。
@Integral 要查看实际数字,您可以使用plot
或scatter
,它们会在数字上绘制一个标记。在我上面的代码中,使用plot(data1, data2, '.', 'markersize', .1)
。但是如果你有很多点,就很难区分它们
@Integral 我想我现在明白了。请查看编辑后的答案【参考方案2】:
尝试在文件交换上提交Violin Plot。它非常可定制。我用它所有的时间。感谢@Jonas。
【讨论】:
以上是关于Matlab中具有密度的散点图的主要内容,如果未能解决你的问题,请参考以下文章
100天精通Python(可视化篇)——第82天:matplotlib绘制不同种类炫酷散点图参数说明+代码实战(二维散点图三维散点图散点图矩阵)