前些天有小伙伴在公众号里回复问如何绘制出五颜六色的柱状图,今天小编就来与大家说道说道。
柱状图绘制本身并不复杂,一个bar函数就可以轻松搞定,相信不少小伙伴都用过它。上一道开胃菜让大家尝尝先。
1. 纯色条形图
% 生成绘图所需要的数据
N=25
x = linspace(0,10,N)';
y = gaussmf(x,[1.8,5]);
% 生成不同的颜色
needcolor=rand(N,3);
figure(1)
bar(x,y,'b')
怎么样?So easy吧!万里长征第一步,既然想要色彩斑斓,首先就得要准备好颜色。只可惜matlab内置仅支持以下几种。
'b' | Blue |
---|---|
'r' | Red |
'g' | Green |
'c' | Cyan |
'm' | Magenta |
'y' | Yellow |
'k' | Black |
'w' | White |
如果想要画出五彩缤纷的柱状图,应该怎么做呢?其实也不难,只要熟悉bar(PS:如有不知,请在命令窗口输入doc bar,然后按回车键)的相关属性就不难解决。
小伙伴们,坐稳啰,K2019次列车发车了...
2. 随机颜色的柱状图
方法1:利用facecolor属性和for循环
figure(2)
for i=1:N
bar(x(i),y(i),8/N,'facecolor',needcolor(i,:),'EdgeColor','none')
hold on
end
set(gca,'xTick',0:10)
方法2:使用cellfun和facecolor属性
f=@(x,y,needcolor) bar(x,y,8/N,'facecolor',needcolor,'EdgeColor','none');
figure(3)
hold on; box on
cellfun(f,num2cell(x),num2cell(y),mat2cell(needcolor,ones(N,1),3))
该方法其实跟方法1是一样的,只不过是利用了函数句柄和cellfun,把代码改成了矢量化的形式,避免了for循环。
方法3:利用CData属性
figure(4)
% 画图及属性设置
bar(x,y,'CData',needcolor,'FaceColor','flat','LineStyle','none');
注意:这里利用的是bar图的Cdata属性,可能会有低版本的MATLAB中的bar函数没有这个属性。
3. 不一样的烟火——渐变色柱状图绘制
生成渐变色
color_init=[1,0,0; 1,0.5,0; 1,1,0; 0 1 0; 0 0 1;0,1,1;1,0,1];
color_init=flipud(color_init);
[c_x,c_y]=meshgrid(1:3,1:size(color_init,1));
[c_x1,c_y1]=meshgrid(1:3,linspace(1,size(color_init,1),N));
color_interp=interp2(c_x,c_y,color_init,c_x1,c_y1);
figure(5)
% 画图及属性设置
b=bar(x,y,'FaceColor','flat','LineStyle','none');
set(b,'CData',color_interp)
以上就是今天的全部内容,初来乍到,还望各位小伙伴多多关照!如有对今日推文有疑问?,欢迎在推文下方或公众号中留言,小生定当竭诚为大家解答?
参考资料:
https://www.mathworks.com/help/matlab/ref/bar.html