2010-11-29 55 views
0

は私が持っていることは、このようになります。設定ファイルである:ZedGraph積み重ねバーが

Item|Size|Directory|Data 
A|12|D_01|11/28/10 
C|13|D_01|11/28/10 
B|12|D_01|11/28/10 
Back|122|D_02|11/28/10 
Body|112|D_02|11/28/10 
A|12|D_01|11/29/10 
C|13|D_01|11/29/10 
B|12|D_01|11/29/10 
Back|122|D_01|11/29/10 
Body|112|D_01|11/29/10 
Arm|20|D_01|11/29/10 

マイx軸は日付で、私はとの問題がない、と私は持っている場合私のYIを構成する静的なインスタンス数は問題ありませんが、各ディレクトリの各項目のポイントを自動的に作成する1つの積み上げ棒グラフを作成するにはどうすればよいですか?

スタックバー1はA.B.C、Body、Back、Armであり、例29はArm項目を追加したものです。したがって、28番のバー1は5ポイント、29番のスタックバー2は6ポイントを表示します。

バーを適切に表示する方法以外は何も助けが必要ではありません。

答えて

3

alt text

それは2つだけバーが(2つの日付のそれぞれについて、1)必要とされていると仮定し、ディレクトリはそのデータの表示にどのような影響を与えるか疑問に明確ではなかった、ここでの例です。日付軸をフォーマットしてnullデータを処理するには、AxisType.Date = DateAsOrdinalを使用し、データがnullの場合は0を、AxisType.Date = Dateを使用する場合は0の値を追加する2つの方法があります。データがnullの日付。 DateAsOrdinalは、ヌルデータがある場合、間違った日付にデータを適用しているように見えます。これはバグのようであるか、少なくとも直感的ではありません。この例では、日付軸の追加の書式設定が必要なAxisType.Date = Dateアプローチを使用しています。

 using ZedGraph; 

    ... 

    GraphPane myPane = zg1.GraphPane; // zg1 is a ZedGraph control. 

    // Set the title and axis label 
    myPane.Title.Text = "Stacked Bar, ZedGraph ver 5.1.5.28844"; 
    myPane.YAxis.Title.Text = "Value"; 

    // Create two dates. 
    XDate date1 = new XDate(2010, 11, 28); // First date. 
    XDate date2 = new XDate(2010, 11, 29); // Second date. 

    // Create data lists and bars for A, B, C, Back, Body and Arm (6 total). 

    ZedGraph.PointPairList listA = new ZedGraph.PointPairList(); 
    listA.Add(date1, 12); 
    listA.Add(date2, 13); 

    BarItem barA = zg1.GraphPane.AddBar("A", listA, Color.Red); 
    barA.Bar.Fill = new Fill(Color.Red); 

    ZedGraph.PointPairList listB = new ZedGraph.PointPairList(); 
    listB.Add(date1, 12); 
    listB.Add(date2, 12); 

    BarItem barB = zg1.GraphPane.AddBar("B", listB, Color.Blue); 
    barB.Bar.Fill = new Fill(Color.Blue); 

    ZedGraph.PointPairList listC = new ZedGraph.PointPairList(); 
    listC.Add(date1, 13); 
    listC.Add(date2, 12); 

    BarItem barC = zg1.GraphPane.AddBar("C", listC, Color.Green); 
    barC.Bar.Fill = new Fill(Color.Green); 

    ZedGraph.PointPairList listBack = new ZedGraph.PointPairList(); 
    listBack.Add(date1, 122); 
    listBack.Add(date2, 122); 
    BarItem barBack = zg1.GraphPane.AddBar("Back", listBack, Color.Red); 
    barBack.Bar.Fill = new Fill(Color.Red, Color.White, Color.Red); 

    ZedGraph.PointPairList listBody = new ZedGraph.PointPairList(); 
    listBody.Add(date1, 112); 
    listBody.Add(date2, 112); 
    BarItem barBody = zg1.GraphPane.AddBar("Body", listBody, Color.Blue); 
    barBody.Bar.Fill = new Fill(Color.Blue, Color.White, Color.Blue); 

    ZedGraph.PointPairList listArm = new ZedGraph.PointPairList(); 
    // listArm.Add(date1, 0); // Not needed for XAxis.Type = AxisType.Date. 
    listArm.Add(date2, 20); 
    BarItem barArm = zg1.GraphPane.AddBar("Arm", listArm, Color.Green); 
    barArm.Bar.Fill = new Fill(Color.Green, Color.White, Color.Green); 

    // Done creating bars. 

    myPane.BarSettings.Type = BarType.Stack; // stacks bar rather than side-by-side. 
    myPane.BarSettings.ClusterScaleWidth = 1; // Widen bars somewhat. 

    // Format the X axis. 
    XAxis x = myPane.XAxis; 

    x.Type = AxisType.Date; 
    x.Scale.Format = "yyyy-mm-dd"; 
    x.Scale.BaseTic = date1; // Puts the first major tic at the first date. 
    x.Scale.Min = date1 - 0.5; // Manually set the left of the graph window just prior to the first date. 
    x.Scale.Max = date2 + 0.5; // Manually set the right of the graph window just after the last date. 

    // Setting the step size... 
    // Isn't required if AxisType.Date is DateAsOrdinal. 
    // Docs says that MinorStep is ignore for AxisType.Date but seems inaccurate. 
    // Step value of 24 was derived by trial and error. Seems it should be 1 if Unit = DateUnit.Day. 
    // A value of 24 implies that the Units are acting like DateUnit.Hour. 
    x.Scale.MajorUnit = DateUnit.Day; 
    x.Scale.MinorUnit = DateUnit.Day; 
    x.Scale.MinorStep = 24; 
    x.Scale.MajorStep = 24; 

    zg1.AxisChange(); // Update graph. 
関連する問題