我试图创建一个从以下数据表中的图表: ASP.NET图表 - 动态图表错误地建
在我的aspx页面,我有一个简单的图表,代码如下:
<asp:Chart ID="chartTipo1" runat="server" BackColor="Transparent" Palette="Pastel" TextAntiAliasingQuality="High" Width="1400px" Height="500px" Visible="false">
<Series></Series>
<ChartAreas>
<asp:ChartArea Name="ChartArea1">
<AxisX IsStartedFromZero="True" LineColor="LightGray" LabelAutoFitStyle="LabelsAngleStep30" IsLabelAutoFit="true">
<MajorGrid LineColor="White" />
</AxisX>
<AxisY LineColor="LightGray">
<MajorGrid LineColor="LightGray" />
</AxisY>
</asp:ChartArea>
</ChartAreas>
<Legends>
<asp:Legend BorderWidth="1"></asp:Legend>
</Legends>
</asp:Chart>
和代码隐藏:
//first add your series
foreach (DataRow row in dtTipos.DefaultView.ToTable(true, new string[] { "Type"}).Rows)
{
Series series = new Series();
series.Name = (string)row["Type"];
series.ChartType = SeriesChartType.StackedColumn;
chartTipo1.Series.Add(series);
}
// then add your points;
foreach (DataRow row in dtTipos.Rows)
chartTipo1.Series[(string)row["Type"]].Points.AddXY(row["Location"], new object[] { row["Total"] });
double pInicial = 0.5;
for (int i = 0; i < listaLocais.Count; i++)
{
chartTipo1.ChartAreas[0].AxisX.CustomLabels.Add(pInicial, pInicial + 1, listaLocais[i]);
chartTipo1.ChartAreas[0].AxisX.IsStartedFromZero = true;
pInicial = pInicial + 1;
}
我创建了一系列针对每个不同的类型,然后加点。之后,我为每列添加一个标签(我应该有6个不同的列,从6个不同的位置)。
正如你可以看到,图表错误的,因其位置“Azeitão”只有相关的一个类型,而不是更多的图表中显示。
我在做什么错?
这意味着您正在以错误的方式构建您的系列文件....首先构建您的位置坐标轴,然后仅为该位置添加客户端(您应该先检查客户端是否属于该位置,然后再将其添加到系列中) – Hackerman
那么我的系列应该是类型还是位置? –
如果某个特定的'Location'没有特定的'Type',则必须添加那个位置类型对,其'Total'值为0(零)。然后它会按照您的期望工作。对于这种特定类型的堆栈柱状图,您不能简单地将数据表转换为“丢失”数据。图表本身并不“足够聪明”,无法为你全部找到答案。你必须对你的数据进行处理,并将结构和一致性提供给图表。 – jsanalytics