【问题标题】:Chart - Controlling axis interval, spacing and visibility图表 - 控制轴间隔、间距和可见性
【发布时间】:2015-02-05 10:12:33
【问题描述】:

使用图表窗口窗体控件显示:

堆叠列
几个系列,每个系列约 70 个数据点。假设 x:0 - 70。辅助 Y 轴。

点/线
显示 0-3 个系列,每个系列约 20 个数据点。 X 值为 0-20,因此仅覆盖图表区域的一部分。主 Y 轴。

我正在向 x 轴添加自定义标签。用户可以选择显示 24、48 或 72 个数据点。根据数据点的数量,x 轴上的间隔会发生变化。

24 -> Interval 1  
48 -> Interval 2  
72 -> Interval 3  

第一个问题
当点/线图不可见时,我不希望显示主 Y 轴。这是可行的,但是当我添加图表时,整个图表区域会移动并调整大小以适应轴。我希望图表区域保持静止,只需将轴添加到该区域。查看图像 24_Point 和 24_NoPoint 之间的区别。

第二个问题
轴上的间隔似乎有效,但数字被缩放并向上/向下移动以适应,即使似乎没有任何空间问题。有没有办法强制方向、字体和距离使它们不动?我在修复字体时看到的一个问题是,如果要关闭标签,它们会重叠或消失。但是在这种情况下,程序将完全控制图表区域的标签数量和大小,因此它应该能够控制它。查看图像 24_Point 和 48_Point 之间的区别。

相关代码

Chart.ChartAreas["Default"].AxisX.CustomLabels.Clear();
if (PlotHours == 24){
  interval = 1;
} else if (PlotHours == 48){
  interval = 2;
} else {
  interval = 3;
}

q = 0;

for (int i = 0; i=72; i++){
  if (q==0){
    Chart.ChartAreas["Default"].AxisX.CustomLabels.Add((i-0.5, (i+0.5), AxisLabels[i]);
  }
  if (q == (interval-1)){
    q = 0;
  } else {
    q++;
  }
}
Chart.ChartAreas["Default"].AxisX.Interval = interval;
Chart.ChartAreas["Default"].AxisX.IntervalOffset = 1;

参考图片
我没有删除图片的黑色区域的原因是为了保持它们的比例。

24_Point
24_NoPoint
48_Point

【问题讨论】:

  • 您的问题解决了吗?

标签: c# charts axis-labels


【解决方案1】:

问题 1:我认为您不能让图表将空白区域留在左侧。取而代之的是一个简单的解决方法:显示 Y 轴,但使标签透明See here for a similar example! 这将占用空间而不会显示更多不显眼的刻度线..

问题 2:我认为您无法让标签相信他们有足够的空间,而图表认为并非如此。它为更大的负值保留了空间,所以恐怕你必须留出一些额外的空间

  • 减小字体大小或字体宽度
  • 减少标签数量
  • 扩大图表区域

【讨论】:

    【解决方案2】:

    标签问题通过简单的代码更改解决:

        Chart.ChartAreas["Default"].AxisX.CustomLabels.Add((i-(interval/2), (i+(interval/2)), AxisLabels[i]);
    

    您正在为每个标签指定一个范围。这个范围不仅提供了有关它所涵盖的数据的信息,而且似乎还指定了标签允许使用的空间。通过增加这个空间,根据您想要的间隔,标签将能够正确显示,无需旋转或上/下移动。

    【讨论】:

      猜你喜欢
      • 2020-10-19
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多