我正在构建一个Asp.net Stacked Column图表。
以下是它的外观:
以下是它的外观:
忽略图表上的数字,但是看看X轴 - 为什么当它们没有出现在数据中时它会给我1148,1153,1163。
这是我的数据:
以下是代码:
Dim chart As New Chart
chart.ID = "Chart1"
Dim chartareas As New ChartArea
chart.ChartAreas.Add(chartareas)
chart.DataBindCrossTable(DtFinalRecords.DefaultView, "OutcomeScore", "TermID", "RecordsPerGroup", "Label=RecordsPerGroup")
chart.ChartAreas(0).AxisX.MajorGrid.Enabled = False
chart.ChartAreas(0).AxisY.MajorGrid.Enabled = False
For Each cs As Series In chart.Series
cs.ChartType = SeriesChartType.StackedColumn
Next
pnlcharts.Controls.Add(chart)
任何帮助将不胜感激。谢谢!
答案 0 :(得分:1)
DataBindCrossTable
能够以最少的编码工作完成最好的工作。但是,如果您对默认行为不满意,则必须明确自定义它。在您的特定情况下,您希望为数据点分配自定义标签:
protected void Page_Load(object sender, EventArgs e)
{
Chart1.Palette = ChartColorPalette.None;
Chart1.PaletteCustomColors = new Color[] { ColorTranslator.FromHtml("#DF5B59"), ColorTranslator.FromHtml("#E0D773 "), ColorTranslator.FromHtml("#8AAC53"), ColorTranslator.FromHtml("#6A843F") };
Chart1.ChartAreas[0].AxisY.MajorGrid.Enabled = false;
Chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
Chart1.ChartAreas[0].AxisX.Interval = 1;
var rows = from row in dt.AsEnumerable() select row.Field<int>("OutcomeScore");
Chart1.Series.Clear();
foreach (int i in rows.Distinct())
Chart1.Series.Add(new Series { Name = i.ToString(), ChartType = SeriesChartType.StackedColumn });
foreach (DataRow dr in dt.Rows)
{
DataPoint dp = new DataPoint();
dp.AxisLabel = dr["TermID"].ToString();
dp.Label = dr["RecordsPerGroup"].ToString();
dp.XValue = (int)dr["TermID"];
dp.YValues[0] = (int)dr["RecordsPerGroup"];
string name = dr["OutcomeScore"].ToString();
Chart1.Series[name].Points.Add(dp);
}
}