【问题标题】:Chart Multiple series different length generate duplicate x axis图表多个系列不同长度生成重复的x轴
【发布时间】:2012-12-07 04:16:28
【问题描述】:

看看这张来自我的 Web 应用程序 ASP.NET 4.0 的图片。

如您所见,线条的长度不同。还有重复的 x 轴条目。

蓝色系列缺少数据点,黄色则没有。 问题一: 如何对齐它们以使 x 轴保持不变。目前我正在这样做。并使线条同样长? 问题 2:有没有一种方法可以使图表具有交互性,以便您可以使用 ASP.NET 将光标悬停在线上查看该点的数据?

int amountofrows = Convert.ToInt32(dt.Rows[0]["antal"].ToString());

for (int i = 0; i < amountofrows; i++)
{
    List<string> xvals = new List<string>();
    List<decimal> yvals = new List<decimal>();
    string serieName = dt.Rows[i]["doman_namn"].ToString();
    Chart1.Series.Add(serieName);
    Chart1.Series[i].ChartType = SeriesChartType.Line;

    foreach (DataRow dr in dt.Rows)
    {
        try
        {
            if (String.Equals(serieName, dr["doman_namn"].ToString(), StringComparison.Ordinal))
            {
                xvals.Add(dr["ranking_date"].ToString());
                yvals.Add(Convert.ToDecimal(dr["ranking_position"].ToString()));
            }

        }
        catch (Exception)
        {

            throw new InvalidOperationException("Diagrammet kunde inte ritas upp");
        }
    }
    try
    {
        Chart1.Series[serieName].XValueType = ChartValueType.String;
        Chart1.Series[serieName].YValueType = ChartValueType.Auto;
        Chart1.Series[serieName].Points.DataBindXY(xvals.ToArray(), yvals.ToArray());
        Chart1.DataManipulator.InsertEmptyPoints(1, IntervalType.Days, serieName);
    }
    catch (Exception ex)
    {
        throw new InvalidOperationException(ex.Message);
    }
}

Chart1.DataBind();
Chart1.Visible = true;

【问题讨论】:

  • 关于您的第一个问题,我想您将不得不使用空数据点。见:stackoverflow.com/q/12839770/1236044
  • 关于您的第二个问题,请参阅 ImageMap 选项:msdn.microsoft.com/en-us/library/dd456682.aspx
  • 我确实使用空点,Chart1.DataManipulator.InsertEmptyPoints(1, IntervalType.Days, serieName);对于问题 2,感谢我正在寻找的东西 ;)
  • 我必须承认我从来没有成功使用 DataManipulator 插入空 DataPoints(在这里我猜 DataManipulator 与你的 x 字符串不匹配)也许你应该尝试手动插入我发布的 DataPoints我的第一条评论

标签: c# asp.net charts


【解决方案1】:

这就是答案!

感谢您指出 JBL!

     foreach (System.Web.UI.DataVisualization.Charting.Series serien in Chart1.Series)
     {
                foreach(System.Web.UI.DataVisualization.Charting.DataPoint dataPoint in serien.Points)
                {
                    if (dataPoint.YValues[0] == 0)
                    { 
                       dataPoint.IsEmpty = true;
                    }
                }

                serien.Sort(PointSortOrder.Ascending,sortBy:("X"));
     }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 2012-08-08
    • 2021-08-28
    相关资源
    最近更新 更多