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

MATLAB 使用ksdensity实现3D堆叠1D条件分布绘图的问题求解

解决方案

步骤1:预处理数据并生成统一的收益率采样网格

首先提取全量收益率的取值范围,生成统一的x轴采样点,保证所有分组的密度计算都基于相同的x坐标,从根源解决不同分组x长度不一致的问题。

% 假设你的原始矩阵为data,第一列是指标ind,第二列是收益率ret
ind = data(:,1);
ret = data(:,2);
% 生成统一的x采样网格,点数可按需调整,这里设为200个点
x_grid = linspace(min(ret), max(ret), 200); 
% 初始化存储结果的矩阵,9行对应9个指标值,200列对应x_grid的密度值
dens_mat = zeros(9, length(x_grid)); 

步骤2:分组计算核密度并对齐到统一网格

循环遍历1-9的指标值,提取对应分组的收益率数据,调用ksdensity时指定输出的采样点为刚才生成的x_grid,这样所有分组的密度结果长度完全一致。

for i = 1:9
    % 提取当前指标对应的收益率样本
    group_ret = ret(ind == i);
    % 计算核密度,直接输出到统一的x_grid上
    dens_mat(i,:) = ksdensity(group_ret, x_grid);
end

步骤3:绘制3D密度曲线

用meshgrid生成x和y的坐标矩阵,直接调用plot3逐行绘制9条密度曲线即可,也可以用mesh/surf绘制曲面效果。

figure
[X, Y] = meshgrid(x_grid, 1:9);
% 逐组绘制3D曲线
for i = 1:9
    plot3(X(i,:), Y(i,:), dens_mat(i,:), 'LineWidth', 1.5)
    hold on
end
% 坐标轴标注
xlabel('收益率')
ylabel('指标取值')
zlabel('条件密度')
grid on
view(30, 30) % 调整视角到合适位置

可选优化

如果希望得到更平滑的曲面效果,可以直接调用surf(X, Y, dens_mat, 'EdgeColor', 'none')替代逐行plot3,效果更接近堆叠的密度曲面。

内容的提问来源于stack exchange,提问作者ChrisP.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:15:07