【问题标题】:C# chart class -- custom labels for x axis?C#图表类——x轴的自定义标签?
【发布时间】:2014-09-20 04:22:04
【问题描述】:

我使用 C# 与使用 EntityFramework 的 MSSQL 数据库进行通信。我想从图表中的表格绘制的两列采用以下格式:第一列是 string (这就是提供给我的方式,我知道它可能不是最佳设计选项)格式为“MM/dd/yyyy HH:mm:ss.fff”(其中 fff 代表毫秒),第二个表是一个简单的浮点值。

我希望 x 轴代表时间,我希望 y 轴代表浮点值。如果我只是将字符串按原样提供给图表类,则这些点在水平方向上是等距的。我试图可视化的数据不是定期出现的,所以这不是预期的行为。

我尝试做的是将日期字符串转换为整数,每个整数代表自我绘制图形的最早点以来经过了多少毫秒。这在图表中显示得很好,但我不希望 x 轴上的点用新计算的整数标记。我希望 x 轴显示原来的日期,但是当值转换为整数时,我希望保持相对水平顺序。我希望我的问题很清楚。例如,如果我想可视化以下三个点 (01/01/2014 00:00:00.000, y1), (01/01/2014 00:00:00.500, y2) 和 (01/01/2014 00:00:02.000, y3),如何确保第二点和第三点之间的水平距离比第一点和第二点之间的水平距离大三倍,但仍保留 x 上的原始日期标签轴?

有什么想法可以做到这一点吗?有没有办法指定一个函数,该函数将为每个 int 返回 x 轴的标签字符串?

谢谢。

【问题讨论】:

    标签: c# .net visual-studio user-interface charts


    【解决方案1】:

    如果您要逐个添加点 - 例如,

    chart1.Series[0].Points.AddXY(dateString, yValue);
    

    您可以将string 对象转换为DateTime 对象,图表控件可以根据需要轻松显示。只需在致电 AddXY 之前转换 dateString

    如果您将数据库中的结果表直接数据绑定到图表,这可能行不通。可以尝试设置轴的Format属性:

    chart1.ChartAreas[0].AxisX.LabelStyle.Format = "MM/dd/yyyy hh:mm:ss.fff";
    

    或类似的东西。不过不确定这是否能正常工作。

    【讨论】:

    • 您能否解释一下它是如何决定点之间的间距的(以及为什么它适用于 DateTime 对象)?如果它使用某个函数来决定 b.x - a.x 应该是多少,然后将点可视化,是否可以用户定义这样的函数?
    • 它减去点以确定间距。 DateTime 类覆盖减法运算符以返回有意义的结果,但 string 没有这样做(因此,为什么您最初尝试使用字符串会导致等距间隔)。您需要使用一些可以减去的数据类型。整数会起作用,但正如您所发现的那样,您会遇到标签问题。您可以使用自定义标签,但如果您已经转换为整数,则转换为 DateTime 并让图表处理标签会容易得多。
    • 这正是我的工作,我不知道我可以为 DateTime 类设置自定义格式!非常感谢! :)
    猜你喜欢
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 2019-04-02
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    相关资源
    最近更新 更多