MSChart轴错位了巨大的图表

时间:2016-06-03 12:02:16

标签: .net charts bar-chart mschart

我目前遇到了与MSChart有关的问题,尤其是一个BarChart。该图表旨在导出并保存到图像文件中,并显示大量单独的条形图,结果高度为38960像素。

问题:看起来像轴的高度'标签以百分比计算,最小值为1(之后最少为10px)。这样标签距离图表大约390px ......

为了说明这个问题,我设置了AxisX.Crossing = 0,因此应该在图表的上边框正下方绘制轴(绿线)。实际位置标记为红色。

(由于我不允许发布2个以上的链接,我必须删除原始图片)

感谢您解决或解决此问题的任何帮助。

修改:可以在此处找到展示问题/问题的简单项目:https://www.dropbox.com/s/fgyxnf4dh9v36ny/HugeMSChart.zip?dl=1

基本上:固定图表。我增加了图表的高度以进行演示。像:

        // Increase height 
        chart1.Height += 100;

        // Calculate percentual value for the inner plot position for 50px (absolute)
        chart1.ChartAreas[0].InnerPlotPosition.Y = (float)((double)5000 / chart1.Height);
        chart1.ChartAreas[0].InnerPlotPosition.Height = 100 - 2 * chart1.ChartAreas[0].InnerPlotPosition.Y;

编辑2 :如评论中所述,上图不是示例项目的结果。然而,问题保持不变,如新图像所示。 左侧图像显示一个小图表,其中轴的标签位于顶部(距离顶部标记为绿色)。 右图显示相同的图表,但高度约为30.000px。如您所见,轴的标签错位,因为到顶部的距离似乎与图表高度成比例。

enter image description here

编辑3:不幸的是,我不得不承认以前的MCVE不会涵盖整个问题(我是这么认为的,但我错了......抱歉)。到目前为止提出的解决方案适用于大型图表,但只能使用有限数量的数据点。增加数据点的数量时,轴和标签之间的边距仍然可见(即使IsMarginVisible = false)。

可以在此处找到更新的MCVE(只需执行并向下滚动到最底部):https://dl.dropboxusercontent.com/u/24263856/HugeMSChart2.zip

对于旧解决方案:当轴的交叉值之上和之下至少有一个数据点时,似乎不应用边距。但是,当这将轴(和标签)移动到图表中时,这不是真正的解决方案。

1 个答案:

答案 0 :(得分:1)

感谢jstreet的解决方案,我找到了另一个,它允许显示具有指定长度的刻度线,如果没有将轴的交叉设置为图表的顶部,也可以使用。

//Set the size of the tick mark to a fix 10px
chart1.ChartAreas[0].AxisX.MajorTickMark.Size = (float)((double)10 * 100 /(chart1.ChartAreas[0].InnerPlotPosition.Height/100 * chart1.Height));
//Remove the margin between the tick mark and the label
chart1.ChartAreas[0].AxisX.IsMarginVisible = false;

注意:特别是对于条形图(标记为),我必须设置 AxisY.MajorTickMark.Size AxisX.IsMarginVisible 才能使其正常工作。