爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5215|回复: 8

[求助] python 一个值对应一个颜色该如何设置?

[复制链接]
发表于 2022-12-6 23:42:38 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
python绘图求助!我现在想将colorbar设置成为一个值对应一个颜色,如图所示,我应该怎么做才能将每个数字写在每个颜色的正下方,而不同于其它colorbar写在分段的位置处?
与此同时,我还想问一个问题:一般的colorbar在分段处会有一个值,那这个值在图中对应的颜色是哪一个呢?

颜色映射.jpg
密码修改失败请联系微信:mofangbao
发表于 2022-12-7 10:27:53 | 显示全部楼层
  1. import cmaps
  2. from matplotlib.colors import ListedColormap
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. import matplotlib as mpl  
  6. rgb=(
  7.         [ 43,67,255],
  8.         [ 91,130,255],
  9.         [ 136,178,255],
  10.         [ 184,218,255],
  11.         
  12.         [ 255,255,255],
  13.         [ 255,255,255],
  14.         
  15.         [ 255,190,190],
  16.         [ 255,142,142],
  17.         [ 255,97,97],
  18.         [ 255,49,49],
  19.         )
  20. rgb=np.array(rgb)/255.0
  21. newcmap=ListedColormap(rgb)

  22. clevs = np.linspace(0,100,11)

  23. fig=plt.figure(figsize=(10,8),dpi=150)
  24. norm =mpl.colors.Normalize(vmin=0, vmax=100)
  25. ax=fig.add_axes()
  26. fc1=fig.colorbar(
  27.                  mpl.cm.ScalarMappable(norm=norm,cmap=newcmap,  ),   
  28.                  cax=ax,      
  29.                  ticks = clevs,                                               
  30.                  orientation='horizontal',                          
  31.                  )      
  32. ax2=fc1.ax
  33. ax2.xaxis.set_ticks_position('top')#将数值刻度移动到上边
  34. ax3=ax2.secondary_xaxis('bottom')#新建ax3,使ax3与ax2完全相同,但是是处于下部
  35. ax3.set_xticks([5,15,25,35,45,55,65,75,85,95])
  36. ax3.set_xticklabels([0,10,20,30,40,50,60,70,80,90],ha="center")
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-12-7 09:35:25 | 显示全部楼层
类似于这张图的左边的第六个colorbar,应该怎么设置呀?希望大家给我一些指点

                               
登录/注册后可看大图
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

发表于 2022-12-7 10:08:51 | 显示全部楼层
http://bbs.06climate.com/forum.php?mod=viewthread&tid=104491
你看看这个是不是能够bangzhuni
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

发表于 2022-12-7 10:30:01 | 显示全部楼层

这个是你想实现的,标签位置的code
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-11 12:05:15 | 显示全部楼层

谢谢!已经解决!你帮了我大忙啦~
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

发表于 2023-3-2 20:45:35 | 显示全部楼层
LIqy 发表于 2022-12-11 12:05
谢谢!已经解决!你帮了我大忙啦~

请问楼主图左第六个颜色条怎么解决的呀
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-5 15:22:24 | 显示全部楼层
希诺漾 发表于 2023-3-2 20:45
请问楼主图左第六个颜色条怎么解决的呀

你好这是代码()  
  #建立一个绘图窗口
    fig, (ax1,ax2,ax3) = plt.subplots(nrows=1,ncols=3,figsize=(15,5),dpi=300)
    #设置colorbar的最大值和最小值
    norm =mpl.colors.Normalize(vmin=5, vmax=44)
    cmap=cmaps.BlAqGrYeOrRe  #引用NCL的colormap
    newcolors=cmap(np.linspace(0,1,38))#分片操作,生成0到1的12个数据间隔的数组
    newcmap=ListedColormap(newcolors[::1])

    im1=ax1.scatter(df1['pm2.5'], df1['O3_8h'], c=df1['Tmax'],s=2,marker='o',cmap=newcmap,norm=norm)
    im1=ax1.scatter(df2['pm2.5'], df2['O3_8h'], c=df2['Tmax'],s=5,marker='^',cmap=newcmap,norm=norm)
    im1=ax1.scatter(df3['pm2.5'], df3['O3_8h'], c=df3['Tmax'],s=5,marker='*',cmap=newcmap,norm=norm)
   # im1.set_title('Whole China_'+str(year)+'年')
    im2=ax2.scatter(df1_N['pm2.5'], df1_N['O3_8h'], c=df1_N['Tmax'],s=2,marker='o',cmap=newcmap,norm=norm)
    im2=ax2.scatter(df2_N['pm2.5'], df2_N['O3_8h'], c=df2_N['Tmax'],s=5,marker='^',cmap=newcmap,norm=norm)
    im2=ax2.scatter(df3_N['pm2.5'], df3_N['O3_8h'], c=df3_N['Tmax'],s=5,marker='*',cmap=newcmap,norm=norm)
   # im2.set_title('North China_'+str(year)+'年')
    im3=ax3.scatter(df1_S['pm2.5'], df1_S['O3_8h'], c=df1_S['Tmax'],s=2,marker='o',cmap=newcmap,norm=norm)
    im3=ax3.scatter(df2_S['pm2.5'], df2_S['O3_8h'], c=df2_S['Tmax'],s=5,marker='^',cmap=newcmap,norm=norm)
    im3=ax3.scatter(df3_S['pm2.5'], df3_S['O3_8h'], c=df3_S['Tmax'],s=5,marker='*',cmap=newcmap,norm=norm)
   # im3.set_title('South China_'+str(year)+'年')   
    #前面三个子图的总宽度 为 全部宽度的 0.9;剩下的0.1用来放置colorbar
    fig.subplots_adjust(right=0.9)
    position = fig.add_axes([0.92, 0.12, 0.015, .78 ])#位置[左,下,右,上]
    cbar = fig.colorbar(im3, cax=position)#设置colorbar标签字体等
    colorbarfontdict = {"size":12,"color":"k"}
    cbar.ax.set_title('最高温度/℃',fontdict=colorbarfontdict,pad=8)
    cbar.ax.tick_params(labelsize=9,direction='in')
    ticks=[]
    for i in range(5,44):
        ticks.append(i+0.5)
    ticklabels=list(range(5,44,1))  #以上在设置color的tick和ticklabels
    cbar.set_ticks(ticks)
    cbar.set_ticklabels(ticklabels,ha="center")
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-5 15:24:28 | 显示全部楼层
LIqy 发表于 2023-3-5 15:22
你好这是代码()  
  #建立一个绘图窗口
    fig, (ax1,ax2,ax3) = plt.subplots(nrows=1,ncols=3,fig ...

中间部分可以忽略,重点部分加粗了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表