首先,看一下效果图。

默认条件下的柱状图

漂亮的柱状图

渐变着色的柱状图

代码如下:

[cc lang=”matlab”]
% 彩色柱状图
%% 用到的数据
n = 13;
Z = rand(n,1);
%% 默认图片
bar(Z);
%% 简单的作图
% 这个图根据数据列中值的大小着色。每列中的
% 值越大,颜色越突出
figure
h=bar(Z);
colormap(summer(n));
ch = get(h,’Children’);
fvd = get(ch,’Faces’);
fvcd = get(ch,’FaceVertexCData’);
[~, izs] = sortrows(Z,1);
for i = 1:n
row = izs(i);
fvcd(fvd(row,:)) = i;
end
set(ch,’FaceVertexCData’,fvcd)
%% 更加漂亮的图片
% 图片会以渐变的方式着色,效果非常不错
figure
h=bar(Z);
ch = get(h,’Children’);
fvd = get(ch,’Faces’);
fvcd = get(ch,’FaceVertexCData’);
[zs, izs] = sortrows(Z,1);
k = 128; % 准备生成128 *3 行的colormap
colormap(summer(k)); % 这样会产生一个128 * 3的矩阵,分别代表[R G B]的值
% 检视数据
whos ch fvd fvcd zs izs
%
% Name Size Bytes Class Attributes
%
% ch 1×1 8 double
% fvcd 66×1 528 double
% fvd 13×4 416 double
% izs 13×1 104 double
% zs 13×1 104 double
%
shading interp % Needed to graduate colors
for i = 1:n
color = floor(k*i/n); % 这里用取整函数获得color在colormap中行
row = izs(i); % Look up actual row # in data
fvcd(fvd(row,1)) = 1; % Color base vertices 1st index
fvcd(fvd(row,4)) = 1;
fvcd(fvd(row,2)) = color; % Assign top vertices color
fvcd(fvd(row,3)) = color;
end
set(ch,’FaceVertexCData’, fvcd); % Apply the vertex coloring
set(ch,’EdgeColor’,’k’)
[/cc]

作者简介

Chun-Hui Gao is a Research Associate at Huazhong Agricultural University.

重复使用

Text and figures are licensed under Creative Commons Attribution CC BY 4.0. The source code is licensed under MIT. The full source is available at https://github.com/yihui/hugo-prose.

欢迎修订

如果您发现本文里含有任何错误(包括错别字和标点符号),欢迎在本站的 GitHub 项目里提交修订意见。

引用本文

如果您使用了本文的内容,请按照以下方式引用:

gaoch (2011). 在MATLAB中创建色彩绚丽的柱状图. BIO-SPRING. /post/2011/06/25/2011-06-25-matlab-colourful-barplot/

BibTeX citation

@misc{
  title = "在MATLAB中创建色彩绚丽的柱状图",
  author = "gaoch",
  year = "2011",
  journal = "BIO-SPRING",
  note = "/post/2011/06/25/2011-06-25-matlab-colourful-barplot/"
}