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

如何用Python/Matlab绘制以点大小表示第四维的4D散点图?

实现3轴+点大小表示第四维的4D可视化

Python 实现(Matplotlib)

利用matplotlib的3D散点图功能,通过scatter的s参数控制点的大小,直接映射面积数值。

示例代码

import matplotlib.pyplot as plt
import numpy as np

# 构造示例数据
years = np.array([2020, 2020, 2020, 2021, 2021, 2021, 2022, 2022, 2022])
regions = np.array([0, 1, 2, 0, 1, 2, 0, 1, 2])  # 数字编码区域,后续可替换为标签
land_types = np.array([0, 0, 1, 1, 2, 2, 0, 1, 2])  # 数字编码土地覆盖类型
areas = np.array([120, 80, 200, 150, 90, 180, 130, 100, 220])  # 面积数值

# 缩放面积值到合适的点大小范围(避免点过大/过小)
scaled_sizes = areas * 5  # 可根据实际数据调整缩放系数

# 创建3D绘图对象
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(projection='3d')

# 绘制散点图,s参数对应面积
ax.scatter(years, regions, land_types, s=scaled_sizes, alpha=0.7)

# 设置坐标轴标签
ax.set_xlabel('年份')
ax.set_ylabel('区域')
ax.set_zlabel('土地覆盖类型')

# 替换坐标轴刻度为实际标签
ax.set_yticks([0, 1, 2])
ax.set_yticklabels(['区域A', '区域B', '区域C'])
ax.set_zticks([0, 1, 2])
ax.set_zticklabels(['耕地', '林地', '草地'])

# 手动创建图例说明点大小与面积的对应关系
from matplotlib.lines import Line2D
legend_elements = [
    Line2D([0], [0], marker='o', color='C0', linestyle='', markersize=10, label='面积 100'),
    Line2D([0], [0], marker='o', color='C0', linestyle='', markersize=15, label='面积 150'),
    Line2D([0], [0], marker='o', color='C0', linestyle='', markersize=20, label='面积 200')
]
ax.legend(handles=legend_elements, loc='upper left')

plt.show()

关键说明

  • 用数字对区域和土地覆盖类型编码,后续可通过set_yticklabels/set_zticklabels替换为实际业务名称
  • scaled_sizes是对面积值的缩放,需根据你的实际数据范围调整,确保不同面积的点大小差异清晰可辨
  • 手动构建图例避免默认颜色图例的干扰,明确点大小对应的面积区间

Matlab 实现

使用Matlab的scatter3函数,通过MarkerSize参数控制点大小,直接映射面积数值。

示例代码

% 构造示例数据
years = [2020, 2020, 2020, 2021, 2021, 2021, 2022, 2022, 2022];
regions = [1, 2, 3, 1, 2, 3, 1, 2, 3]; % 数字编码区域
land_types = [1, 2, 3, 2, 3, 1, 1, 3, 2]; % 数字编码土地覆盖类型
areas = [120, 80, 200, 150, 90, 180, 130, 100, 220]; % 面积数值

% 缩放面积到合适的MarkerSize范围
scaled_sizes = areas * 0.3; % 调整系数适配Matlab的MarkerSize单位

% 创建3D绘图
figure('Position', [100, 100, 800, 600])
scatter3(years, regions, land_types, scaled_sizes, 'filled', 'Alpha', 0.7);

% 设置坐标轴标签
xlabel('年份');
ylabel('区域');
zlabel('土地覆盖类型');

% 替换刻度为实际标签
set(gca, 'YTick', [1,2,3], 'YTickLabel', {'区域A', '区域B', '区域C'});
set(gca, 'ZTick', [1,2,3], 'ZTickLabel', {'耕地', '林地', '草地'});

% 添加图例说明点大小与面积的对应
legend_handles = [
    scatter(NaN, NaN, 100*0.3, 'filled', 'DisplayName', '面积 100');
    scatter(NaN, NaN, 150*0.3, 'filled', 'DisplayName', '面积 150');
    scatter(NaN, NaN, 200*0.3, 'filled', 'DisplayName', '面积 200')
];
legend(legend_handles, 'Location', 'upperleft');

grid on;
view(3);

关键说明

  • Matlab的MarkerSize单位与Python不同,需调整缩放系数让点大小显示合理
  • 同样通过替换刻度标签将数字编码转为实际业务名称
  • 用空的scatter对象构建图例,明确点大小对应的面积区间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:21:30