使用 POLYFILL 在 IDL 中绘图

Plotting in IDL using POLYFILL

我的主管建议使用以下代码从一组 40 x 40 图像中提取垂直切片并将它们绘制为时间序列(24 小时),图像存储在数组 'images = FLTARR(no_images, 40,40)' 中,以及相应的时间在数组中 UT=FLTARR(no_images):

PLOT, [0],[0], /NODATA, XRANGE=[0,24], XSTYLE, YRANGE=[-40,40], /YSTYLE

FOR i=0, no_images-1 DO BEGIN
FOR j=0, 39 DO BEGIN
POLYFILL, UT(i)+[0,0,1,1]*2/60.0, (j+[0,1,1,0])*2-40, COL=[work out what colour you want the pixel to be in terms of the value in images(i,20,j) ]
ENDFOR
ENDFOR

图像以 2 分钟为间隔拍摄。

我明白这里要做什么 - 本质上是绘制小矩形来表示图像中的像素。我的问题是 COL 参数应该是什么?有人可以给我举个例子吗?在测试代​​码的那一刻,我只是输入了一个固定值(例如 255),这显然只是给出了一个相同颜色的块。如何获得对应像素值的不同颜色?

只需使用:

max_value = max(ut[*, 20, *])
color=images[i, 20, j] / float(max_value) * 255

确保您使用的是索引颜色,即您已完成:

device, decomposed=0

并使用 LOADCTTVLCT 加载您要使用的颜色 table。

如果您有 IDL 8.4+,您也可以使用新图形

no_images = 100
ut = FINDGEN(100)/100*24
img = bytscl(randomu(seed,no_images,40))
y = FINDGEN(40)
p = PLOT(ut, y, XSTYLE=1, YSTYLE=1, XRANGE=[0,24], YRANGE=[0,40], $
  /NODATA, TITLE='My Data',XTITLE='X',YTITLE='Y')
i = IMAGE(img, ut, y, /OVERPLOT, RGB_TABLE=74, ASPECT_RATIO=0.5)

您可以调整 ASPECT_RATIO 使您的图像看起来更正方形。而且很容易将 RGB_TABLE 更改为您想要的任何一个。