Matlab中在同一图绘制多组三维数据的PDF曲线求助
MATLAB三维数据各维度PDF绘制与测试数据生成
生成可复现的三维测试数据
固定随机数种子确保每次运行得到相同数据,模拟纬度、经度、时间三个维度的典型分布:
% 固定随机种子,保证结果可复现 rng(42); % 生成各维度数据:纬度(正态分布)、经度(均匀分布)、时间(泊松分布) lat_data = randn(100, 100, 50) * 5 + 30; % 均值30,标准差5的纬度数据 lon_data = rand(100, 100, 50) * 60 - 120; % 范围-120~-60的经度数据 time_data = poissrnd(10, 100, 100, 50); % 均值10的时间序列数据
提取各维度数据并计算PDF
将三维数据展平为一维数组,使用ksdensity()生成连续的概率密度函数(PDF)曲线:
% 展平各维度数据为一维数组 lat_flat = lat_data(:); lon_flat = lon_data(:); time_flat = time_data(:); % 计算每个维度的PDF及对应横坐标 [pdf_lat, x_lat] = ksdensity(lat_flat); [pdf_lon, x_lon] = ksdensity(lon_flat); [pdf_time, x_time] = ksdensity(time_flat);
在同一图中绘制所有PDF曲线
利用hold on保持绘图窗口,叠加三条曲线并添加标注:
figure; % 绘制各维度PDF曲线,用不同线型/颜色区分 plot(x_lat, pdf_lat, 'r-', 'LineWidth', 2); hold on; plot(x_lon, pdf_lon, 'b--', 'LineWidth', 2); plot(x_time, pdf_time, 'g:', 'LineWidth', 2); % 添加图例、标签与网格 legend('纬度PDF', '经度PDF', '时间PDF', 'Location', 'best'); xlabel('变量值'); ylabel('概率密度'); title('各维度数据的概率分布函数'); grid on; hold off;
关于histogram与normplot的补充说明
- 若想用直方图展示PDF,需设置归一化参数并调整透明度避免重叠:
figure; histogram(lat_flat, 'Normalization', 'pdf', 'FaceColor', 'r', 'FaceAlpha', 0.3); hold on; histogram(lon_flat, 'Normalization', 'pdf', 'FaceColor', 'b', 'FaceAlpha', 0.3); histogram(time_flat, 'Normalization', 'pdf', 'FaceColor', 'g', 'FaceAlpha', 0.3); legend('纬度PDF直方图', '经度PDF直方图', '时间PDF直方图'); xlabel('变量值'); ylabel('概率密度'); grid on; hold off;
normplot()是正态概率图,用于验证数据是否符合正态分布,并非生成PDF曲线,因此不满足你的需求。
内容的提问来源于stack exchange,提问作者jazz cat
相关产品推荐
相关产品推荐

