本期讲有一些绘图时正负部分需要分开赋予颜色,这时候双向colormap的中心对应的可能并不是数值0,该咋办,就比如下面的情况:

事先说明,为了绘图好看,本文中全部示例都在代码最后用了以下这个简单函数进行修饰:

function defualtAxes
ax=gca;hold on;box on
% ax.XGrid='on';
% ax.YGrid='on';
ax.XMinorTick='on';
ax.YMinorTick='on';
ax.LineWidth=.8;
ax.GridLineStyle='-.';
ax.FontName='Cambria';
ax.FontSize=12;
end

工具函数

由于代码比较短,这次工具函数就放在最前面了:
可以通过:

  • setPivot(n)
  • setPivot(ax,n)

等形式使用:

function setPivot(varargin)
% @author:slandarer
if nargin==0ax=gca;pivot=0;
elseif isa(varargin{1},'matlab.graphics.axis.Axes')ax=varargin{1};if nargin>1pivot=varargin{2};elsepivot=0;endelseax=gca;pivot=varargin{1};end
end
tryCLimit=get(ax,'CLim');
catch
end
tryCLimit=get(ax,'ColorLimits');
catch
end
% CMap=get(ax,'Colormap');
CMap=colormap(ax);CLen=[pivot-CLimit(1),CLimit(2)-pivot];
if all(CLen>0)[CV,CInd]=sort(CLen);CRatio=round(CV(1)/CV(2).*300)./300;CRatioCell=split(rats(CRatio),'/');if length(CRatioCell)>1Ratio=[str2double(CRatioCell{1}),str2double(CRatioCell{2})];Ratio=Ratio(CInd);N=size(CMap,1);CList1=CMap(1:floor(N/2),:);CList2=CMap((floor(N/2)+1):end,:);if mod(N,2)~=0CList3=CList2(1,:);CList2(1,:)=[];CInd1=kron((1:size(CList1,1))',ones(Ratio(1)*2,1));CInd2=kron((1:size(CList2,1))',ones(Ratio(2)*2,1));CMap=[CList1(CInd1,:);repmat(CList3,[Ratio(1)+Ratio(2),1]);CList2(CInd2,:)];elseCInd1=kron((1:size(CList1,1))',ones(Ratio(1),1));CInd2=kron((1:size(CList2,1))',ones(Ratio(2),1));CMap=[CList1(CInd1,:);CList2(CInd2,:)];end% set(ax,'Colormap',CMap)colormap(ax,CMap);end
end
end

示例一

第一个示例就是一开始出现的示例,假如编写了如下代码:

imagesc(peaks(1000)+1)colormap([pink;flipud(bone)])
colorbar

将代码改为:

imagesc(peaks(1000)+1)colormap([pink;flipud(bone)])
colorbar % 调整颜色图中点位置
setPivot(0)

当然不只能改为0:

setPivot(7)

setPivot(-3)


示例二

随便自己弄几个比较离散的颜色:

imagesc(peaks(1000)+1)
% 随便构造一个colormap
CM=[0.1874    0.0771    0.21620.2881    0.0832    0.39620.3604    0.2090    0.60470.3734    0.3827    0.70650.4129    0.5397    0.74720.5390    0.6785    0.77120.7421    0.7976    0.82270.8856    0.8499    0.88570.8391    0.7587    0.71080.7905    0.5986    0.48660.7382    0.4192    0.34850.6433    0.2587    0.31240.4974    0.1354    0.31410.3126    0.0789    0.26690.1849    0.0794    0.2131];
colormap(CM)
colorbar

中心点调到0:

setPivot(0)

当然自己构造的colormap插一下值:

imagesc(peaks(1000)+1)
% 随便构造一个colormap
% 多行颜色插值
CM=[0.1874    0.0771    0.21620.2881    0.0832    0.39620.3604    0.2090    0.60470.3734    0.3827    0.70650.4129    0.5397    0.74720.5390    0.6785    0.77120.7421    0.7976    0.82270.8856    0.8499    0.88570.8391    0.7587    0.71080.7905    0.5986    0.48660.7382    0.4192    0.34850.6433    0.2587    0.31240.4974    0.1354    0.31410.3126    0.0789    0.26690.1849    0.0794    0.2131];
CMX=linspace(0,1,size(CM,1));
CMXX=linspace(0,1,256)';
CM=[interp1(CMX,CM(:,1),CMXX,'pchip'), ...interp1(CMX,CM(:,2),CMXX,'pchip'), ...interp1(CMX,CM(:,3),CMXX,'pchip')];
colormap(CM)
colorbar

把中点置为8:

setPivot(8)


示例三

官网的一个例子:

% Some sample data with noise:
x = 10*rand(300,1)-5;
noise = 2*randn(size(x));
y = x.^2+noise;% A theoretical perfect x^2 line:
x_theoretical = linspace(min(x),max(x),50);
y_theoretical = x_theoretical.^2;% Plot the data:
figure
plot(x_theoretical,y_theoretical,'k-')
hold on
scatter(x,y,25,noise,'filled')CM=[0.0941    0.1098    0.26270.0431    0.3725    0.74510.4588    0.6667    0.74510.9451    0.9255    0.92350.8157    0.5451    0.45100.6510    0.1353    0.14310.2353    0.0353    0.0706];
CMX=linspace(0,1,size(CM,1));
CMXX=linspace(0,1,256)';
CM=[interp1(CMX,CM(:,1),CMXX,'pchip'), ...interp1(CMX,CM(:,2),CMXX,'pchip'), ...interp1(CMX,CM(:,3),CMXX,'pchip')];
colormap(CM)
cb=colorbar;
ylabel(cb,'error relative to theory')
box off
axis tight
grid on% 调整颜色图中点位置
setPivot(0)


以上已经是完整代码及其介绍,建议配合我之前开发的两款colormap补充包使用:

https://slandarer.blog.csdn.net/article/details/127719784

https://slandarer.blog.csdn.net/article/details/127935365

MATLAB | 如何将colormap中心点置为0值处?相关推荐

  1. C语言试题二十一之定义n×n的二维数组编写函数 function(int a[][n])功能是:使数组左下半三角元素中的值全部置成0。

    1. 题目 定义了n×n的二维数组,并在主函数中自动赋值.请编写函数 function(int a[][n]),该函数的功能是:使数组左下半三角元素中的值全部置成0. 2 .温馨提示 C语言试题汇总里 ...

  2. 【PTA】5-2 下列程序读入时间数值,将其加1秒后输出,时间格式为:hh: mm: ss,即“小时:分钟:秒”,当小时等于24小时,置为0。

    5-2 下列程序读入时间数值,将其加1秒后输出,时间格式为:hh: mm: ss,即"小时:分钟:秒",当小时等于24小时,置为0. #include <stdio.h> ...

  3. M3033 内置PD2.0/QC2.0快充协议2-7串多节升降压锂电充电管理IC方案

    锂电池的应用普及催生出了众多便携式的数码产品,如户外电源.电动工具.筋膜枪.充气泵.大功率充电宝等.这类产品都内置了多节多串锂电池组成的高容量.大功率电池包,支撑这些产品市场应用都离不开升降压充电管理 ...

  4. 【MATLAB】求解约束条件下的目标函数最值(fmincon用法解析)

    [MATLAB]求解约束条件下的目标函数最值(fmincon用法解析) 一.简介 二.fmincon()的基本形式与参数 三.约束条件类型与参数写法 1.线性不等式约束(参数写法) 2.线性等式约束( ...

  5. MATLAB求解峰值、均值、平均幅值、方差、均方根、方根幅值、最值、峭度、斜度、裕度指标、波形指标、脉冲指标、峰值指标、峭度指标

    MATLAB求解峰值.均值.平均幅值.方差.均方根.方根幅值.最值.峭度.斜度.裕度指标.波形指标.脉冲指标.峰值指标.峭度指标 朋友给了份文档,要求计算标题上的这些值,原本计划用Python计算,奈 ...

  6. R语言dplyr包的mutate函数将列添加到dataframe中或者修改现有的数据列:使用na_if()函数将0值替换为NA值、负收入替换为NA值

    R语言dplyr包的mutate函数将列添加到dataframe中或者修改现有的数据列:使用na_if()函数将0值替换为NA值.负收入替换为NA值 目录

  7. Python使用numpy中trim_zeros函数去除首尾0值的语法

    Python使用numpy中trim_zeros函数去除首尾0值的语法 目录 Python使用numpy中trim_zeros函数去除首尾0值的语法 #numpy中trim_zeros

  8. leetcode+面试:给定一个数组,将所有 0 值移动到数组的末尾,同时保持所有非零元素的相对位置

    给定一个数组,将所有 0 值移动到数组的末尾,同时保持所有非零元素的相对位置 leetcode+面试:给定一个数组,将所有 0 值移动到数组的末尾,同时保持所有非零元素的相对位置 示例: 输入: [0 ...

  9. pandas dataframe缺失值(np.nan)处理:识别缺失情况、删除、0值填补、均值填补、中位数填补、加缺失标签、插值填充详解及实例

    pandas dataframe缺失值(np.nan)处理:识别缺失情况.删除.0值填补.均值填补.中位数填补.加缺失标签.插值填充详解及实例 isnull().natna().isna().fill ...

  10. mysql insert 自增_MySQL自增列插入0值的解决方案

    在将数据库从MSSQL迁移到MySQL的过程中,基于业务逻辑的要求,需要在MySQL的自增列插入0值.在MSSQL中是这样完成的: string sql;sql = " set identi ...

最新文章

  1. 【转载】HTML导入css的四种方式
  2. inspinia前端模板怎样编写消息提示框点击确定后的回调方法
  3. python安全编程基础内容
  4. js call,apply,bind三个方法的区别
  5. python multiprocessing遇到Can’t pickle instancemethod问题
  6. 阿里云负载均衡升级:同城容灾进一步提升可用性
  7. mysql order 中文版,MySQL Order By排序结果
  8. shell脚本一键安装jdk
  9. atoi函数_linux网络编程之POSIX 消息队列 和 系列函数
  10. 图像处理中的差分求导计算和相应的卷积核(filter)
  11. WPS Excel VB宏简单编程
  12. 听韩顺平聊PHP初学者如何变身大牛(一)?
  13. TCP-丢包率【传输中所丢数据包数量占发送数据包的比率=(输入报文-输出报文)/输入报文】【TCP只保证传输层消息可靠,并不保证应用层的消息可靠。想保证应用层的消息可靠性,需应用层自己实现逻辑做保障】
  14. 全球即将诞生第二家卡车自动驾驶上市公司,行业转折点已经到来
  15. 二维数组的length如何理解
  16. 长方形图片html圆形,css实现圆角矩形、半圆、圆形效果—border-radius使用详解
  17. C++ primer读书记录包括第一部分和第二部分 第二十二次更新2021.9.10
  18. Redis 编译报zmalloc.h相关的错
  19. 【STM32学习笔记】(5)—— STM32工程添加源文件和头文件
  20. 什么是模块化?为什么要模块化

热门文章

  1. python基础之字符串方法(下)
  2. 嵌入式Linux驱动开发
  3. 如何打破场景束缚,随时高效记录和整理信息?
  4. 北漂夫妇离婚买房记:救市政策出台离婚有点冤
  5. 云服务器怎么增加d盘_如何给日本云服务器加D盘?
  6. ssm毕设项目宠物托运网站8m8iz(java+VUE+Mybatis+Maven+Mysql+sprnig)
  7. LLM - 数据处理之 Process Dataset For LLM With PT、SFT、RM
  8. html圆角矩形的渐变色,纯CSS实现圆角渐变三角形
  9. 双稳态电路的两个稳定状态是什么_五十岁的夫妻,真正的生活状态是什么?两个女人说出大部分人心声...
  10. 迷你世界滑动方块机器人怎么做_迷你世界怎么做机器人 机器人教程