如何在idl中制作“彩色地图”图?

时间:2018-04-06 09:43:36

标签: idl-programming-language

我希望能够制作一个由下面显示的代码生成的图形(但使用对数轴)。我有一个包含数据的二维矩阵,我知道一个单元格与另一个单元格之间的分离位置(如果以对数标度查看,则为等间距)。我在下面报告的代码模拟了我想要获得的代码,但它使用x [0.189036 0.484322 0.779609 1.07489 1.37018 1.66547 1.96075 2.25604 2.55133] y [ -1.06208 -0.584192 -0.106299 0.371593 0.849485 1.32738 1.80527 2.28316 2.76105] ,因此我不认为它在我的情况下是可用的。

我的数据示例:

数据是Matrix 9 * 9

PRO Plot2
x = cgScaleVector(Randomn(-3L, 100000)*3., -10, 10)
y = cgScaleVector(Randomn(-5L, 100000)*10., 0, 100)

xrange = [Min(x), Max(x)]
yrange = [Min(y), Max(y)]
xbinsize = 0.25
ybinsize = 3.00
cgDisplay
density = Hist_2D(x, y, Min1=xrange[0], Max1=xrange[1], Bin1=xbinsize, Min2=yrange[0], Max2=yrange[1], Bin2=ybinsize)   

maxDensity = Ceil(Max(density)/1e2) * 1e2
scaledDensity = BytScl(density, Min=0, Max=maxDensity)

cgLoadCT, 33
TVLCT, cgColor('gray', /Triple), 0
TVLCT, r, g, b, /Get
palette = [ [r], [g], [b] ]

cgImage, scaledDensity, XRange=xrange, YRange=yrange, /Axes, Palette=palette, $
  XTitle='Concentration of X', YTitle='Concentration of Y', $
  Position=[0.125, 0.125, 0.9, 0.8]

thick = (!D.Name EQ 'PS') ? 6 : 2
cgContour, density, LEVELS=maxDensity*[0.25, 0.5, 0.75], /OnImage, $
   C_Colors=['Tan','Tan', 'Brown'], C_Annotation=['Low', 'Avg', 'High'], $
   C_Thick=thick, C_CharThick=thick


cgColorbar, Position=[0.125, 0.875, 0.9, 0.925], Title='Density', $
   Range=[0, maxDensity], NColors=254, Bottom=1, OOB_Low='gray', $
   TLocation='Top'
END ;*****************************************************************


Plot2

END

x e y是长度为10的两个向量

SpritePack

std::shared_ptr<SpritePack>

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

在您发布的代码中,Hist_2D计算密度图,然后由cgImage显示。由于您已经拥有要显示的矩阵(data),因此您只需运行: cgImage, data, /axes, /scale, /keep, xrange=[0.04,2.70], yrange=[-1.30,3.00]