gre*_*ade 5 .net c# data-visualization mschart
我有一个包含多个系列的柱形图,每个系列包含多个点.目前这些列都相互接触.我想强制每列之间的差距.我怎样才能做到这一点?
我发现应用PointWidth(Chart1.Series[seriesName]["PointWidth"] = (0.6).ToString();)会让我在x值组之间分离,而不是在单个组中的每个系列点之间(我需要).使用其他地方建议的空间隔系列并不能解决问题.

我正在使用.Net 4,VS 2010,Web Application.我的图表代码如下:
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));
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有魔鬼自己的工作再现你的情况.我想帮助,因为我认为我可以通过这样做来学习,但我需要你的标记,或者更好的是,整个解决方案!当我尝试使用图表的简单页面时,我一直在努力解决"执行ChartImg.axd的子请求时出错".我发现我需要在配置中添加一个处理程序.然后,我通过加载程序集System.Web.DataVisualization失败,因为我复制的处理程序元素引用了3.5 DataVisualization程序集,因此我将其更改为4.0,最后看到了一个图形.这是一份多么棒的工作!
您的垫片系列没有产生间隙的原因是因为该系列中没有值.请注意下面的最后两行代码,它们为spacer系列添加零值.这会在其他系列之间产生所需的间隙,但是如果你有一个间隔系列,你也可以在你的图例中找到它,这至少可以说是丑陋的.
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));
}
Run Code Online (Sandbox Code Playgroud)
您可以将图例文本设置为空格(NB.空字符串被忽略,图例文本未设置),如下所示,但图例仍将显示这些间隔系列.
Chart1.Series[seriesName].LegendText = " ";
Run Code Online (Sandbox Code Playgroud)
如果幸运的话,您不需要显示图例,也可以将间隔系列颜色设置为与图例背景相同的颜色,将图例文本设置为空格.这导致Legend中的双间距外观可能是可接受的.
| 归档时间: |
|
| 查看次数: |
16170 次 |
| 最近记录: |