转载请注明本文链接
及文章作者:slandarer
一篇飞速写完的小短文,对于知乎上的一个问题的回答哈,问题描述很简单:
如何在matlab里设置一个从透明到红色的colorbar? https://www.zhihu.com/question/631811249/answer/3307539169
我在以前的文章中讲过,MATLAB的每一个对象都是由一些基本对象组成的,这些对象平时被掩藏起来,而生成colorbar
后稍等一会就能够调取其Face
隐藏对象,并设置显示的颜色,大概是这样:
[X,Y] = meshgrid(-5:.1:5);
Z = Y.*sin(X) - X.*cos(Y);
% 绘制曲面,设置为纯红色,并设置根据Z数值调整透明度
s = surface(X,Y,Z,'EdgeColor','none','FaceColor',[1,0,0],...
'FaceAlpha','flat','AlphaData',Z);
view(3);grid on
% 获取colorbar句柄
CBarHdl=colorbar;
% 句柄隐藏子对象生成需要时间因此pause一下
pause(1e-16)
% 每一列代表一个RGBA颜色
% 前三行每一列的[255; 0; 0]代表红色
% 最后一行0和255代表透明度
colorData = uint8([255, 255, 255, 255; ...
0, 0, 0, 0; ...
0, 0, 0, 0; ...
0, 0, 255, 255]);
% 设置隐藏Face子对象颜色映射模式为真实值RGBA,并修改颜色矩阵
set(CBarHdl.Face,'ColorType','truecoloralpha','ColorData',colorData)
看过我之前文章的应该会比较熟悉,可以用这个代码类似的修改坐标区域的背景色设置,图例的背景色,原理几乎完全一样:
t=0.2:0.01:3*pi;
hold on
plot(t,cos(t)./(1+t),'LineWidth',4)
plot(t,sin(t)./(1+t),'LineWidth',4)
plot(t,cos(t+pi/2)./(1+t+pi/2),'LineWidth',4)
plot(t,cos(t+pi)./(1+t+pi),'LineWidth',4)
legend
ax=gca;pause(1e-16);% Backdrop建立需要一定时间因此pause一下很重要
% 四列分别为四个角的颜色
% 使用4xN大小颜色矩阵
% 四行分别是R,G,B,和透明度
colorData = uint8([255, 150, 200, 100; ...
255, 100, 50, 200; ...
0, 50, 100, 150; ...
102, 150, 200, 50]);
set(ax.Backdrop.Face, 'ColorBinding','interpolated','ColorData',colorData);
完
非常简短的小短文,可以布置个作业,比如改成黑色透明度渐变?: