2015-10-19 1 views
2

Bon après-midi. J'essaie de faire des recherches et je n'ai pas encore trouvé quelqu'un qui en ait un exemple, je ne demande normalement pas d'aide, je me débrouille, mais celui-ci me tue! J'essaie de créer dynamiquement un graphique de zone empilé, je peux déjà créer un graphique de zone dynamique, mais je ne peux pas pour la vie de moi comprendre comment obtenir un graphique de zone empilé pour empiler la série. J'ai fait quelque chose de similaire en Excel et je peux l'obtenir très bien, mais ce n'est pas dynamique. J'ai des données qui sont disposées comme ceci: How the data is laid outEssayer de créer une carte dynamique Dundas Stackedarea

Et voilà comment je veux le tableau à regarder: How I want the chart to look

Comment puis-je associer les données à des catégories ou quoi que ce soit que je dois faire ? J'ai les données dans un tableau mais je n'arrive pas à comprendre comment obtenir le tableau à empiler. Quelqu'un peut-il aider? Si vous avez besoin de plus d'informations s'il vous plaît demander, je sais que je ne comprends pas mon code, principalement parce qu'il est très laid et étiré, mais peut essayer de le compresser un peu et de simplifier si quelqu'un a besoin de cela.

Mon code est ci-dessous (peut-être cela l'aide, même si elle est laide)

For tmpatozgroup = 1 To 1 
      Dim chart1 As New Chart() 
      chart1.ID = "chrt-" & tmpatozgroup & "-" & atozser 
      Dim seriesperrow As Integer 

      Dim chartArea1 As New ChartArea() 
      chart1.Height = 340 
      chart1.Palette = ChartColorPalette.Dundas 
      chart1.BackColor = System.Drawing.Color.LightGray 
      chart1.BorderSkin.SkinStyle = BorderSkinStyle.Emboss 
      chart1.BorderLineColor = System.Drawing.Color.Gray 
      chart1.BorderLineStyle = ChartDashStyle.Solid 
      chart1.BorderLineWidth = 4 
      ' Set the ChartArea properties 
      chartArea1.Name = "Default" 
      chartArea1.BackColor = System.Drawing.Color.LightGray 
      chartArea1.AxisX.LabelsAutoFit = False 
      chartArea1.AxisX.LabelStyle.FontAngle = -45 
      chartArea1.Area3DStyle.Enable3D = True 
      chart1.ChartAreas.Add(chartArea1) 
      Dim series1 As New Series() 

      series1.Name = tblGrouping1(tmpatozgroup, 0) 
      chart1.Series.Add(series1) 
      chart1.Legends.Clear() 
      If Not IsNothing(tblGrouping1(tmpatozgroup, 0)) Then 
       For tmpatozgroup2 = 1 To 9 

        Dim legend1 As New Legend() 
        Dim sername As String 
        Dim servalues() As Double 
        Dim serformat As String 
        Dim chrtSeriesCnt As Integer 

          sername = tblGrouping1(0, tmpatozgroup2) 
          'need to tear the current row out of the array and place in tmpseries 
          Dim tmpatozcnt As Integer 
          For tmpatozcnt = 1 To 999 
           If IsNothing(tblGrouping1(0, tmpatozcnt)) Then atozseries = tmpatozcnt : Exit For 
           tmpSeries(tmpatozcnt) = tblGrouping1(tmpatozgroup2, tmpatozcnt) 
           chrtSeriesLabels(tmpatozcnt) = tblGrouping1(0, tmpatozcnt) 
          Next 
          servalues = tmpSeries 
          serformat = chrtSeriesForm1 


        chart1.Width = 1000 
        seriesperrow = 1 

        'chart1.AlignDataPointsByAxisLabel() 

        series1.Type = SeriesChartType.StackedColumn 
        series1("StackedGroupName") = "'" & tblGrouping1(tmpatozgroup, 0) & "'" 
        If Not IsNothing(tblGrouping1(tmpatozgroup, 0)) Then 

         For Each ser As Series In chart1.Series 

          For i2 As Integer = 1 To atozseries - 1 

           ser.Points.AddXY(chrtSeriesLabels(i2), servalues(i2 - 1)) 
           ser.Points(i2 - 1).BorderColor = Drawing.Color.FromArgb(Split(sercolor(i2), "|")(0), Split(sercolor(i2), "|")(1), Split(sercolor(i2), "|")(2)) 
           ser.Points(i2 - 1).Color = Drawing.Color.FromArgb(Split(sercolor(i2), "|")(0), Split(sercolor(i2), "|")(1), Split(sercolor(i2), "|")(2)) 
           'ser.XAxisType = AxisType.Secondary 

           Dim tooltipformat As String 
           If serformat = "Currency" Then serformat = "$#,##0.00" : tooltipformat = "{$#,#.00}" 
           If serformat = "###,###,##0.00" Then serformat = "#,##0.00" : tooltipformat = "{#,#}" 
           If serformat = "###,###,##0" Then serformat = "0" : tooltipformat = "{#,#}" 
           ser.Points(i2 - 1).ToolTip = ser.Points(i2 - 1).AxisLabel & " : #VALY" & tooltipformat 

          Next 
          chart1.ChartAreas(0).AxisX.Interval = 1 
          chart1.ChartAreas(0).AxisX.LabelStyle.Interval = 1 
          chart1.ChartAreas(0).AxisX.Title = "test" 'chrtXAxisName 
          chart1.ChartAreas(0).AxisY.Title = sername 
          chart1.ChartAreas(0).AxisY.LabelStyle.Format = serformat 
          chart1.Palette = ChartColorPalette.Dundas 
         Next 

        End If 
       Next 
       If seriesonrow = seriesperrow Or seriesonrow = 0 Then 
        tr = New TableRow 
        tr.CssClass = "charts column" 
        tr.Style("display") = "none" 

       End If 
       td = New TableCell 
       td.HorizontalAlign = HorizontalAlign.Center 
       td.ColumnSpan = 6/seriesperrow 
       td.Controls.Add(chart1) 
       tr.Cells.Add(td) 
       tblReport.Rows.Add(tr) 
       chart1 = Nothing 
      End If 
     Next 

Merci un bouquet à l'avance! plus tard

+0

Est-ce que c'est pour WinForms? WebForms? WPF? – jsanalytics

+0

Désolé, c'est dans aspx, VB.net actuellement, dundas.charting.webcontrol est l'espace de noms, je devine webforms. –

+0

J'allais suggérer 'System.Web.UI.DataVisualization.Charting' qui a un type de graphique' StackedArea', mais ça sonne comme si vous utilisiez déjà quelque chose d'autre. – jsanalytics

Répondre

0

Voici un exemple:

<asp:Chart ID="Chart1" runat="server" Width="600px"> 
     <Series> 
      <asp:Series Name="Series1" ChartType="StackedArea"> 
       <Points> 
        <asp:DataPoint XValue="1" YValues="10" /> 
        <asp:DataPoint XValue="2" YValues="20" /> 
        <asp:DataPoint XValue="3" YValues="30" /> 
        <asp:DataPoint XValue="4" YValues="15" /> 
       </Points> 
      </asp:Series> 
      <asp:Series ChartArea="ChartArea1" ChartType="StackedArea" Name="Series2"> 
       <Points> 
        <asp:DataPoint XValue="1" YValues="20" /> 
        <asp:DataPoint XValue="2" YValues="40" /> 
        <asp:DataPoint XValue="3" YValues="60" /> 
        <asp:DataPoint XValue="4" YValues="45" /> 
       </Points> 
      </asp:Series> 
     </Series> 
     <ChartAreas> 
      <asp:ChartArea Name="ChartArea1"> 
       <AxisY> 
        <MajorGrid LineColor="DarkGray" LineDashStyle="Dot" /> 
       </AxisY> 
       <AxisX> 
        <MajorGrid LineColor="DarkGray" LineDashStyle="Dot" /> 
       </AxisX> 
      </asp:ChartArea> 
     </ChartAreas> 
    </asp:Chart> 

enter image description here

EDIT: En utilisant le code-behind:

protected void Page_Load(object sender, EventArgs e) 
    { 
     Chart chart1 = new Chart(); 

     ChartArea area1 = new ChartArea("Area1"); 

     Series series1 = new Series(); 
     series1.ChartType = SeriesChartType.StackedArea; 
     series1.Points.Add(new DataPoint { XValue = 1, YValues = new double[] { 10 } }); 
     series1.Points.Add(new DataPoint { XValue = 2, YValues = new double[] { 20 } }); 
     series1.Points.Add(new DataPoint { XValue = 3, YValues = new double[] { 30 } }); 
     series1.Points.Add(new DataPoint { XValue = 4, YValues = new double[] { 15 } }); 
     series1.ChartArea = "Area1"; 

     Series series2 = new Series(); 
     series2.ChartType = SeriesChartType.StackedArea; 
     series2.Points.Add(new DataPoint { XValue = 1, YValues = new double[] { 20 } }); 
     series2.Points.Add(new DataPoint { XValue = 2, YValues = new double[] { 40 } }); 
     series2.Points.Add(new DataPoint { XValue = 3, YValues = new double[] { 60 } }); 
     series2.Points.Add(new DataPoint { XValue = 4, YValues = new double[] { 45 } }); 
     series2.ChartArea = "Area1"; 

     chart1.ChartAreas.Add(area1); 
     chart1.Series.Add(series1); 
     chart1.Series.Add(series2); 

     Controls.Add(chart1); 
    } 

EDIT 2: l'ajout d'une légende:

protected void Page_Load(object sender, EventArgs e) 
    { 
     Chart chart1 = new Chart(); 

     ChartArea area1 = new ChartArea("Area1"); 

     Legend legend1 = new Legend("Legend1"); 
     legend1.Docking = Docking.Top; 
     legend1.Alignment = System.Drawing.StringAlignment.Center; 

     Series series1 = new Series("Bought"); 
     series1.ChartType = SeriesChartType.StackedArea; 
     series1.Points.Add(new DataPoint { XValue = 1, YValues = new double[] { 10 } }); 
     series1.Points.Add(new DataPoint { XValue = 2, YValues = new double[] { 20 } }); 
     series1.Points.Add(new DataPoint { XValue = 3, YValues = new double[] { 30 } }); 
     series1.Points.Add(new DataPoint { XValue = 4, YValues = new double[] { 15 } }); 
     series1.ChartArea = "Area1"; 
     series1.Legend = "Legend1"; 

     Series series2 = new Series("Sold"); 
     series2.ChartType = SeriesChartType.StackedArea; 
     series2.Points.Add(new DataPoint { XValue = 1, YValues = new double[] { 20 } }); 
     series2.Points.Add(new DataPoint { XValue = 2, YValues = new double[] { 40 } }); 
     series2.Points.Add(new DataPoint { XValue = 3, YValues = new double[] { 60 } }); 
     series2.Points.Add(new DataPoint { XValue = 4, YValues = new double[] { 45 } }); 
     series2.ChartArea = "Area1"; 
     series2.Legend = "Legend1"; 

     chart1.ChartAreas.Add(area1); 
     chart1.Legends.Add(legend1); 
     chart1.Series.Add(series1); 
     chart1.Series.Add(series2); 

     Controls.Add(chart1); 
    } 
+0

Merci beaucoup pour cela. Auriez-vous un exemple dynamique? Je vois comment cela fonctionne ici mais si je voulais le faire dynamiquement dans le code et ensuite l'ajouter à la page, avez-vous du code pour ça? J'ai ajouté l'espace de noms mais je n'arrive pas à comprendre comment créer un graphique avec. –

+0

Je n'en ai pas en ce moment mais ça ressemble beaucoup à ce que vous avez déjà fait dans votre message. – jsanalytics

+0

J'ai ajouté du code-behind, s'il vous plaît jeter un oeil. – jsanalytics