关于这个条形码的一些问题

时间:2016-03-11 08:06:46

标签: c# charts

下面是使用System.Windows.Forms.DataVisualization.Charting从条形码获取的条形图的代码。问题是我不理解它的几个部分,我不知道在哪里可以找到一个好的资源来了解使用所有图表内容的所有细节。是不是有一些第三方书?通常情况下,Microsoft提供了如何使用各种类和成员的示例代码,但是当涉及到图表时,除了Web上的一些随机和无法解释的第三方示例之外,我找不到任何其他内容。

无论如何,下面是代码,它产生的图形跟随它。我有以下问题......

  1. 为什么X轴上的1左边有两个条,右边有两个?是什么控制了它,如何让它们从0开始?

  2. 什么控制了条的宽度?

  3. 如何沿X轴(0,1和2)删除所有标签?

  4. 关于我所了解的所有结果我所看到的是为什么有4个柱子以及为什么它们的Y值是2,1,7和5。

    public partial class Form1 : Form
    {
      public Form1()
      {
         InitializeComponent();
    
         System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
         System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
         System.Windows.Forms.DataVisualization.Charting.Chart chart1 = new System.Windows.Forms.DataVisualization.Charting.Chart();
    
         chartArea1.Name = "ChartArea1";
         chart1.ChartAreas.Add(chartArea1);
         chart1.Location = new System.Drawing.Point(0, 0);
         chart1.Name = "chart1";
         series1.ChartArea = "ChartArea1";
         series1.Name = "Series1";
         chart1.Series.Add(series1);
         chart1.Size = new System.Drawing.Size(500, 400);
         chart1.TabIndex = 0;
         chart1.Text = "chart1";
         this.Controls.Add(chart1);
    
         string[] seriesArray = { "Cat", "Dog", "Bird", "Monkey" };
         int[] pointsArray = { 2, 1, 7, 5 };
         for (int i = 0; i < seriesArray.Length; i++)
         {
            Series series = chart1.Series.Add(seriesArray[i]);
            series.Points.Add(pointsArray[i]);
         }
      }
    }
    

    enter image description here

2 个答案:

答案 0 :(得分:0)

我认为这段代码会达到您的预期。您为每只动物创建了一个新系列,因此您获得了包含一个数据点的四个系列,并且该图表尝试将所有值分组到数据点“1”。

string[] seriesArray = { "Cat", "Dog", "Bird", "Monkey" };
Series series = chart1.Series.Add("Animals");
int[] pointsArray = { 2, 1, 7, 5 };
for (int i = 0; i < seriesArray.Length; i++)
{
    DataPoint point = series.Points.Add(pointsArray[i]);
    point.AxisLabel = seriesArray[i];
}

答案 1 :(得分:0)

enter image description here

  1. 添加的所有数据点都没有有效的x值,因此默认情况下会添加&#39;索引&#39;并放置在1。您可以通过添加您选择的有效x值来更改它;为此使用AddXY方法。 (推荐的)。所有数据点都位于同一位置,因此它们被分组以避免重叠各个系列
  2. 但请注意,只要每个DataPoint中只有一个 Series,即使您添加了1,这些点仍然会显示为series.Points.AddXY(0, pointsArray[i]); // <- this creates a valid x-value of you choosing 有效的数字x值:

     chart1.Series[0].Points.AddXY(1, 0);
    

    要将它们移动到正确的位置,您需要在至少一个系列中添加至少一个点,即使它只是一个假人:

    DataPoint

    进一步注意,您无法真正将列组齐平移动到y轴,因为它始终希望以某些Minimum为中心。因此,您必须计算组的总宽度,然后使用其中的一半作为要显示的ChartArea x值;但这将是一个相当复杂的计算,涉及chartArea1.AxisX.Minimum = -0.25; 百分比等。不推荐..你可能没有一些试验和错误..:

    PixelPointWidth
    1. 使用此特殊字符串属性foreach (Series s in chart1.Series) s["PixelPointWidth"] = "100";来控制条形或列宽:

      chartArea1.AxisX.LabelStyle.Enabled = false;

    2. 要关闭轴标签,请使用:

      Charts

    3. 最后说明:既然你提到你是{{1}}的新手,那就让我说更多时候你只会有一个系列多点而不是只有几个系列你创建了一点。但是现在它很好,每个类别都有一个系列,你的类别就是动物。

      但想象一些其他动物统计数据,如重量,价格,年龄,速度等。

      现在您可能希望将这些用作类别,并为每只动物添加一个数据点。