【问题标题】:Margin between labels and y-axis, if labels on x-axis are shown with angle标签和 y 轴之间的边距,如果 x 轴上的标签以角度显示
【发布时间】:2017-01-17 10:07:40
【问题描述】:

我最近不得不更改 x 轴标签的大小,以确保它们在打印时清晰易读。这样做,标签和轴本身之间出现了一个边距,这似乎取决于字体大小和数据点的数量。

当移除标签上的角度时(AxisX.LabelStyle.Angle = 0),这个边距似乎消失了。不幸的是,这不是一个解决方案,因为标签上的角度是项目的要求。

设置 IsMarginsVisible 并没有解决问题。

有什么办法可以去掉这个边距?

可视化问题的屏幕截图:

显示该问题的 MCVE 可在此处获得:https://www.dropbox.com/s/4y0nwj8bymz6m3q/MSChart%20-%20misplaced%20labels.zip?dl=0

请注意:前段时间,我也遇到过类似的问题,如果元素数量变大了,也还是没有解决(MSChart axis misplaced for huge charts)。我随时准备提出任何问题和建议,以免这个问题和另一个问题一样不受欢迎。

附:如果您想对这个问题投反对票,请告诉我原因,以便我可以尝试改进它(因为我无法看到自己在这个问题不清楚或缺少recherche 迹象的地方)。谢谢。

【问题讨论】:

  • 好问题 imo,有问题的边距实际上很难发现!可能会在您所指的边距上添加一个箭头或一些指示,因为它会混淆条形图表上的 X 轴和 Y 轴是什么。不幸的是,我认为这是一个错误,我将尝试回答我为什么这么认为以及解决方法。
  • 很抱歉,但我没有找到好的解决方法,提供解释

标签: c# bar-chart mschart


【解决方案1】:

不幸的是,我认为这是所有类型条形图的错误。要清楚,因为这个问题被否决了:只要 X -axis 文本是有角度的,通过chart1.ChartAreas[0].AxisX.LabelStyle.Angle = 30; 如提供的示例或例如。 chart1.ChartAreas[0].AxisX.LabelAutoFitStyle = LabelAutoFitStyles.LabelsAngleStep30;.

我怀疑这种奇怪的虫子行为有几个原因,即:

  1. 如果您在提供的代码中挤压图表的宽度(与问题中的屏幕截图相同),边距会不断增加,而正确的行为不会改变。
  2. 您可以通过将图表类型更改为任何类型的柱形图来进一步验证这一点
  3. 更重要的是,此行为仅在主 X 轴上明显,在辅助 X 轴上不明显。

我已尝试使用 CustomLabels 并反转 X 轴,而是使用辅助 Y 轴,但底部的 any 轴的尺寸计算不正确。事实上,即使您使用辅助 Y 轴,也必须禁用主 Y 轴以避免底部的空白缩放。

这意味着最明显的选项可悲地减少为:

  • 需要更多的工作,您可以使用 Post_Paint 事件 (Example) 绘制自己的标签
  • 如果可能,请考虑一个行为正确的柱形图
  • 或者使用顶部的辅助 Y 轴

后者极大地改变了图表的外观,但确实让您可以控制边距。总之:不,这似乎是一个错误,没有办法通过设置“正确”属性来删除边距。

【讨论】:

  • 非常感谢您的检查和努力。我还认为这是条形图中的一个错误,不幸的是,修复似乎遥不可及。我想我将不得不处理其中一个缺点(因为正如您所说,到目前为止,每种解决方法都伴随着外观的明显变化)。