1
このようなMS Excelグループ化棒グラフで作成できます。 WinFormsチャートコントロール付きグループ化棒グラフ
WinForms Chart Controlを介して同じChartを作成する必要があります。
私はこのコードを試していますが、MS Excelのような正しいチャートを作成するためには、より洗練されたソリューションが必要です。
グループ化された棒グラフを作成するには、コードを修正してください。 Googleといくつかの実験を使用することにより (そして、この偉大なマイクロソフトの例https://code.msdn.microsoft.com/mschart/Release/ProjectReleases.aspx?ReleaseId=4418を助けていません)
のDataSource
DataTable dtExc = new DataTable();
// Create columns
dtExc.Columns.Add((new DataColumn("StoodType", typeof(int))).Caption = "Stood");
dtExc.Columns.Add((new DataColumn("TotalMinutes", typeof(double))).Caption = "Time");
foreach (var exDataitem in allDataExc)
{
DataRow drToAdd = dtExc.NewRow();
drToAdd[0] = exDataitem.StoodTypeFullName;
drToAdd[1] = exDataitem.TotalMinutes;
dtExc.Rows.Add(drToAdd);
}
チャート
public Chart GenerateExcChart(DataTable dtChartDataSource, int width, int height, string bgColor, SeriesChartType seriesChartType,
string axisXTitle, string axisYTitle)
{
Chart chart = new Chart()
{
Width = width,
Height = height
};
chart.Legends.Add(new Legend() { Name = "Legend" });
chart.Legends[0].Docking = Docking.Bottom;
ChartArea chartArea = new ChartArea() { Name = "ChartArea" };
//Remove X-axis grid lines
chartArea.AxisX.MajorGrid.LineWidth = 0;
chartArea.AxisX.Title = axisXTitle;
chartArea.AxisX.IntervalAutoMode = IntervalAutoMode.VariableCount;
chartArea.AxisX.IntervalType = DateTimeIntervalType.Number;
//Remove Y-axis grid lines
chartArea.AxisY.MajorGrid.LineWidth = 0;
chartArea.AxisY.Interval = 1;
chartArea.AxisY.Title = axisYTitle;
//Chart Area Back Color
chartArea.BackColor = Color.FromName(bgColor);
chart.ChartAreas.Add(chartArea);
chart.Palette = ChartColorPalette.BrightPastel;
string series = string.Empty;
//create series and add data points to the series
if (dtChartDataSource != null)
{
foreach (DataColumn dc in dtChartDataSource.Columns)
{
//a series to the chart
if (chart.Series.FindByName(dc.ColumnName) == null)
{
series = dc.ColumnName;
chart.Series.Add(series);
chart.Series[series].ChartType = seriesChartType;
}
var rowIndex = 0;
//Add data points to the series
foreach (DataRow dr in dtChartDataSource.Rows)
{
double dataPoint = 0;
double.TryParse(dr[dc.ColumnName].ToString(), out dataPoint);
var objDataPoint = new DataPoint();
objDataPoint.YValues = new double[] { dataPoint };
objDataPoint.XValue = rowIndex + 1;
objDataPoint.AxisLabel = rowIndex.ToString();
if (dataPoint == 0)
{
objDataPoint.IsEmpty = true;
}
chart.Series[series].Points.Add(objDataPoint);
rowIndex++;
}
}
}
return chart;
}
あなたの実際の質問は何ですか?なぜもっと洗練されたソリューションが必要なのですか? –
@RomanoZumbé棒グラフ用のコードでは、必要なグラフが作成されません。 –
どういう意味ですか?現在のところ、これは "なぜこのコードは機能していないのですか?"です。質問 –