【问题标题】:chart control - string on x axis图表控件 - x 轴上的字符串
【发布时间】:2018-03-02 09:56:41
【问题描述】:

如何在图表控件的 x 轴上显示字符串值?数据点 (x & y) 都是双倍的。我有一个 IEnumerable 包含具有 2 个属性的对象列表。报告的名称和一个整数值,指示它运行了多少次。所以整数在 y 轴上,报告名称在 x 轴上。但我似乎对值类型只有双重选择。所以当我创建我的数据点时,我得到一个错误

DataPoint p1 = new DataPoint();
p1.XValue = log.ReportName; ---> this is invalid
p1.YValues = new Double[] { log.ReportTotal };

如何做到这一点?

我试过了

reportTotal.XValueType = ChartValueType.String;

当我绘制我的数据点时,我已经这样做了

        int i = 1;
        foreach (var log in this._reportLogs)
        {
            DataPoint p1 = new DataPoint();
            p1.XValue = (double)i;
            p1.YValues = new Double[] { log.ReportFrequency };
            i++;
            reportTotal.Points.Add(p1);

        }

但是现在沿 x 轴的所有 im 都是 i 变量的数量,我到底如何才能获取 text 属性的内容?

这就是我的工作方式

Dictionary<string, int> ReportLogs = new Dictionary<string, int>();

foreach (var log in this._reportLogs)
      ReportLogs.Add(log.ReportName, log.ReportFrequency);

foreach (KeyValuePair<string, int> log in ReportLogs)
       reportTotal.Points.AddXY(log.Key, log.Value);

【问题讨论】:

  • 您的问题解决了吗?
  • 我沿着 KeyValuePair 路线走下去,效果很好,请参阅我更新的问题
  • 好吧,只要你从不需要 x 值就可以了..

标签: c# winforms mschart datapoint


【解决方案1】:

轴上的标签是根据 x 值创建的,它们的数量可以根据它们的大小自动确定,也可以通过设置 x 轴的 Interval 属性来确定。

因此它们的位置不一定与实际的DataPoints 一致。

并且您可以格式化它们,但只能在正常的格式化规则范围内,即您无法使用表达式将数字转换为自定义字符串,这似乎正是您想要的:根据其显示报告名称号码。

其他示例可能是根据邮政编码显示城市或根据 emp.ID 显示人名..

要获得完全控制,您可能需要使用CustomLabels。它们有点棘手,但非常有用。请参阅several of these posts 获取大量示例!

另请注意:如果您将 x 值类型更改为字符串(这可能的:yourseries.XValueType = ChartValueType.String)这些字符串将直接显示,但您会丢失实际的 x 值!通常不推荐(但在您的情况下可能没问题)!

因此,如果您愿意,可以做到;但是您不能像以前那样准备 DataPoint。相反,您需要使用Points.AddXY 方法。

这会将字符串转换为双精度(结果为零)并将字符串复制到标签中..:

  reportTotal.Points.AddXY(log.ReportName, new Double[] { log.ReportTotal });

更新

另一种方法是设置每个DataPointAxisLabel。要显示所有这些,您可能需要设置yourxaxis.Interval = 1

所以在你的循环中只需添加

p1.AxisLabel = log.ReportName;

【讨论】:

  • 我确实将 XValueType 设置为字符串,但是如何从字符串中设置 x 数据点值?它总是双重的
  • 刚刚更新了我的问题,仍然无法让它工作,这么简单的事情肯定不会这么困难吗?
  • 确实,值总是双倍的,当您将它们添加为字符串时,值将为零。要将它们添加为字符串,您可以使用 Points.AddXY 方法。查看我的更新!
  • 看我上次的更新,这可能是你应该做的!
猜你喜欢
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 2012-09-23
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多