【问题标题】:C#, DataVisualization.Charting: assign custom labels to values on axesC#,DataVisualization.Charting:将自定义标签分配给轴上的值
【发布时间】:2014-12-30 05:29:19
【问题描述】:

在 C# 中,我使用 DataVisualization.Charting 库进行绘图。 在一个简单的折线图中,我想在 x=0、1、2、3 位置的 x 轴上显示一些自定义文本。

类似这样的东西(尽管在 matplotlib 中):

This 是 Axis 类的文档,但我不确定应该查找什么。

【问题讨论】:

    标签: c# windows charts data-visualization axes


    【解决方案1】:

    使用DataPointAxisLabel 属性。 AxisLabel属性说明:

    获取或设置数据点、系列的X轴标签的文本 或空点。此属性仅在自定义标签具有 没有为相关的 Axis 对象指定。

    所以您的代码可以如下所示:

    DataPoint dp1 = new DataPoint(1, 1);
    dp1.AxisLabel = "Frogs";
    DataPoint dp2 = new DataPoint(2, 4);
    dp2.AxisLabel = "Hogs";
    DataPoint dp3 = new DataPoint(3, 9);
    dp3.AxisLabel = "Bogs";
    DataPoint dp4 = new DataPoint(4, 6);
    dp4.AxisLabel = "Slogs";
    chart1.Series[0].Points.Add(dp1);
    chart1.Series[0].Points.Add(dp2);
    chart1.Series[0].Points.Add(dp3);
    chart1.Series[0].Points.Add(dp4);
    

    或者您可以使用以下代码强制执行 1=Frogs、2=Hogs、3=Bogs 和 4=Slogs:

    chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
    chart1.ChartAreas[0].AxisY.MajorGrid.Enabled = false;    
    chart1.Series[0].MarkerStyle = MarkerStyle.Circle;
    chart1.Series[0].MarkerBorderColor = System.Drawing.Color.Black;
    chart1.Series[0].MarkerColor = System.Drawing.Color.Red;
    chart1.Series[0].Points.AddXY(1, 1);
    chart1.Series[0].Points.AddXY(2, 4);
    chart1.Series[0].Points.AddXY(3, 9);
    chart1.Series[0].Points.AddXY(4, 6);
    foreach (DataPoint dp in chart1.Series[0].Points)
    {
        switch ((int)dp.XValue)
        {
            case 1: dp.AxisLabel = "Frogs"; break;
            case 2: dp.AxisLabel = "Hogs"; break;
            case 3: dp.AxisLabel = "Bogs"; break;
            case 4: dp.AxisLabel = "Slogs"; break;
        }
    }
    

    要实现与图片上的完全相同 - 两侧的轴 - 您需要使用 the following trick

    它仅适用于 X 轴,对于 Y 轴,您可以添加自定义标签,如 here 所述。

    您还可以使用IsValueShownAsLabel 来使用图表内出现的数据点标签。

    【讨论】:

    • 感谢您的回答。有一件事让我担心:当您执行dp.AxisLabel = "something" 时,您没有指定应将标签添加到哪个轴。在您链接的文档中,它说它用于 x 轴。 y轴的等价物是多少?我第一篇文章中的图片只是一个例子,我认为将这个例子适应我的情况会很简单。 ://
    • @RickyRobinson 已编辑答案 - y 轴没有等效项,添加了如何操作的链接。
    【解决方案2】:

    只需将带有这些标签的点添加为 x 值:

    chart1.Series[0].Points.AddXY("Frogs", 1);
    chart1.Series[0].Points.AddXY("Hogs", 4);
    // etc
    

    或者,您可以使用两个数组对点进行数据绑定:

    string[] xvalues = new [] {"Frogs", "Hogs", "Bogs", "Slogs"};
    int[] yvalues = new [] {1, 4, 9, 6};
    chart1.Series[0].Points.DataBindXY(xvalues, yvalues);
    

    【讨论】:

    • 谢谢。它看起来很简单,但似乎 C# 将 Frogs 分配给 1,Hogs 分配给 2,Bogs 分配给 3,Slogs 分配给 4,只是因为这是我添加点的顺序。在我的具体情况下,我需要绘制几个点,不一定随着 X 值的增加。如何强制执行 1=Frogs、2=Hogs、3=Bogs 和 4=Slogs?
    【解决方案3】:

    您需要在轴上设置 LabelStyle 的“格式”属性。

    见:http://msdn.microsoft.com/en-us/library/system.web.ui.datavisualization.charting.labelstyle(v=vs.110).aspx

    如果您搜索它们,那里有一些关于使用图表库的合理教程。这是一个:http://weblogs.asp.net/dwahlin/getting-started-with-the-asp-net-3-5-chart-control

    【讨论】:

    • 设置Format 不会将整数更改为字符串。
    • 不,它不会,但是如果您绑定单个集合,而不是添加/绑定单个 x/y 坐标,这就是您需要查看的内容。如果您手动添加点,为什么要首先输入整数?
    • 谢谢。你能提供一个例子来说明它是如何工作的吗?不幸的是,您链接的教程中没有使用此属性。
    • 您能否提供一个示例,在其中我添加诸如 (2,0), (3,1), (0,3), (3, 4), (2, 5) 之类的点,在 x 轴上,它将在位置 1 上显示“青蛙”,在位置 2 上显示“猪”,等等开吗?
    猜你喜欢
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多