1

次のようなテーブルが与えられました。

 Date  |             1/1/13             |             1/8/13             | ...
       |  Group1  |  Group2  |  Group3  |  Group1  |  Group2  |  Group3  | ...
Type1  |     1    |     2    |     3    |     5    |     6    |     7    | ...
Type2  |     6    |     5    |     4    |     4    |     8    |     0    | ...
Type3  |     7    |     8    |     9    |     9    |     3    |     2    | ...

私の仕事は、MS Chart を使用してこのデータを表すグラフを作成することです。表は、表示された日付で終わる週に特定のグループによって完了されたタスク (Type1/2/3) を表します。私の考えは、最初に日付でグループ化され、次にグループでグループ化された棒グラフを作成することです。x 軸を上記のテーブル ヘッダーのようにしたいと思います。

二次軸のトピックを調べましたが、見つけることができるのは二次 Y 軸だけです。これは、各 y 軸で異なる系列を表しているため、私が望むものとは異なります。単一の系列を表すことができるようにしたいのですが、x 軸のラベルが 2 つあります。これは可能ですか?データポイントは2つの値しか持てないので、そうであるとは確信していません

var chart = new Chart();
chart.ChartAreas.Add(new ChartArea());
var series= new Series("series");
series.ChartType = SeriesChartType.Column;
series.XAxisType = AxisType.Primary;
//Magic secondary axis code    

//Add data points

chart.Series.Add(series);

参考までに、私が使用する予定のクラスを次に示します。

クラス

public class ChartGroup
{
    public string GroupName
    public int Type1
    public int Type2
    public int Type3
}
public class ChartDate
{
    public DateTime Date
    public List<ChartGroup> GroupData
}
public class Chart
{
    public List<ChartDate> ChartData
}

EDIT:タイプごとにシリーズを作成し、x軸でグラフ化することで、このようなチャートを作成できると思いますDate. これが唯一の方法ですか?

4

1 に答える 1

4

セカンダリ X 軸を持つことができます。以下に例を示します (実際にやりたいことではありませんが、セカンダリ X 軸の使用方法を示す必要があります)。

DateTime firstDay = new DateTime(2013, 01, 01);
DateTime secondDay = new DateTime(2013, 01, 02);

int[] group1 = new int[6] { 1, 6, 7, 5, 4, 9 };
int[] group2 = new int[6] { 2, 5, 8, 6, 8, 3 };

DateTime[] days = new DateTime[6] { firstDay, firstDay, firstDay, secondDay, secondDay, secondDay};

chart.Series.Add(new Series("Group 1"));

chart.Series[0].Points.DataBindXY(days, group1);
chart.Series[0].ChartType = SeriesChartType.Column;

chart.Series.Add(new Series("Group 2"));
chart.Series[1].Points.DataBindXY(days, group2);
chart.Series[1].ChartType = SeriesChartType.Column;

double start = chart.Series[0].Points[0].XValue;
double end = chart.Series[0].Points[chart.Series[0].Points.Count -1].XValue;
double half = (start + end) / 2;

chart.ChartAreas[0].AxisX2.Enabled = AxisEnabled.True;

chart.ChartAreas[0].AxisX2.CustomLabels.Add(start, end, "General Label", 0, LabelMarkStyle.Box);
chart.ChartAreas[0].AxisX2.CustomLabels.Add(start, half, "Day 1", 1, LabelMarkStyle.LineSideMark);
chart.ChartAreas[0].AxisX2.CustomLabels.Add(half, end, "Day 2", 1, LabelMarkStyle.LineSideMark);
于 2013-06-24T18:03:16.937 に答える