gpt4 book ai didi

c# - 强制 x 轴上的点之间存在间隙(MS .Net 图表控件、柱形图)

转载 作者:太空狗 更新时间:2023-10-29 23:04:28 24 4
gpt4 key购买 nike

我有一个包含多个系列的柱形图,每个系列包含多个点。目前,这些列都相互接触。我想在每列之间强制留出一个空隙。我怎样才能做到这一点?

我发现应用 PointWidth (Chart1.Series[seriesName]["PointWidth"] = (0.6).ToString();) 可以在 x 值组之间进行分隔,但不能在 x 值组之间进行分隔每个系列点在一个单独的组中(我需要)。使用空间隔系列作为 suggested elsewhere没有解决问题。

Current Chart

我正在使用 .Net 4、VS 2010、Web 应用程序。我的图表代码如下:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Web.UI;
using System.Web.UI.DataVisualization.Charting;

namespace WebApplication1
{
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
Chart1.ChartAreas.Add("Default");
Chart1.ChartAreas["Default"].BackColor = Color.White;
Chart1.ChartAreas["Default"].BackSecondaryColor = Color.AliceBlue;
Chart1.ChartAreas["Default"].BackGradientStyle = GradientStyle.TopBottom;

Chart1.BackColor = Color.AliceBlue;
Chart1.BackSecondaryColor = Color.White;
Chart1.BackGradientStyle = GradientStyle.TopBottom;
Chart1.BorderSkin.SkinStyle = BorderSkinStyle.Emboss;
var colors = new List<Color>(GetSystemColors().Where(c=>c.Name.StartsWith("Dark")));
var rng = new Random();
var start = rng.Next(0, colors.Count - 1);
for (var c = start; c < start + 6; c++)
{
var color = colors[c % colors.Count];
Chart1.Series.Add(color.Name);
Chart1.Series[color.Name].BorderColor = color;
Chart1.Series[color.Name].BorderWidth = 1;
Chart1.Series[color.Name].Color = Color.FromArgb((int)(255 * .7), color);
Chart1.Series[color.Name].BackSecondaryColor = Color.White;
Chart1.Series[color.Name].BackGradientStyle = GradientStyle.TopBottom;
for (var year = DateTime.Now.AddYears(-5).Year; year < DateTime.Now.Year; year++)
Chart1.Series[color.Name].Points.Add(new DataPoint(year, rng.Next(0, 20)));

Chart1.Series[color.Name]["PointWidth"] = (0.6).ToString();
//Chart1.Series.Add("Spacer:" + color.Name);
//Chart1.Series["Spacer:" + color.Name]["PointWidth"] = (0.6).ToString();
}
Chart1.Legends.Add("Default");
}

static IEnumerable<Color> GetSystemColors()
{
Type type = typeof(Color);
return type.GetProperties().Where(info => info.PropertyType == type).Select(info => (Color)info.GetValue(null, null));
}
}
}

最佳答案

我有自己的工作重现你的情况。我想提供帮助,因为我认为我可以通过这样做学到一些东西,但我需要你的标记,或者更好的是,整个解决方案!当我尝试一个带有图表的简单页面时,我遇到了“执行 ChartImg.axd 的子请求时出错”的问题。我发现我需要在配置中添加一个处理程序。然后我解决了加载程序集 System.Web.DataVisualization 失败的问题,因为我复制的处理程序元素引用了 3.5 DataVisualization 程序集,所以我将其更改为 4.0 并最终看到了一个图表。这是多么棒的工作啊!

您的间隔系列没有产生间隙的原因是因为该系列中没有值。请注意下面的最后两行代码,它们将零值添加到间隔序列。这会在其他系列之间产生所需的间隙,但如果您有的话,您还会在图例中找到间隔系列,这至少可以说是丑陋的。

  for (var c = start; c < start + 6; c++)
{
var color = colors[c % colors.Count];
var seriesName = "Series "+ c;//color.Name);
Chart1.Series.Add(seriesName);
Chart1.Series[seriesName].BorderColor = color;
Chart1.Series[seriesName].BorderWidth = 1;
Chart1.Series[seriesName].Color = Color.FromArgb((int)(255 * .7), color);
Chart1.Series[seriesName].BackSecondaryColor = Color.FromArgb((int)(255 * .2), color);
Chart1.Series[seriesName].BackGradientStyle = GradientStyle.TopBottom;
for (var year = DateTime.Now.AddYears(-5).Year; year < DateTime.Now.Year; year++)
Chart1.Series[seriesName].Points.Add(new DataPoint(year, rng.Next(0, 20)));

Chart1.Series[seriesName]["PointWidth"] = (0.6).ToString();

seriesName = "Spacer:" + seriesName;
Chart1.Series.Add(seriesName);
Chart1.Series[seriesName]["PointWidth"] = (0.6).ToString();
for (var year = DateTime.Now.AddYears(-5).Year; year < DateTime.Now.Year; year++)
Chart1.Series[seriesName].Points.Add(new DataPoint(year, 0));
}

您可以将图例文本设置为空格(注意,空字符串将被忽略并且图例文本未设置)如下所示,但图例仍会显示这些间隔系列。

    Chart1.Series[seriesName].LegendText = " ";

如果幸运的话,您不需要显示图例,或者您可以将间隔系列颜色设置为与图例背景相同的颜色,并将图例文本设置为空格。这会导致图例中的双倍间距外观,这可能是可以接受的。

关于c# - 强制 x 轴上的点之间存在间隙(MS .Net 图表控件、柱形图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2137157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com