如何为多个ILContourPlot设置通用数据范围?

时间:2014-06-10 10:52:48

标签: ilnumerics

我有一个ILPlotCube,它有三个不同的ILContourPlot。

this.scene = new ILScene();
ILPlotCube pc = new ILPlotCube(twoDMode: false);

ILArray<float> TA = tempRoom.GetILArray("TA");
ILContourPlot cpa = new ILContourPlot(TA, create3D: false) {new ILColorbar(), new ILLegend()};
ILArray<float> TB = tempRoom.GetILArray("TB");
ILContourPlot cpb = new ILContourPlot(TB, create3D: false) {new ILColorbar(), new ILLegend()};
ILArray<float> TC = tempRoom.GetILArray("TC");
ILContourPlot cpc = new ILContourPlot(TC, create3D: false) {new ILColorbar(), new ILLegend()};

pc.Add(cpa);
pc.Add(cpb);
pc.Add(cpc);
scene.Add(pc);
ilPanel1.Scene = this.scene;
ilPanel1.Refresh(); 

当我将ILLegend和ILColorbar添加到这些ILContourPlots时,我得到三个,并且所有三个都有不同的数据范围(例如,plot1:red = 50,plot2:red = 100,plot3:red = 150)。

如何设置这些ILContourPlots以使用相同的数据范围(例如,Min = 0,Max = 200)?

基本上我想要和这个问题一样,但ILContourPlots没有UpdateColormapped-method和dataRange-property: Same color bar for multiple surfaces in ILNumerics PlotCube

编辑:我可以为每个ILArray添加所需数据范围的虚拟最小值和最大值,但这是一种难看的修复,它也会弄乱轮廓。

1 个答案:

答案 0 :(得分:0)

你应该使用ILCountourPlot的重载,它采用轮廓级别规范的集合并明确定义每个级别:

ILArray<float> A = ILMath.tosingle(ILSpecialData.terrain);
panel.Scene.Camera.Add(new ILPlotCube("SO", twoDMode: false) {
    Children = {
        new ILGroup(translate: new Vector3(0,0,10)){
            new ILContourPlot(A["0:250;0:250"], new List<ContourLevel>() {
                new ContourLevel() { Value = 1000, LineWidth = 3, LineStyle = DashStyle.Dotted  },
                new ContourLevel() { Value = 3000, LineWidth = 3, LineStyle = DashStyle.Dotted },   
                new ContourLevel() { Value = 4000, LineWidth = 3, LineStyle = DashStyle.Dotted },   
                new ContourLevel() { Value = 5500, LineWidth = 3, LineStyle = DashStyle.Dotted },   
            }) { new ILColorbar() }
        },           
        new ILContourPlot(A["150:400;150:400"], new List<ContourLevel>() {
            new ContourLevel() { Value = 1000, LineWidth = 3 },
            new ContourLevel() { Value = 3000, LineWidth = 3 },   
            new ContourLevel() { Value = 4000, LineWidth = 3 },   
            new ContourLevel() { Value = 5500, LineWidth = 3 },   
        })
    },
    Projection = Projection.Perspective,
});

enter image description here

注意,您可以为每个轮廓级别定义单独的颜色。但是,这样做显然会破坏轮廓水平值与色彩图中颜色之间的关系。因此,一旦您开始指定单个颜色,轮廓图将不再被视为“颜色映射”,并且颜色条将不会显示。

这里,由于我们仅为轮廓水平选择了,因此将挑选来自颜色图的相应颜色并且映射值&lt; - &gt;颜色仍然完好无损。

轮廓图文档:http://ilnumerics.net/individual-contour-levels-configuration.html