请选择 进入手机版 | 继续访问电脑版
爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 2581|回复: 1

[混合编程] IDL之构建新红绿色条

[复制链接]

新浪微博达人勋

发表于 2018-9-30 15:42:09 | 显示全部楼层 |阅读模式

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

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

x
用蓝-绿-黄-红色条表示值的大小是普遍用法,我之前一直用IDL的33号色条,
但我发现,最小值和最大值对应的颜色居然都偏黑,这岂不是会混淆?
所以我想最小值就用纯蓝,最大值就用纯红,
33号色条按RGB通道分解,每个通道的曲线如下,
可以截取33号色条中间一段,构建新色条
飞鸽截图20180930145245.png
;输入值arr是个一维向量,返回值是[R,G,B]三列的数组
;minv是配色下限,maxv是上限
;超过maxv的x值全配以纯红色,低于minv的值全配以纯蓝色
function red_blue_colorbar,ARR,minV,maxV
  MINV=MINV+0.0
  MAXV=MAXV+0.0
  L=(MAXV-MINV)/3.0
  N=N_ELEMENTS(arr)
  COLORS=[-99,-99,-99]
  FOR I=0,N-1 DO BEGIN
    X=ARR[I]
    if(x lt minv)then begin
      R=0
      G=0
      B=255
    endif
    if(x gt maxv)then begin
      R=255
      G=0
      B=0
    endif
    if(x gE MINV and x lt MINV+L)then begin
      R=0.0
      G=255.0/L*(X-MINV)
      B=255.0
    endIF
    if(x GE MINV+L and x LT MINV+L*2)then begin
      R=255.0/L*(X-MINV-L)
      G=255.0
      B=-255.0/L*(X-MINV-L*2)
    endIF
    if(x GE MINV+L*2 and x LE MAXV)then begin
      R=255.0
      G=-255.0/L*(X-MAXV)
      B=0.0
    endIF
    COLORS=[[COLORS],[R,G,B]]
  ENDFOR
  RETURN,COLORS[*,1:-1]
end
使用一下,效果不错!
  A=FINDGEN(100)
  FIG=PLOT(A,VERT_COLORS=red_blue_colorbar(A,0,99),thick=10)

飞鸽截图20180930154547.png

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-2-12 09:23:03 | 显示全部楼层
本来以为IDL存图后的色条应该符合色条函数,但是过滤重复值后依旧有波动值出现,例如: 254   5   0
254   5   1
254   5   0

所以想获得一个精确的色条,靠存图是不行的,截图就更不行了
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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