爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3811|回复: 0

[混合编程] IDL之标准饼图函数

[复制链接]

新浪微博达人勋

发表于 2019-10-16 11:10:21 | 显示全部楼层 |阅读模式

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

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

x
IDL没有内置饼图函数,我自己写了一个
以前也写了一个版本,不过逻辑比较幼稚,今天上午完善了一下


饼图.jpg



------------------------源代码------------------------


;该函数用于绘制饼图
;例如有N个扇形需要绘制,angle1和angle2是起始/终止角集合,r是扇形长度集合,color是配色集合
;angle1和2是方位角,角度制
;angle1和2顺序可颠倒,可以是负数
function pie,angle1,angle2,r,color
;大圆半径选最长者:
r1=max(r)
;扇形长度集合:
r2=r
;扇形个数:
n=n_elements(r2)
;转换为笛卡尔弧度制:
an1=(90.0-angle1)/180.0*!pi
an2=(90.0-angle2)/180.0*!pi

;生成大圆数据:
base_t=[0:360:360.0/1000]/180.0*!dpi
base_r=fltarr(1000)+r1
;画大圆:
fig1=polarplot(base_r,base_t,$
  position=[0.1,0.1,0.9,0.9],$
        /buffer,$
  thick=1,$
  yrange=[-r1,r1],$
  xrange=[-r1,r1],$
  axis_style=0,dimensions=[300,300])

;循环画扇形:
for i=0,n-1 do begin
  sector_r=r2+fltarr(1000)
  sector_an=findgen(1001)/1000.0*(an2-an1)+an1
  x=sector_r*cos(sector_an)
  y=sector_r*sin(sector_an)
  fig2=polygon([0,x,0],[0,y,0],$
    fill_color=color,color='k',$
    thick=2,/data,/overplot)
    endfor
;函数返回句柄可以修改题目等设置
return,fig1
end

------------------------使用示例------------------------


an1=[90,180,270,360]-180
an2=an1-45
r=[1,2,3,4]
color=['r','g','m','b']
fig=pie(an1,an2,r,color)
fig.title='题目'
fig.save,'C:\Users\Administrator\Desktop\饼图.jpg'
fig.close

结果如上图

密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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