在MATLAB中控制颜色条比例尺

时间:2019-02-13 16:59:29

标签: matlab plot matlab-figure scatter-plot colorbar

问题:如何在自定义MATLAB颜色栏中指定颜色过渡?
具体来说,我想使黄色(见下文)覆盖颜色栏的更多区域(可能[19.5–21.5]或接近该区域)。

使用this answer,我能够在MATLAB中创建自定义颜色条。我试图了解this answer,因为它可能是相关的。

我尝试了this answer的方法,并回顾了this answerthis one,但无法实现我的目标。

Example plot w/ current colorbar and illustration of desired colorbar

下面的完整代表示例(MATLAB R2017a)

% Data
X = [22.6 22.8 22.6 20.45 22.3 18.15 19.95 20.8]';
Y = [84 89 63 81 68 83 77 52]';
Z = [23.0 22.695 21.1450 21.5 22.09 20.5 22.075 20.915]';

% Create custom colormap  
% Reference: https://stackoverflow.com/questions/24488378/how-to-map-a-specific-value-into-rgb-color-code-in-matlab/24488819#24488819
col3 = [0 1 0]; %G
col2 = [1 1 0]; %Y
col1 = [1 0 0]; %R
n1 = 20; n2 = 20;
cmap=[linspace(col1(1),col2(1),n1);linspace(col1(2),col2(2),n1);linspace(col1(3),col2(3),n1)];
cmap(:,end+1:end+n2)=[linspace(col2(1),col3(1),n2);linspace(col2(2),col3(2),n2);linspace(col2(3),col3(3),n2)];
cmap = cmap';

% Plot
colormap(cmap), hold on, box on
p = scatter(X,Y,[],Z,'filled','DisplayName','Data3');
cb = colorbar;
cb.Limits = [18 23];
cb.Ticks = [18:1:23];

% Cosmetics
p.MarkerEdgeColor = 'k';
xlabel('X')
ylabel('Y')
cb.Label.String = 'Z';

1 个答案:

答案 0 :(得分:2)

我想您所缺少的只是调用caxis,以指定将颜色范围映射到的最小和最大值:

HttpClient client = new HttpClient(new HttpClientHandler 
{ 
  Credentials = CredentialCache.DefaultCredentials 
});

var response = await client.PostAsync(url, content);
var res = response.Content.ReadAsStringAsync();

enter image description here

请注意以下一行...

caxis([18 23]);

...仅更改颜色栏上的tick limits 显示,但不更改数据如何映射到颜色范围的任何内容。 cb.Limits = [18 23]; 函数是控制该函数的方式(在上述情况下,将18的值映射到一端,将23的值映射到另一端)。默认情况下,您的代码将caxis中的最小值和最大值映射到颜色范围(分别为20.5和23)。然后,当您将颜色条上的刻度限制设置为更大的范围时,它只会用颜色图中的最后一种颜色(在本例中为红色)填充它。这就是为什么您看到这么多东西的原因。

奖金

仅仅是因为您可能感兴趣,您还可以通过interp1函数使用插值来轻松生成颜色图,如下所示:

Z
相关问题