matlab入门(3)---数据可视化
·
二、数据可视化
1. 基础绘图函数
(1) 折线图(plot)
- 单线图:
x = 0:0.1:2*pi; y = sin(x); plot(x, y, 'r--', 'LineWidth', 2); % 红色虚线,线宽2 title('Sine Wave'); xlabel('X'); ylabel('Y'); grid on;
(2) 散点图(scatter)
- 带颜色映射的散点图:
scatter(data.Height, data.Weight, 50, data.Age, 'filled'); colorbar; xlabel('Height'); ylabel('Weight');
(3) 柱状图(bar)
- 分组柱状图:
categories = {'A', 'B', 'C'}; values = [20, 35, 30; 25, 32, 34]; % 两行数据(两组) bar(values'); legend('Group 1', 'Group 2'); set(gca, 'XTickLabel', categories);
2. 高级可视化技巧
(1) 多子图布局(subplot)
subplot(2, 2, 1); % 2行2列,第1个子图
plot(x, sin(x));
subplot(2, 2, 2);
plot(x, cos(x));
subplot(2, 2, 3);
scatter(rand(10,1), rand(10,1));
subplot(2, 2, 4);
bar([1 2 3], [4 5 6]);
(2) 3D 绘图
- 3D 曲面图:
[X, Y] = meshgrid(-2:0.1:2); Z = X .* exp(-X.^2 - Y.^2); surf(X, Y, Z); shading interp; % 平滑着色 colormap('jet'); colorbar;
(3) 动态可视化(动画)
t = 0:0.1:10;
figure;
for i = 1:length(t)
y = sin(t(i));
plot(t(i), y, 'ro', 'MarkerSize', 10);
xlim([0 10]);
ylim([-1 1]);
drawnow; % 立即更新图形
end
3. 图形美化
(1) 设置图形属性
- 字体与标签:
title('My Plot', 'FontSize', 14, 'FontWeight', 'bold'); xlabel('Time (s)', 'FontSize', 12); ylabel('Amplitude', 'FontSize', 12); - 坐标轴调整:
set(gca, 'XTick', 0:2:10, 'YTick', -1:0.5:1); % 自定义刻度 axis([0 10 -1 1]); % 设置坐标范围 [xmin xmax ymin ymax]
(2) 导出高质量图片
- 保存为 PNG/PDF:
exportgraphics(gcf, 'plot.png', 'Resolution', 300); % 保存当前图形为300dpi的PNG
三、实战案例
案例 1:销售数据分析
- 数据读取与清洗:
salesData = readtable('sales.csv'); salesData = rmmissing(salesData); % 删除含缺失值的行 - 按月份统计销售额:
salesData.Month = month(salesData.Date); % 提取月份 monthlySales = groupsummary(salesData, 'Month', 'sum', 'Revenue'); - 绘制堆叠柱状图:
bar(monthlySales.Month, monthlySales.sum_Revenue); title('Monthly Sales Revenue'); xlabel('Month'); ylabel('Total Revenue (USD)');
案例 2:传感器信号处理
- 读取并滤波信号:
load('sensorData.mat'); % 包含信号向量 t 和 rawSignal filteredSignal = lowpass(rawSignal, 5, 100); % 截止频率5Hz,采样率100Hz - 绘制原始与滤波后信号对比:
plot(t, rawSignal, 'b', t, filteredSignal, 'r', 'LineWidth', 1.5); legend('Raw Signal', 'Filtered Signal'); xlabel('Time (s)'); ylabel('Amplitude');
四、常见问题与调试
1. 数据维度不匹配
- 错误示例:
plot(x, y1, x, y2); % 若 length(y1) ≠ length(y2),会报错 - 解决:检查并统一数据长度。
2. 图形重叠显示
- 问题:多次绘图未清除前一次图形。
- 解决:使用
clf或figure创建新窗口:figure; % 新建图形窗口 plot(x, y);
3. 性能优化
- 避免循环:优先使用向量化操作或内置函数。
% 低效 for i = 1:length(data) processedData(i) = data(i) * 2; end % 高效 processedData = data * 2;
五、学习资源推荐
- 官方文档:
- 实战练习:
- Kaggle 数据集(如 Titanic, Iris)导入并分析。
- 使用 MATLAB 内置数据集(如
load patients)练习可视化。
重点详解
在 MATLAB 中,plot 函数是用于绘制 二维线图 的核心函数,广泛应用于数据可视化。它可以绘制折线图、散点图(结合标记)、多曲线图等,并支持丰富的样式自定义。以下是 plot 函数的详细说明:
一、基本语法
plot(X, Y) % 绘制 Y 对 X 的线图
plot(X, Y, LineSpec) % 指定线条样式、颜色、标记
plot(X1, Y1, ..., Xn, Yn) % 在同一图中绘制多组数据
plot(___, Name, Value) % 通过名称-值对设置属性(如线宽、颜色)
二、核心参数说明
1. 输入数据
X:横坐标数据(向量或矩阵)。Y:纵坐标数据(向量或矩阵)。- 若
X和Y均为向量,长度需一致。 - 若
X或Y为矩阵,按列绘制多曲线(见示例)。
- 若
2. 格式化字符串 (LineSpec)
通过字符串组合指定线条样式、颜色和标记(详见前文 'r--' 的解释):
- 颜色:
r(红)、g(绿)、b(蓝)等。 - 线型:
-(实线)、--(虚线)、:(点线)。 - 标记:
o(圆圈)、+(加号)、*(星号)等。
3. 名称-值对参数
通过键值对精细控制图形属性:
'LineWidth':线条宽度(默认 0.5)。'MarkerSize':标记大小(默认 6)。'Color':颜色(RGB 三元组或颜色名称)。'MarkerFaceColor':标记填充颜色。
三、常见使用场景与示例
1. 绘制单条曲线
x = 0:0.1:2*pi;
y = sin(x);
plot(x, y, 'b-', 'LineWidth', 2); % 蓝色实线,线宽2
title('Sine Wave');
xlabel('X');
ylabel('Y');
grid on;
2. 绘制多条曲线
(1) 多组数据多次调用 plot
x = 0:0.1:2*pi;
y1 = sin(x);
y2 = cos(x);
plot(x, y1, 'r--', x, y2, 'b-.'); % 红色虚线和蓝色点划线
legend('sin(x)', 'cos(x)');
(2) 矩阵输入自动绘制多列
Y = [sin(x); cos(x)]'; % 转置为两列的矩阵
plot(x, Y); % 自动绘制两条曲线(默认不同颜色)
3. 散点图与线图结合
x = 1:10;
y = rand(1, 10);
plot(x, y, 'o-', 'MarkerSize', 8, 'MarkerFaceColor', 'r'); % 带红色填充圆圈的线图
4. 多子图绘制 (subplot)
subplot(2, 1, 1); % 2行1列,第1个子图
plot(x, sin(x), 'r');
title('Subplot 1');
subplot(2, 1, 2); % 第2个子图
plot(x, cos(x), 'b');
title('Subplot 2');
四、高级功能
1. 图形属性动态修改
通过句柄 (handle) 修改已绘图形:
h = plot(x, y, 'k:'); % 获取线条句柄
set(h, 'LineWidth', 2, 'Color', 'm'); % 修改为品红色宽虚线
2. 绘制复数数据
自动绘制实部 vs. 虚部:
z = exp(1i * x); % 复数数据
plot(z, 'g-'); % 绘制实部 vs. 虚部(单位圆)
axis equal;
3. 保存图形
saveas(gcf, 'myplot.png'); % 保存为 PNG
print('-dpdf', 'myplot.pdf'); % 保存为 PDF
exportgraphics(gcf, 'plot.jpg', 'Resolution', 300); % 高分辨率保存
五、常见问题与调试
1. 数据维度不匹配
- 错误示例:
x = 1:5; y = [1 2 3; 4 5 6]; % y 是 2×3 矩阵 plot(x, y); % 报错:维度不一致 - 解决:确保
x和y的行数或列数匹配。
2. 图形未更新
- 问题:循环中绘图未及时刷新。
- 解决:在循环内添加
drawnow强制刷新:for i = 1:100 y = rand(1); plot(i, y, 'ro'); drawnow; end
3. 线条样式未生效
- 问题:格式化字符串顺序错误。
- 正确写法:
plot(x, y, 'ro--'); % 红色圆圈标记虚线
六、总结
| 功能 | 描述 |
|---|---|
| 基础绘图 | 绘制线图、散点图,支持多曲线叠加。 |
| 样式自定义 | 通过 LineSpec 和名称-值对设置颜色、线型、标记、线宽等。 |
| 多子图支持 | 使用 subplot 在单窗口排列多个图形。 |
| 图形导出 | 支持保存为 PNG、PDF、JPEG 等格式。 |
| 动态修改 | 通过图形句柄调整已绘制的线条属性。 |
掌握 plot 函数后,可以轻松实现数据可视化,直观展示数据规律!建议结合实践项目(如绘制传感器信号、统计图表等)巩固技能。
在 MATLAB 中,ismissing 函数是用于检测数据中 缺失值 的核心工具,特别适用于表格(table)、时间表(timetable)和多维数组。以下是该函数的详细讲解,涵盖语法、应用场景、示例和注意事项。
ismissing函数
一、函数语法
TF = ismissing(A) % 检测数组 A 中的缺失值
TF = ismissing(A, indicators) % 自定义缺失值标识符
- 输入参数:
A:输入数据(支持数组、表格、时间表、字符向量、字符串、分类数组等)。indicators(可选):用户自定义的缺失值标识符(如NaN,NaT,"",'NA'等)。
- 输出参数:
TF:与A维度相同的逻辑数组,true表示对应位置是缺失值。
二、支持的缺失值类型
ismissing 函数自动识别以下标准缺失值:
| 数据类型 | 标准缺失值标识符 |
|---|---|
| 数值数组 | NaN |
| 时间数组(datetime) | NaT |
| 持续时间(duration) | NaN |
| 字符串数组 | ""(空字符串)或 <missing> |
| 分类数组 | <undefined> |
| 表格/时间表 | 自动检测各列的缺失值类型 |
三、应用场景与示例
1. 检测数值数组中的缺失值
A = [1, NaN, 3; 4, 5, NaN];
TF = ismissing(A);
% TF = [false, true, false;
% false, false, true]
2. 检测表格中的混合类型缺失值
% 创建包含不同数据类型的表格
data = table([1; NaN; 3], ["A"; ""; "C"], datetime([2023; NaN; 2023], 1, 1));
TF = ismissing(data);
% TF = [false, false, false;
% true, true, true; % 第二行全缺失
% false, false, false]
3. 自定义缺失值标识符
% 检测字符串中的 'NA' 和数值中的 -1
A = table([1; -1; 3], ["OK"; "NA"; "Good"], 'VariableNames', {'Value', 'Status'});
indicators = {-1, 'NA'}; % 分别对应每列的缺失值标识符
TF = ismissing(A, indicators);
% TF = [false, false;
% true, true; % 第二行被标记为缺失
% false, false]
四、常见操作
1. 统计每列的缺失值数量
data = readtable('data.csv');
missingCount = sum(ismissing(data));
disp('各列缺失值数量:');
disp(missingCount);
2. 删除包含缺失值的行
dataClean = data(~any(ismissing(data), 2), :); % 删除任何列有缺失的行
3. 填充缺失值
% 用列均值填充数值列
data.Value = fillmissing(data.Value, 'constant', mean(data.Value, 'omitnan'));
五、注意事项
-
数据类型一致性:
- 对于字符向量(
char)和字符串(string),ismissing的行为不同:char数组的空字符''不视为缺失值。string数组的空字符串""视为缺失值。
- 对于字符向量(
-
混合类型表格:
- 当处理包含多种数据类型的表格时,
ismissing会逐列检测对应类型的标准缺失值。
- 当处理包含多种数据类型的表格时,
-
自定义标识符的限制:
- 若输入为表格,
indicators必须是与列数相同的元胞数组,每个元胞定义对应列的缺失值标识符。
- 若输入为表格,
六、与 isnan 的区别
| 函数 | 适用数据类型 | 检测内容 |
|---|---|---|
ismissing | 支持多种类型(表格、数组) | 标准缺失值或自定义标识符 |
isnan | 仅数值数组 | 仅检测 NaN |
七、完整示例:数据清洗流程
% 读取数据
data = readtable('patient_data.csv');
% 检测缺失值
missingMatrix = ismissing(data);
% 统计每列缺失值比例
missingRatio = mean(missingMatrix) * 100;
disp('缺失值比例(%):');
disp(missingRatio);
% 删除缺失值超过50%的列
threshold = 50;
colsToKeep = missingRatio < threshold;
data = data(:, colsToKeep);
% 用中位数填充剩余缺失值
numericVars = varfun(@isnumeric, data, 'OutputFormat', 'uniform');
for i = find(numericVars)
data.(i) = fillmissing(data.(i), 'constant', median(data.(i), 'omitnan'));
end
% 保存清洗后的数据
writetable(data, 'cleaned_patient_data.csv');
总结
- 核心作用:精准定位数据中的缺失值。
- 灵活扩展:支持自定义缺失值标识符。
- 集成应用:与
fillmissing、rmmissing等函数配合,构建完整数据清洗流程。
亲爱的,我把自己放在你耳边,你会听到的吧。 —木苏里
更多推荐



所有评论(0)