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

Matlab绘制3D直方图:基于用户-电影评分CSV数据的实现问询

实现用户-电影评分3D直方图的MATLAB方案

你已经有了基础代码框架,但要实现「用户→y轴、电影→x轴、评分→z轴」的3D映射,核心是先把长格式的CSV评分数据转换成矩阵格式——因为bar3需要二维矩阵作为输入:行对应y轴(用户)、列对应x轴(电影),矩阵元素就是对应的评分值。下面是一步步的实现提示和完整代码:

步骤1:加载并预处理数据

你的CSV是逗号分隔的纯数值数据,先用readmatrix加载(兼容性比load更好),然后处理非连续的userID和movieID——因为真实数据里的用户/电影ID通常不是连续的,直接用ID做矩阵索引会生成稀疏矩阵,所以我们把它们转换成连续索引:

% 加载CSV数据(假设文件无表头,直接是userID,movieID,rating三列)
TrainingData = readmatrix('ratings.csv');

% 拆分三列数据
userIDs = TrainingData(:, 1);
movieIDs = TrainingData(:, 2);
ratings = TrainingData(:, 3);

% 将非连续的用户/电影ID映射为连续索引
[uniqueUsers, ~, userIdx] = unique(userIDs);
[uniqueMovies, ~, movieIdx] = unique(movieIDs);

% 创建评分矩阵:行=用户,列=电影,填充对应评分
ratingMatrix = zeros(length(uniqueUsers), length(uniqueMovies));
for i = 1:length(ratings)
    ratingMatrix(userIdx(i), movieIdx(i)) = ratings(i);
end

步骤2:绘制3D直方图并调整轴映射

现在用bar3绘制矩阵,再手动设置轴标签和真实ID刻度,确保映射关系符合你的需求:

figure
bar3(ratingMatrix)

% 设置轴标签与标题
xlabel('Movie ID')
ylabel('User ID')
zlabel('Rating')
title('User-Movie Rating Distribution')

% 把轴刻度替换为真实的用户/电影ID(避免显示连续索引)
set(gca, 'XTick', 1:length(uniqueMovies), 'XTickLabel', uniqueMovies)
set(gca, 'YTick', 1:length(uniqueUsers), 'YTickLabel', uniqueUsers)

% 可选:调整视角让图表更易读
view(45, 30)

关键细节说明

  • 为什么要转矩阵?你的原始数据是「长格式」(每一行一条评分记录),而bar3需要「宽格式」矩阵才能实现用户→y轴、电影→x轴的映射。
  • 处理非连续ID:如果直接用原始ID做矩阵索引,会出现大量空白行/列,用unique生成连续索引能避免稀疏问题,同时保留真实ID的对应关系。
  • 满足10行数据要求:你提供的示例有21条记录,运行代码后会完整展示所有用户对电影1的评分分布。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:39:53