MATLAB | 如何按照任意比例调整颜色条(colorbar)

article/2025/10/4 15:29:51

之前写过的setPivot函数只能把颜色条的中点放到0处或者其他数值处:
https://slandarer.blog.csdn.net/article/details/129341645

这次提供的函数可以将任意百分比的点位放置在任意数值处,这个函数大概长这样:

百分比点位设置

function setCMapRatio(varargin)
% @author:slandarer
if nargin==2ax=gca;oriRatio=sort(varargin{1});breakPnt=sort(varargin{2});
elseif nargin==3ax=varargin{1};oriRatio=sort(varargin{2});breakPnt=sort(varargin{3});
end
% 原始数据处理
CLimit=get(ax,'CLim');
breakPnt=[CLimit(1),breakPnt,CLimit(2)];
newRatio=diff(breakPnt);
oriCMap=colormap(ax);
CLen=size(oriCMap,1);
newRatio=newRatio./diff([0,oriRatio,1]);
newRatio=round(newRatio./max(newRatio).*400);
oriRatio=[oriRatio,1];
% 最开始部分颜色条构造
tempCMap=oriCMap(1:ceil(oriRatio(1).*CLen),:);
CInd2=kron((1:size(tempCMap,1)-1)',ones(newRatio(1),1));
newCMap=tempCMap(CInd2,:);
CInd3=oriRatio(1).*CLen-size(tempCMap,1)+1;
CInd3=round(CInd3.*newRatio(1));
newCMap=[newCMap;repmat(tempCMap(end,:),[CInd3,1])];
% 循环添加新的颜色
for i=2:length(oriRatio)CInd1=round(newRatio(i).*(ceil(oriRatio(i-1).*CLen)-oriRatio(i-1).*CLen));if abs(ceil(oriRatio(i).*CLen)-oriRatio(i).*CLen)>0CInd2=ceil(oriRatio(i-1).*CLen)+1:ceil(oriRatio(i).*CLen)-1;elseCInd2=ceil(oriRatio(i-1).*CLen)+1:ceil(oriRatio(i).*CLen);endCInd2=kron(CInd2',ones(newRatio(i),1));CInd3=round(newRatio(i).*(oriRatio(i).*CLen-floor(oriRatio(i).*CLen)));if ceil(oriRatio(i).*CLen)==ceil(oriRatio(i-1).*CLen)CInd1=[];CInd3=round(newRatio(i).*(oriRatio(i).*CLen-oriRatio(i-1).*CLen));endnewCMap=[newCMap;repmat(oriCMap(ceil(oriRatio(i-1).*CLen),:),[CInd1,1]);oriCMap(CInd2,:);repmat(oriCMap(ceil(oriRatio(i).*CLen),:),[CInd3,1])];
end
colormap(ax,newCMap);
end

咋使用呢,假设编写了如下代码:

contourf(rand(10,10))
colormap([pink(11);flipud(bone(11))])
cb=colorbar;

画出图来长这样:

这里总共有22种颜色,假如我想让36%的颜色,即第8第9种颜色的分界线放到0.2处,第10第11种颜色分界处放到0.5处,第20第21种颜色分界线放到0.8处,可以编写如下代码:

contourf(rand(10,10))
colormap([pink(11);flipud(bone(11))])
cb=colorbar;setCMapRatio([8/22,10/22,20/22],[.2,.5,.8])

当然不一定非得8/22这种格式,随便0-1内的数值均可,比如8.12/22,0.123啥的。


非等距标签添加

若是想在colorbar每个颜色交界处加入刻度,但是修改比例后颜色不等距不太容易用linspace获取颜色交界处咋办?写了个简单的函数:

function cbTick=getCBTick(ax)
% @author:slandarer
if nargin<1,ax=gca;end
CMap=colormap(ax);
[~,Cind,~]=unique(CMap,'rows');
Cind=sort(Cind);
Cind=Cind(2:end)-1;
CLimit=get(ax,'CLim');
N=size(CMap,1);
Cind=Cind./N;
cbTick=[CLimit(1);CLimit(1)+(CLimit(2)-CLimit(1)).*Cind;CLimit(2)];
end

还是之前的例子用一下:

contourf(rand(10,10))
colormap([pink(11);flipud(bone(11))])
cb=colorbar;setCMapRatio([8/22,10/22,20/22],[.2,.5,.8])% 添加非等距离标签
cb.YTick=getCBTick(gca);
% 调节colorbar刻度长度(这句代码可删掉)
cb.TickLength=.061;


其他实例

再给个例子叭:

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)
cb=colorbar;setCMapRatio([7/15,8/15],[-2,6])cb.YTick=getCBTick(gca);
cb.TickLength=.061;


该项目所在gitee仓库:

https://gitee.com/slandarer/slanColor


http://chatgpt.dhexx.cn/article/qFD3BxKt.shtml

相关文章

matplotlib中【colormap】和【colorbar】的使用,以及用自己的颜色创建colormap

目录 官方自带的colormap其他的colormap结果单独绘制一个colorbar 用自己的颜色创建colormap获取图片颜色给定一个基本颜色&#xff0c;通过改变饱和度来创建colorbar 官方自带的colormap import numpy as np import matplotlib.pyplot as pltnum_curves 100 #100条曲线 cm …

解决python画图中colorbar设置刻度和标签字体大小

介绍 python很火&#xff0c;因为有各种库的支持&#xff0c;所以功能格外强大。在可视化方面&#xff0c;目前用得较多的是matplotlib. 在基于matplotlib.pyplot画带色标(colorbar)的图时候&#xff0c;往往为了美观和科研用途&#xff0c;需要对colorbar的Ticks(刻度) &#…

在绘图axes旁边添加额外的colorbar的ax的方法(add_colorbar_axes)

目的是在主axes中绘制图形时&#xff0c;需要在旁边新建colorbar&#xff0c;因为直接使用 fig.colorbar() 会直接占用主图的一部分区域&#xff0c;所以需要def几个解决这一问题的函数。 import matplotlib.pyplot as plt import matplotlib as mpl from psutil import cpu_c…

matlab colorbar的使用

http://hi.baidu.com/imheaventian/blog/item/82183058da63633a2834f0f7.html 1&#xff1a;请问matlab中画多张图如何使用同一范围的colorbar? 例如生成了图1,2,3 生成图1时&#xff0c;使用 temp1caxis; 将图1的z值的取值范围&#xff08;即colorbar的取值范围&#xf…

python matplotlib自定义colorbar颜色条-以及matplotlib中的内置色条

文章目录 自定义colorbar&#xff08;draw colorbar without any mapple/plot&#xff09;contourf函数为所有子图添加一个色带推荐色带与自定义色带 PS: 传送门——自定义Colorbars教程 自定义colorbar&#xff08;draw colorbar without any mapple/plot&#xff09; 参考&…

Matlab自制Colorbar(一)

目录 前言 一、寻找一张好看的配色图 二、保存待制作的Colorbar 三、利用代码读取并制作ColorMap 四、读入ColorMap画图 前言 在我们的日常科研生活中&#xff0c;能够用一张让人眼前一亮的图给同行展示自己的成果是非常重要的。而且&#xff0c;往往越高端的期刊对作图的要求也…

python colorbar设置label标签位置

colorbar简单设置方法 关于python中使用colorbar的方法已经有比较好的博文介绍&#xff0c;简单列举个人感觉比较好两个 colorbar方向 https://blog.csdn.net/weixin_43257735/article/details/121831188 colorbar颜色 https://blog.csdn.net/liuchengzimozigreat/article/det…

python 如何实现colorbar的标签位于每个色标中间(正下方)

前言 python实现colorbar标签的多样化显示 大部分文献中colorbar的色标都是如下图所示&#xff1a; 以80~100表示这个范围内数据为最显著的红色&#xff0c;其他范围内的各个色域类似 那么&#xff0c;如果我希望将最右边最红的区域定义为一个字幕&#xff0c;并使这个字母出…

MATLAB 矩阵数据可视化imagesc 以及 如何多图共用一个 colorbar

当遇到需要查看一个二维矩阵数据中值的大小分布情况时可以使用 MATLAB 把矩阵以图像的形式展现出来&#xff0c;这样更直观。MATLAB 的可视化函数之一是 imagesc( )&#xff0c;还有其他的方法&#xff0c;这里只介绍下 imagesc。 目录 1、单一作图 2、同时绘制多图并共用 c…

python 调节colorbar的大小,以及对colorbar的细节调节

参考链接1 这个很nice&#xff0c;对colorbar的调节很到位 添加colorbar的标题

matplotlib 配色之 colorbar 模块详解

matplotlib.colorbar 模块详解 引子 上一篇我们围绕colormap颜色映射&#xff0c;详细介绍了matplotlib.colors 和 matplotlib.cm模块。 使用matplotlib.colors模块可以完成大多数常见的任务。似乎很少需要直接使用matplotlib.cm模块。我们继续使用上一篇最后的例子来看看 m…

如何在matlab中设置colorbar

colorbar是matlab插值填色图的标尺&#xff0c;设置上下限和设置颜色是作图中基础的能力。 例如这张uha图&#xff0c;首先使用函数caxis([-1.2,2.2])编辑colorbar上下限&#xff0c;打开后右键颜色编辑器选择心怡的颜色。然后用下面的代码存储这种配色方式方便下次使用&#x…

matplotlib画图使用python可视化colorbar工具自定义颜色

python matplotlib画图使用colorbar工具自定义颜色 colorbar&#xff08;draw colorbar without any mapple/plot&#xff09; 自定义colorbar可以画出任何自己想要的colorbar&#xff0c;自由自在、不受约束&#xff0c;不依赖于任何已有的图(plot/mappable)。这里使用的是mp…

matplotlib 合理设置colorbar和子图的对应关系

matplotlib 合理设置colorbar和子图的对应关系 文章目录 matplotlib 合理设置colorbar和子图的对应关系1. 介绍2 plt.contourf ()2.1 错误示范2.2 使用 norm实现颜色和数值之间的对应关系2.3 只显示最后一个的colorbar2.4 使用 levels 参数设置 3. 使用plt.imshow()4 单独设置c…

matlab关于colorbar的整理(绘制不等间距colorbar, colorbar的大小位置调节, colorbar加单位等)

matlab关于colorbar的整理(绘制不等间距colorbar, colorbar的大小位置调节等 1. 绘制不等间距colorbar2. colorbar的大小位置调节3. 更改colorbar上的刻度、给colorbar加单位 对matlab关于colorbar的一些小细节进行整理&#xff0c;希望对一些人能够有所帮助~ 1. 绘制不等间距c…

matlab中的colorbar用法(显示色阶的颜色栏)

原文 matlab画平面分布图时colorbar的设置是非常重要的&#xff0c;好的colorbar不仅使图像更美观&#xff0c;而且能够使人更容易捕捉图上传递的信息。用过matlab的同学都知道matlab默认的colormap是jet, 也就是你画完图后输入“colorbar” 它所显示出来的颜色。此外&#xff…

Matlab的图像操作——colorbar的各项细节操作

最近在论文中用matlab生成高度场,网上搜了很多,自己做一个小小的总结。 首先,如果想在生成的图片中加上colorbar,有两种方式: 1:在生成的Figure图像的菜单栏: Insert—Colorbar, 或者单击上方快捷区添加colorbar,见下图: 2:命令行直接写上 colorbar; 如果想随意指定…

Matplotlib 系列:colorbar 的设置

转载于&#xff1a;Matplotlib 系列&#xff1a;colorbar 的设置 该文为我很及时的解决了我的烦恼&#xff0c;再次向作者致意~ 作者一直在持续更新python系列&#xff0c;请支持原作者&#xff0c;文章来源&#xff1a;炸鸡人博客 0. 前言 承接 Matplotlib 系列&#xff1a…

Chrome谷歌浏览器,清除css或js文件缓存的方法

在写网站首页界面的时候&#xff0c;css文件中给新建的<div>增加了class类的样式&#xff0c;但是无论怎样刷新都没有这个样式的效果。 F12打开开发模式&#xff0c;对比这个<div>与其他的区别&#xff0c;发现右下角的尺寸图中没有position的值&#xff0c;而pos…

浏览器-清理页面中js的缓存

【问题分析】 修改完 js文件中的代码后&#xff0c;页面刷新好几次并没有重新加载 js的文件&#xff0c;开始以为是文件设置没有修改成功&#xff0c;后来想到应该是浏览器对于 js文件的缓存机制引起的。 【解决方案】 清理浏览器的缓存 1.按“F12” 或者 右键单击页面“检查”…