You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB中scatterhist标记点透明度控制及叠加等高线方法咨询

解决MATLAB scatterhist的两个需求:散点透明度与等高线叠加

我来帮你搞定这两个关于scatterhist的可视化需求,一步步来~

一、控制散点标记的透明度

scatterhist函数返回的对象里包含了散点图的句柄,咱们可以直接通过修改这个句柄的透明度属性来实现效果:

  1. 首先调用scatterhist时,要捕获返回的所有句柄:

    [ax, hscat, hbx, hby] = scatterhist(x, y);
    

    这里hscat就是散点图的句柄,ax是三个子图的轴对象数组,hbx和hby是左右两个直方图的句柄。

  2. 修改散点的透明度属性:
    MATLAB里散点的透明度分填充色透明度(MarkerFaceAlpha)和边框色透明度(MarkerEdgeAlpha),你可以根据需求单独设置:

    % 设置填充透明度为0.3(0完全透明,1完全不透明),边框透明度为0.6
    set(hscat, 'MarkerFaceAlpha', 0.3, 'MarkerEdgeAlpha', 0.6);
    

    如果想要填充和边框透明度一致,只需要设置其中一个或者两个都设为相同值就行。

二、在散点上方添加等高线图

要在散点上叠加等高线,咱们需要先计算数据的核密度分布,再把等高线绘制在散点图的轴上:

完整示例代码

% 生成示例数据(你可以替换成自己的数据)
rng(1); % 固定随机种子,结果可复现
x = randn(1000, 1);
y = x + randn(1000, 1)*0.5;

% 1. 创建scatterhist并设置散点透明度
[ax, hscat, hbx, hby] = scatterhist(x, y, 'Marker', 'o');
set(hscat, 'MarkerFaceAlpha', 0.3, 'MarkerEdgeAlpha', 0.6);

% 2. 计算数据的核密度分布
% 生成网格点,用来绘制等高线
[X, Y] = meshgrid(linspace(min(x), max(x), 100), linspace(min(y), max(y), 100));
% 用ksdensity计算联合概率密度
[f, ~, ~] = ksdensity([x y], [X(:) Y(:)]);
% 将密度值重塑为网格形状
F = reshape(f, size(X));

% 3. 在散点图轴上绘制等高线
% 绘制5条等高线,设置线宽和颜色
contour(ax(1), X, Y, F, 5, 'LineWidth', 1.2, 'Color', 'k');
% 调整层级,让等高线显示在散点上方
set(hscat, 'ZOrder', 'back');

关键步骤解释

  • 核密度计算:用ksdensity函数计算二维数据的联合密度,这样得到的等高线能反映数据的分布集中程度。
  • 轴对象指定:必须指定在ax(1)(中间的散点图轴)上绘制等高线,不然会默认在新的轴里绘制。
  • 层级调整:通过ZOrder属性把散点设为“back”,等高线就会自动显示在散点上方啦。

内容的提问来源于stack exchange,提问作者Oliver Amundsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:22:23