大家好,欢迎来到IT知识分享网。
1、Colorbar的作用
Colorbar(颜色条)在绘图中的作用非常重要,它主要用于以下几个方面:
- 表示数据范围: Colorbar可以显示图中的颜色映射范围,帮助理解图中不同颜色所代表的数据范围。例如,在热力图中,不同的颜色可能表示不同的温度值,颜色条可以告诉哪种颜色对应哪个温度值。
- 数据解释: Colorbar可以提供关于颜色和数据之间的映射关系的信息。可以通过查看颜色条来了解不同颜色在图中代表的数据值。
- 数据分布: 颜色条可以帮助理解数据的分布情况。例如,颜色条中的颜色分布越均匀,表示数据在整个范围内都有分布。
2、Colorbar的操作
截取cmap
import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap cmap=mpl.cm.jet_r #获取色条 # print(cmap._segmentdata) newcolors=cmap(np.linspace(0,1,256)) #分片操作 # print(newcolors) newcmap=ListedColormap(newcolors[125:]) #切片取舍 # print(newcmap) fig=plt.figure(figsize=(1.5,0.3),dpi=500) ax1=fig.add_axes([0,0,1,0.45]) ax2=fig.add_axes([0,1,1,0.45]) norm =mpl.colors.Normalize(vmin=0, vmax=10) fc1=fig.colorbar(mpl.cm.ScalarMappable(norm=norm,cmap='jet_r'), cax=ax1, orientation='horizontal', extend='both') fc2=fig.colorbar(mpl.cm.ScalarMappable(norm=norm,cmap=newcmap), cax=ax2, orientation='horizontal', extend='both') for i in [fc1,fc2]: i.ax.tick_params(labelsize=3,width=0.5,length=0.5) i.outline.set_linewidth(0.5)
拼接cmap
import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap import cmaps plt.rcParams['font.sans-serif']=['FangSong'] plt.rcParams['font.size']=18 cmap1=cmaps.spread_15lev_r cmap2=cmaps.sunshine_diff_12lev list_cmap1=cmap1(np.linspace(0,1,15)) list_cmap2=cmap2(np.linspace(0,1,12)) new_color_list=np.vstack((list_cmap1,list_cmap2)) new_cmap=ListedColormap(new_color_list,name='new_cmap ') fig=plt.figure(figsize=(6,3)) ax1=fig.add_axes([0,0,1,0.15]) ax2=fig.add_axes([0,0.3,1,0.15]) ax3=fig.add_axes([0,0.6,1,0.15]) norm =mpl.colors.Normalize(vmin=0, vmax=10) fc1=fig.colorbar(mpl.cm.ScalarMappable(norm=norm, cmap=cmap1),cax=ax1, orientation='horizontal',extend='both') fc2=fig.colorbar(mpl.cm.ScalarMappable(norm=norm, cmap=cmap2),cax=ax2, orientation='horizontal',extend='both') fc3=fig.colorbar(mpl.cm.ScalarMappable(norm=norm, cmap=new_cmap),cax=ax3, orientation='horizontal',extend='both') for i in [fc1,fc2,fc3]: # i.ax.tick_params(labelsize=20,width=0.01,length=1) i.outline.set_linewidth(0.5)
双刻度列colorbar
import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt import matplotlib.colors as mcolors plt.rcParams['font.sans-serif']=['Times New roman'] 第一步,制作雨量色条 fig=plt.figure(figsize=(1.5,0.2),dpi=500) ax=fig.add_axes([0,0,1,0.5]) colorlevel=[0.1,10.0,25.0,50.0,100.0,250.0,500.0] #雨量等级 colordict=['#A6F28F','#3DBA3D','#61BBFF','#0000FF','#FA00FA','#'] #颜色列表 cmap=mcolors.ListedColormap(colordict) #产生颜色映射 norm=mcolors.BoundaryNorm(colorlevel,cmap.N) #生成索引 fc=fig.colorbar(mpl.cm.ScalarMappable(norm=norm,cmap=cmap), cax=ax,orientation='horizontal',extend='both') fc.ax.tick_params(which='major',labelsize=3,direction='out',width=0.5,length=1) fc.outline.set_linewidth(0.3) 第二步,生成双刻度列 ax2=fc.ax #召唤出fc的ax属性并省称为ax2,这时ax2即视为一个子图 ax2.xaxis.set_ticks_position('top') #将数值刻度移动到上边 ax2.tick_params(labelsize=3,top=True,width=0.5,length=1) #修改刻度式,并使上有刻度 ax3=ax2.secondary_xaxis('bottom') ax3.tick_params(labelsize=3,width=0.5,length=1) ax3.spines['bottom'].set_bounds(0.1,500) #截去多余的部分 ax3.set_xticks([40,120,210,290,380,460]) ax3.set_xticklabels(['小雨','中雨','大雨','暴雨','大暴雨','特大暴雨'], fontname="youyuan", fontweight='bold') ax3.spines['bottom'].set_linewidth(0.3) #修改底部到框线粗细
3、快速创建colorbar
- 使用LinearSegmentedColormap可以快速创建colorbar
import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap, LinearSegmentedColormap # 这里定义了一个从白色、蓝色过渡到绿色再到红色的colormap cmap_data = [(0.0,'white'),(0.33, 'blue'), (0.66, 'green'), (1.0, 'red')] # 这里定义了一个从蓝色过渡到绿色再到红色的colormap # 创建LinearSegmentedColormap对象 new_cmap = LinearSegmentedColormap.from_list('my_colormap', cmap_data, N=256) fig=plt.figure(figsize=(1.5,0.3),dpi=500) ax1=fig.add_axes([0,0,1,0.45]) norm =mpl.colors.Normalize(vmin=0, vmax=10) i = fig.colorbar(mpl.cm.ScalarMappable(norm=norm,cmap=new_cmap),cax=ax1,orientation='horizontal') i.ax.tick_params(labelsize=5,width=0.5,length=0.5) i.set_ticks(range(11)) i.outline.set_linewidth(0.3)
引用
参考资料:https://mp.weixin..com/s/KeRRApCk3qhbRsOvD_7jng
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/123248.html