MS asp.net雷达图的丑陋绘制

17

我正在使用微软的 asp.net 图表控件,使用雷达图绘制一些数值,但由于某些原因,X轴的线没有真正相交。

我设置了 LineWidth = 1,但线条仍然占用了大约2个像素,并且有些标记完全偏离了,或者可能是线条完全偏离了。 也许我的文本有点偏差,所以请查看图片,希望您可以理解我的问题。=)

enter image description here

生成图表的代码:

// Populate series data
Chart chart1 = new Chart();
chart1.ChartAreas.Add(new ChartArea("ChartArea1"));

chart1.Height = new Unit(380);
chart1.Width = new Unit(880);
//chart1.AntiAliasing = AntiAliasingStyles.Graphics;  
//chart1.BackColor = Color.Transparent;
chart1.Customize += new EventHandler(Chart_Customize);

// Show as 3D
chart1.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = false;
chart1.ChartAreas["ChartArea1"].AxisY.IntervalAutoMode
    = IntervalAutoMode.FixedCount;
chart1.ChartAreas["ChartArea1"].AxisY.Interval = 10;
chart1.ChartAreas["ChartArea1"].AxisY.Maximum = 100;

chart1.ChartAreas["ChartArea1"].AxisY.IsReversed = true;

chart1.ChartAreas[0].AxisY.LineWidth = 1;
chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.Gray;
chart1.ChartAreas[0].AxisY.LineColor = Color.Gray;
chart1.ChartAreas[0].AxisY.MajorTickMark.Enabled = false;

List<string> names = new List<string>();
int namecounter = 1;
foreach (var p in Model.Participants)
{
  if (SessionHandle.ShowNamesInDiagrams)
    names.Add(p.Person.Name);
  else
    names.Add(namecounter.ToString());
  namecounter++;
}

#region firstresult
if (SessionHandle.ShowFirstResult)
{
  chart1.Series.Add(new Series("FirstResult"));
  List<double> firstresult = new List<double>();
  foreach (var p in Model.Participants)
  {
    var resultSummary = from r in Model.ResultSummary
                        where r.userID == p.ParentID && Model
                            .Modules
                            .Where(x => x.hasResult)
                            .ToList()
                            .Exists(x => x.ID == r.moduleID)
                        select r;
    firstresult.Add(resultSummary.Sum(x => x.scorePercent)
                    / Model.Modules.Where(x => x.hasResult).Count());
  }

  chart1.Series["FirstResult"].Points.DataBindXY(names, firstresult);
  // Set radar chart type
  chart1.Series["FirstResult"].ChartType = SeriesChartType.Radar;

  // Set radar chart style (Area, Line or Marker)
  chart1.Series["FirstResult"]["RadarDrawingStyle"] = "Marker";
  chart1.Series["FirstResult"].Color = Color.DarkBlue;
  chart1.Series["FirstResult"].MarkerImage
      = Url.Content("~/Content/Images/firstresult.png");

  // Set circular area drawing style (Circle or Polygon)
  chart1.Series["FirstResult"]["AreaDrawingStyle"] = "Circle";

  // Set labels style (Auto, Horizontal, Circular or Radial)
  chart1.Series["FirstResult"]["CircularLabelsStyle"] = "Horizontal";
}
#endregion

2
你能贴出生成图表的代码和图表定义吗? - Mitchel Sellers
1
希望这可以帮到您:http://stackoverflow.com/questions/5013008/how-can-i-draw-a-radar-chart-using-microsoft-chart-control-for-net-framework-3 - c0D3l0g1c
试试这个:[1]: http://stackoverflow.com/questions/5013008/how-can-i-draw-a-radar-chart-using-microsoft-chart-control-for-net-framework-3%5D%5B1%5D希望对你有所帮助 :) - tony b
2
当我们在Mono中编译时,我们使用MS asp.net图表,但我们首选的图表解决方案无法编译。 不幸的是,结果很丑陋,我们无法使它们与我们使用过的任何其他图表解决方案一样一致或吸引人。 如果外观很重要,我建议尝试使用highcharts、d3.js或dundas。 - cazlab
cazlab 在这里是正确的 - .NET 图表还有很多需要改进的地方。如果你有的话,可以考虑使用 HighCharts 或者 Telerik。 - Wjdavis5
我认为MS Charts和Dundas基本上是一样的东西,主要是因为这个:http://blogs.msdn.com/b/alexgor/archive/2008/11/07/microsoft-chart-control-vs-dundas-chart-control.aspx 也许Dundas会更加更新,因为他们可能能够比MS更快地发布更新。尽管他们的合作可能只是针对Dundas图表的特定版本,而不是后来的版本。 必须检查HighCharts并看看他们提供了什么,谢谢。 - Markus
1个回答

2

WPF的坐标系是以像素中心为基准,而不是以角落为基准的,因此请将所有坐标值加0.5。下面这个XAML可以帮助理解:

<Canvas>
<Line X1="50" Y1="50" X2="100" Y2="50" Stroke="Black" StrokeThickness="1" />
<Line X1="50" Y1="50" X2="50" Y2="100" Stroke="Black" StrokeThickness="1" />
<Line X1="50" Y1="50" X2="100" Y2="100" Stroke="Black" StrokeThickness="1" />
</Canvas>

下面是正常渲染的效果,以及在每个坐标上应用0.5像素偏移后的效果:

Xaml lines


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接