【问题标题】:Show letters on Y-Axis in chart在图表的 Y 轴上显示字母
【发布时间】:2018-05-15 09:58:45
【问题描述】:

亲爱的程序员们,

我正在尝试创建一个包含 ASCII 字符的 Y 轴图表(例如 Hx 41 - A 到 Hx 46 F),用于在控制图中显示成绩。 我搜索了多个网站,但(也许我没有正确搜索)我找不到我要找的东西。

我现在有什么:
- 我的 Y 轴现在包含编号(十六进制 41 到 46) - 我的 Y 轴尚未以任何方式格式化,只有最小值和最大值由下面的代码填充

            if (measurementData.Max() >= Usl) maxValue = measurementData.Max();
            else if (measurementData.Max() < Usl) maxValue = Usl + 0.1;

            if (measurementData.Min() <= Lsl) minValue = measurementData.Min();
            else if (measurementData.Min() > Lsl) minValue = Lsl - 0.1;

我想要什么:
- 我的 Y 轴是显示 'A' 到 'F' (而不是 Hex. 41 到 46)

【问题讨论】:

  • 您的目标是什么:Winforms、WPF、ASP..?始终正确标记您的问题! - 假设 Winforms 和 MSChart:您可以为每个 DataPoint 设置 X-AxisLabel。对于 Y 轴标签,这是不可能的,因为许多点可以具有相同的 y 值。相反,您将设置 CustomLabels。如果你想要一个代码示例,你需要展示你到目前为止的代码。
  • 抱歉,我正在从 WPF 打开一个 Winforms。在此之后,我将根据我的数据为 Axis-Y 创建最小值和最大值。你能给我提供一个很好的 CustomLabels 例子吗?我已经尝试阅读它,但到目前为止我尝试过的东西都不起作用。此时我没有对 Axis-Y 做任何设置
  • 我写了a few examples,一些用于 x 轴,一些用于 y 轴。关键始终是了解基础知识,即您需要有一对 FromPosition 和一个 ToPosition。此外,内部所有值都是双倍的。所以如果你真的有从 x41-x46 的值,即从 65-70,第一个标签可能有 64.9 和 65.1 等等。
  • 我会休息一天。如果您可以发布您想要的图片,明天会更容易提供帮助..

标签: c# winforms charts axis-labels yaxis


【解决方案1】:

看了一圈之后……我找到了解决办法:

Chart1.ChartAreas("ChartArea1").AxisX.CustomLabels.Add(0.5, 1.5, "yr1")
Chart1.ChartAreas("ChartArea1").AxisX.CustomLabels.Add(1.5, 2.5, "yr2")
Chart1.ChartAreas("ChartArea1").AxisX.CustomLabels.Add(2.5, 3.5, "yr3")

使用上面的例子,修改如下:

crtProces.ChartAreas[0].AxisY.CustomLabels.Clear();
crtProces.ChartAreas[0].AxisY.CustomLabels.Add(40.5, 41.5, "A");
crtProces.ChartAreas[0].AxisY.CustomLabels.Add(41.5, 42.5, "B");
crtProces.ChartAreas[0].AxisY.CustomLabels.Add(42.5, 43.5, "C");
crtProces.ChartAreas[0].AxisY.CustomLabels.Add(43.5, 44.5, "D");
crtProces.ChartAreas[0].AxisY.CustomLabels.Add(44.5, 45.5, "E");
crtProces.ChartAreas[0].AxisY.CustomLabels.Add(45.5, 46.5, "F");

我的下一个问题是,如何使它可变?现在增量是手动填充的(40.5 - 41.5),但是如何在 for 循环中完成呢?

【讨论】:

  • Here 是一个带有 for 循环的简单示例。但真正的问题是了解规则。你可以有一个计数器,或者你可以循环从axis.Minimum到axis.Maximum的值,以axis.Interval为步骤。但规则是关键,你需要决定它们! - 在你的例子中:动态应该是什么:当循环一个更大的数字时,它应该创造更多的字母吗?还是应该将相同数量的等级分配给不同的数量?
  • 基本上这个例子显示的是DMC质量分级,所以字母A到F是固定的(这是基于规范)。在我看来,创建循环意味着编写更少的代码。你发给我的例子很棒!我可以使用它!我在该代码中看到了一些问号,这对我来说是新的,但我会在那里发表评论以保持整洁。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多