【问题标题】:MSChart axis misplaced for huge chartsMSChart 轴错位用于大型图表
【发布时间】:2016-06-03 12:02:16
【问题描述】:

我目前遇到了 MSChart 的问题,尤其是。条形图。该图表旨在导出并保存到图像文件中,并且要显示大量单独的条形图,因此高度为 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:如 cmets 中所述,上图并非来自示例项目。尽管如此,问题仍然存在,如新图像所示。 左图显示了一个小图表,其中轴的标签位于顶部的右侧(到顶部的距离标记为绿色)。 右图显示了相同的图表,但高度约为 30.000 像素。如您所见,轴的标签错位了,因为到顶部的距离似乎与图表高度成比例。

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

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

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

【问题讨论】:

  • @DanielT,你是想说 0.4KB 的勾号应该是你指示绿线的地方吗?
  • 您的 x 值是数字吗? (使用调试器进行测试!)值是如何添加的? - 顺便说一句:Winforms 控件的内部大小限制为 32k 像素,所以看到这么大的图表出现问题我不会感到惊讶..
  • @jstreet:上传了一个示例项目。
  • @Baddack:不,不是滴答声。这是关于轴的整个标签(0.4KB ... 0.6KB .. [等等])。它应该位于固定的 y 位置。
  • 你是对的!哇,总有一些关于图表的新知识:-)

标签: .net charts bar-chart mschart


【解决方案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.SizeAxisX.IsMarginVisible 才能使其工作。 p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多