爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5246|回复: 4

[已解决] IDL渐变散点图

[复制链接]

新浪微博达人勋

发表于 2016-3-24 16:12:19 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 秋之期 于 2016-3-25 17:31 编辑

查到说8.2.2以后版本的IDL中有引入scatterplot函数,可以完成有颜色变化的散点图,例图如下,但是看help没有特别明白,按照我理解的去做了,程序一直报错,所以想问问有没有人用过这个函数,或者有简便的方法能够实现渐变散点图的。
我的程序段:
set_plot,'ps'
device,xoffset=.2,yoffset=10.8,xsize=11.,ysize=8.,/inches,/landscape,$
    filename=figname,/times,/bold,/color
  levels=[-9999,0,50,100,150,200,250,300,500,700,900,1000]
  contour,ele_CN,lon_CN,lat_CN,pos=pos1,levels=levels,c_colors=colors,/fill,xrange=[112,122],yrange=[28,36],$
    title='Ave Annual Occurrence of Short Heavy Rain',xtickname=['112','114','116','118','120','122E'],$
    ytickname=['28','30','32','34','36N'],xminor=4,yminor=4,xcharsize=1.1,ycharsize=1.1
  s=scatterplot(lon,lat,SYMBOL='o',/sym_filled,rgb_table=32,MAGNITUDE=ave_n_15mm)
  china_map
  plot_map  
device,/close_file
  close,/all
报错:
% Internal error: Unable to set pixel format.
% IDLITWINDOW::ONEXPOSE: Unable to acquire device context.
% Unable to acquire device context.
数据说明:
lon,lat分别是469个站点的经纬度,float;ave_n_15mm是469个站点的降水量,也是float

QQ图片20160324161032.png
QQ图片20160324161101.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-3-25 17:24:21 | 显示全部楼层
好吧,我倒腾几天以后,用循环的方法解决了,不算复杂,也许scatterplot这个函数的本质也是这样的,贴上我自己写的程序段,希望大家别走我的老路了,另外还是很期待有人能够解答一下scatterplot这个函数,大家也可以学习下嘛。
我的程序段:
  minlev=0. & maxlev=20. ;colorbar分级起始值
  levsize=2.
  nlev=10 ;colorbar分级数量
  levels=minlev+FindGen(nlev)*levsize
  clev=[11,13,15,17,19,20,21,22,23,25]
  ;title='Ave Annual Occurrence of Short Heavy Rain',
  ;-------------- 15mm ----------------------------------------
  loadct,0
  contour,ele_CN,lon_CN,lat_CN,pos=pos1,levels=tlevels,c_colors=tcolors,/fill,xrange=[112,122],yrange=[28,36],$
    title='15mm Short Heavy Rain',xtickname=['112','114','116','118','120','122E'],$
    ytickname=['28','30','32','34','36N'],xminor=4,yminor=4,xcharsize=1.4,ycharsize=1.4

  CS, SCALE=26
  for ilev=0,nlev-1 do begin
    ind15=where(ave_n_15mm ge minlev+ilev*levsize and ave_n_15mm lt minlev+(ilev+1)*levsize,n15)
    if(n15 gt 0)then oplot,lon[ind15],lat[ind15],psym=8,color=clev[ilev],symsize=1.5,thick=1.4
  endfor
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-3-25 17:28:46 | 显示全部楼层
补充下成果图,没细调,凑合看吧
20160325172855.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-4-8 10:41:39 | 显示全部楼层
楼主 请教一下色标棒是怎么画的啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-12-31 17:09:44 | 显示全部楼层
本帖最后由 秋之期 于 2017-12-31 17:11 编辑
木木喵 发表于 2017-4-8 10:41
楼主 请教一下色标棒是怎么画的啊
如果你问的是除了使用函数以外的方法的话……其实是笨方法,完全一点点画出来的。
    ;------------ color bar ----------
    CS, COLS=[224, 231, 331, 419,423], NCOLS=15
    ;CS, SCALE=38
    nlev=n_elements(levels)-1
    nybar = 2 & nxbar = nlev+1
    arr = FltArr(nxbar,nybar)
    yarrb = [0.,1.]
    xarrb = FindGen(nxbar)

    FOR ix = 0, nlev-1 DO BEGIN
      arr[ix,*] = levels[ix]
    ENDFOR
    dlev = levels[1] - levels[0]
    arr[ix,*] = levels[nlev-1]+dlev

    xtickn = StrArr(nxbar)
    xtickn=' '
    FOR i=0,nlev-1,2 DO BEGIN
      xtickn = STRING(levels,format='(f4.1)')
    ENDFOR
    xtickn[nlev] = ' '
    ;  xtickn[0]=' '
    blnk= StrArr(nxbar) & blnk
= '  '
    contour,arr,xarrb,yarrb,pos=pos7,yrange=[0.,1.],$
      xrange=[min(xarrb),max(xarrb)],LEVEL=levels,/FILL, $
      yticks=1,xticks=nxbar-1,xminor=0,yminor=0,$
      xtitle='',ytitle='',ytickname=[' ',' '],$
      yticklen=0.001,xticklen=0.001,charsize=1.4,$
      xtickname=blnk,C_COLORS=clev,XSTYLE=9,/NOERASE
    AXIS,XAXIS=0,xrange=[min(xarrb),max(xarrb)], $
      xticks=nxbar-1,xminor=0, xtitle='',$
      xticklen=0.001,charsize=1.7,$
      xtickname=xtickn,XSTYLE=1,color=1
    AXIS,XAXIS=1,xrange=[min(xarrb),max(xarrb)], $
      xticks=nxbar-1,xminor=0, xtitle='',$
      xticklen=0.001,charsize=1.,$
      xtickname=blnk,XSTYLE=1,color=1
    AXIS,YAXIS=1,yticks=1,yminor=0, ytitle='',yticklen=0.001,charsize=1.,$
      ytickname=[' ',' '],YSTYLE=1,color=1
    AXIS,YAXIS=0,yticks=1,yminor=0, ytitle='',yticklen=0.001,charsize=1.,$
      ytickname=[' ',' '],YSTYLE=1,color=1
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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