糖球图
原文链接: https://www.nv5geospatialsoftware.com/Learn/Blogs/Blog-Details/gum-drop-plot
17691 评价本文:
暂无评分
糖球图
匿名 2014年7月3日 星期四
在我们的 IDL 页面 上,有一张展示了一系列彩色球体构成的绘图图像。根据我的研究,这幅图是很久以前生成的,很可能使用了 IDL 对象图形系统。
我想使用 IDL 8 图形函数来生成一个类似的绘图。为此,我使用了 SCATTERPLOT3D 程序、ORB对象(随 IDL 发布但不提供文档说明)以及 POLYLINE 程序。一个输出示例如下所示:

用于生成此绘图的数据是随机生成的。因此,如果您运行代码,每次的输出都会有所不同。生成此绘图的代码如下所示:
pro gum_drop
compile_opt idl2
;生成一些用于
;绘图的随机数据
x = RANDOMU(seed, 10)
y = RANDOMU(seed, 10)
z = RANDOMU(seed, 10)
;绘制一个初始散点图
;符号大小为1
scat_plot = scatterplot3d(x,y,z,RGB_TABLE=2, $
SYM_OBJECT=orb(),$ ;使用orb对象作为符号
SYM_SIZE=1, $ ;设置符号大小为1
MAGNITUDE=z, $ ;用Z值改变颜色
/SYM_FILLED, clip=0,$ ;填充符号且无裁剪
xticklen=0, yticklen=0, zticklen=0, $ ;移除刻度线
xsubticklen=0, ysubticklen=0, zsubticklen=0, $ ;移除刻度线
xmajor=5, ymajor=5, $ ;每条轴仅使用5个刻度
xrange=[0,1], yrange=[0,1],$ ;强制X和Y轴范围
ASPECT_RATIO=1.0,$ ;不扭曲图像
DEPTH_CUE=[0,4], $ ;使远处的物体淡化
AXIS_STYLE=2, $ ;将坐标轴设为方框形式
background_color = 'light yellow')
;再绘制9个图,其中每个图的符号大小
;都会变化
for ind = 2L, 10 do begin
z = RANDOMU(seed, 10)
scat_plot_loop = scatterplot3d(x,y,z,$
RGB_TABLE=2, SYM_OBJECT=orb(),SYM_SIZE=ind/2, $
MAGNITUDE=z, /SYM_FILLED, clip=0, /OVERPLOT)
endfor
;生成多边形以在Z-Y和Z-X平面上
;创建网格
x = [0.25,0.25,0.5,0.5,0.75,0.75]
y = [0.999,0.999,0.999,0.999,0.999,0.999]
z = [0.00,1.00,0.0,1.0,0.00,1.00]
;使用CONNECTIVITY关键字
;将多边形数据中的每两个点用线连接起来
con = [2,0,1,2,2,3,2,4,5]
poly0 = polyline(x,y,z,/DATA,CONNECTIVITY=con)
temp = x
x=y
y=temp
poly1 = polyline(x,y,z,/DATA,CONNECTIVITY=con)
temp = z
z = y
y = temp
poly2 = polyline(x,y,z,/DATA,CONNECTIVITY=con)
temp = x
x=y
y=temp
poly3 = polyline(x,y,z,/DATA,CONNECTIVITY=con)
;从绘图前方
;移除坐标轴
ax = scat_plot.AXES
ax[2].hide=1
ax[6].hide=1
ax[7].hide=1
ax[3].ticklen=1.0
ax[1].ticklen=1.0
end