我希望能够制作一个由下面显示的代码生成的图形(但使用对数轴)。我有一个包含数据的二维矩阵,我知道一个单元格与另一个单元格之间的分离位置(如果以对数标度查看,则为等间距)。我在下面报告的代码模拟了我想要获得的代码,但它使用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>
感谢您的帮助!
答案 0 :(得分:0)
在您发布的代码中,Hist_2D
计算密度图,然后由cgImage
显示。由于您已经拥有要显示的矩阵(data
),因此您只需运行:
cgImage, data, /axes, /scale, /keep, xrange=[0.04,2.70], yrange=[-1.30,3.00]