如何使DevExpress WPF Chart 3D控件的X、Y轴长度相同,让XY平面为正方形?
问题:DevExpress WPF Chart 3D控件如何让XY平面呈现正方形(X/Y轴长度相同)
我近期正在学习DevExpress WPF Chart 3D控件,修改示例代码后生成了对应图表。以下是我的代码片段:
var points = new List<TestPoint>(); for (int i = 0; i < 90; i++) { for (int j = 0; j < 360; j++) { points.Add(new TestPoint() { X = i, Y = j, Z = new Random(i * j % 10).NextDouble() * 10 + 100 }); } } ... DoubleCollection mapX = new DoubleCollection(xArray.Length); DoubleCollection mapY = new DoubleCollection(yArray.Length); DoubleCollection values = new DoubleCollection(xArray.Length * yArray.Length); for (int i = 0; i < xArray.Length; i++) { mapX.Add(xStart + i * xStep); for (int j = 0; j < yArray.Length; j++) { mapY.Add(yStart + j * yStep); double value = array[i, j]; values.Add(value); } } MapY = mapX; MapX = mapY; MapValues = values;
请问如何设置才能使X轴和Y轴的长度相同,让XY平面呈现为正方形?
解决方案
要让XY平面呈现正方形,核心是保证X轴和Y轴的显示缩放比例一致,或者让轴的数值范围与容器宽高比匹配,以下是几种可行的实现方式:
方法1:启用全局等比例缩放
直接设置SurfaceDiagram3D的EqualScales属性为True,强制X、Y、Z三个轴使用相同的缩放比例,确保XY平面显示为正方形:
<dxc:Chart3D> <dxc:Chart3D.Diagram> <dxc:SurfaceDiagram3D EqualScales="True"> <!-- 轴与系列配置 --> </dxc:SurfaceDiagram3D> </dxc:Chart3D.Diagram> </dxc:Chart3D>
方法2:手动调整XY轴缩放比例
如果不需要Z轴参与等比例缩放,可以手动计算并设置X/Y轴的ScaleFactor,让两者显示长度一致:
// 获取图表的Diagram实例 var surfaceDiagram = (SurfaceDiagram3D)chart3D.Diagram; // 获取X/Y轴的数值范围 double xTotalRange = surfaceDiagram.AxisX.Range.MaxValue - surfaceDiagram.AxisX.Range.MinValue; double yTotalRange = surfaceDiagram.AxisY.Range.MaxValue - surfaceDiagram.AxisY.Range.MinValue; // 调整X轴缩放比例,使其与Y轴显示长度匹配 surfaceDiagram.AxisX.ScaleFactor = yTotalRange / xTotalRange; // 若以X轴为基准调整Y轴,使用:surfaceDiagram.AxisY.ScaleFactor = xTotalRange / yTotalRange;
方法3:匹配轴范围与容器宽高比
如果图表容器宽高比为1:1,直接让X/Y轴的数值范围(最大值-最小值)相同,再开启轴的KeepScaleRatio即可:
<dxc:SurfaceDiagram3D> <dxc:SurfaceDiagram3D.AxisX> <dxc:Axis3D Range="0,360" AutoScale="True" KeepScaleRatio="True"/> </dxc:SurfaceDiagram3D.AxisX> <dxc:SurfaceDiagram3D.AxisY> <dxc:Axis3D Range="0,360" AutoScale="True" KeepScaleRatio="True"/> </dxc:SurfaceDiagram3D.AxisY> </dxc:SurfaceDiagram3D>
额外注意事项
- 检查代码中
MapY = mapX; MapX = mapY;的轴交换逻辑,确认最终X/Y轴的实际数值范围是否符合预期; - 若图表容器宽高比不是1:1,即使轴比例正确,XY平面也可能看起来不是正方形,此时需要将容器宽高设置为相同值。
内容的提问来源于stack exchange,提问作者Dream Land
相关产品推荐
相关产品推荐

