代码说明
-
数据准备:
-
数据可以是任意形式的矩阵,例如
5x7
的矩阵。 -
行标签 (
rowLabels
) 和列标签 (colLabels
) 是可选的,如果不需要可以删除相关部分。
-
-
颜色定义:
-
使用自定义的蓝黄渐变色 (
map
)。 -
如果需要其他颜色,可以替换
map
,例如使用 MATLAB 内置的jet
、parula
等 colormap。
-
-
绘制三维柱状图:
-
使用
bar3
函数绘制 3D 柱状图。 -
每个柱子的颜色根据其高度渐变。
-
-
坐标轴调整:
-
设置了行和列的标签(如果提供了
rowLabels
和colLabels
)。 -
调整了网格线、刻度和字体样式。
-
-
输出图片:
- 图片保存为
GradientBarPlot.png
,分辨率为 300 dpi。
- 图片保存为
运行代码后,将生成一个 3D 渐变柱状图:
![](https://i-blog.csdnimg.cn/direct/34463debe86b479e90f326931c791150.png)
-
X 轴:列标签(
Col1
到Col7
)。 -
Y 轴:行标签(
Row1
到Row5
)。 -
Z 轴:矩阵中的值。
-
每个柱子的颜色根据其高度渐变。
-
代码如下:
Matlab
%% 1. 数据准备
% 假设数据是一个任意形式的矩阵
% 例如:5行 x 7列的矩阵
data = [3 5 2 6 8 4 7;
7 2 6 9 3 5 8;
4 8 3 7 2 6 9;
6 1 5 8 4 7 2;
9 4 7 3 6 2 5];
% 定义行和列的标签(可选)
rowLabels = {'Row1', 'Row2', 'Row3', 'Row4', 'Row5'}; % 行标签
colLabels = {'Col1', 'Col2', 'Col3', 'Col4', 'Col5', 'Col6', 'Col7'}; % 列标签
%% 2. 颜色定义
% 自定义渐变色(蓝黄渐变)
map = [linspace(0,1,300)' linspace(0,0.5,300)' linspace(1,0,300)'];
%% 3. 绘制三维柱状图
figureHandle = figure('Color','w'); % 创建白色背景图形窗口
b = bar3(data, 0.5); % 绘制3D柱状图,0.5控制柱子宽度
% 添加标签
hTitle = title('3D Gradient Bar Plot');
hXLabel = xlabel('Columns');
hYLabel = ylabel('Rows');
hZLabel = zlabel('Values');
%% 4. 颜色渐变设置
for k = 1:length(b)
zdata = b(k).ZData; % 获取柱子高度数据
b(k).CData = zdata; % 将高度数据映射为颜色数据
b(k).FaceColor = 'interp'; % 设置渐变填充
end
colormap(map) % 应用颜色映射
colorbar % 添加颜色标尺
%% 5. 坐标轴调整
set(gca, 'Box', 'off',... % 关闭边框
'LineWidth', 1,... % 坐标轴线宽
'GridLineStyle', '-',... % 网格线型
'XGrid', 'off', 'YGrid', 'off','ZGrid', 'on',... % 显示Z轴网格
'TickDir', 'out',... % 刻度朝外
'TickLength', [.015 .015],... % 刻度长度
'XColor', [.1 .1 .1],... % 坐标轴颜色
'YColor', [.1 .1 .1],...
'ZColor', [.1 .1 .1],...
'XTickLabel', colLabels,... % 设置列标签
'YTickLabel', rowLabels,... % 设置行标签
'FontSize', 10); % 坐标轴字号
% 调整视角
view(-45, 30) % 设置3D视图角度
%% 6. 字体设置
set([hXLabel, hYLabel, hZLabel],...
'FontSize', 12, 'FontWeight', 'bold',...
'FontName', 'Arial');
set(hTitle, 'FontSize', 14, 'FontWeight', 'bold');
%% 7. 图片输出
print(figureHandle, 'GradientBarPlot.png', '-r300', '-dpng');
disp('图片已保存为GradientBarPlot.png');