Je construis un tableau pour montrer des articles en volume par catégorie. Jusqu'à présent, j'ai subi de montrer des articles en volume car il s'agit d'un graphique X / Y simple, mais j'aimerais montrer à Y2 et je sais que les commandes de graphique MS ont une axisie intégrée2 toutefois lorsque j'essaie quelque chose avec cela. tout funky.
Voici ce que je cherche (en ASCII Art): P>
item1 |[][][][][].............| cat1 item2 |[][]...................| cat2 item3 |[][....................| cat1 item4 |[][][][][][][][........| cat1 |_______________________| 0 1 2 3 4 5
5 Réponses :
Réponse courte Premièrement: Selon des exemples MS, il n'y a aucune autre façon de le faire, mais juste un truc de contournement: tracer votre série sur une deuxième place Chartarea correspond exactement à votre position de votre région existante (en effectuant une copie de votre série) ayant un axe X / Y primaire invisible et un axe Y visible secondaire (Axisy2). Et définir le Chartarea et les backcolors de la série copiée à transparent. (Ceci peut être appliqué à l'axe X secondaire en cas de graphiques de colonne plutôt que les barres)
//Suppose you already have a ChartArea with the series plotted and the left Y Axis //Add a fake Area where the only appearent thing is your secondary Y Axis ChartArea area1 = chart.ChartAreas.Add("ChartAreaCopy_" + series.Name); area1.BackColor = Color.Transparent; area1.BorderColor = Color.Transparent; area1.Position.FromRectangleF(area.Position.ToRectangleF()); area1.InnerPlotPosition.FromRectangleF(area.InnerPlotPosition.ToRectangleF()); area1.AxisX.MajorGrid.Enabled = false; area1.AxisX.MajorTickMark.Enabled = false; area1.AxisX.LabelStyle.Enabled = false; area1.AxisY.MajorGrid.Enabled = false; area1.AxisY.MajorTickMark.Enabled = false; area1.AxisY.LabelStyle.Enabled = false; area1.AxisY2.Enabled = AxisEnabled.True; area1.AxisY2.LabelStyle.Enabled = true; // Create a copy of specified series, and change Y Values to categories Series seriesCopy = chart.Series.Add(series.Name + "_Copy"); seriesCopy.ChartType = series.ChartType; foreach(DataPoint point in series.Points) { double category = getYourItemCategory(point.XValue); seriesCopy.Points.AddXY(point.XValue, category); } // Hide copied series seriesCopy.IsVisibleInLegend = false; seriesCopy.Color = Color.Transparent; seriesCopy.BorderColor = Color.Transparent; //Drop it in the chart to make the area show (only the AxisY2 should appear) seriesCopy.ChartArea = area1.Name;
J'essaie votre échantillon mais pas de chance; Je reçois l'axe Y mais ils sont vides. Toute entrée? J'ai l'impression que cela se transformera en deux jours pour moi aussi ..
Je l'ai eu ... s'avère que je n'avais pas besoin de superposer des tableaux du tout! J'avais juste besoin de définir le yaxistype sur chaque série en conséquence et d'activer le 2e axe Y!
Ce Réponse résout le problème sans créer deux graphiques simplement en utilisant la fonction mise en œuvre.
solution:
Cela devient encore mieux: p>
Pour utiliser le deuxième axe Y, il n'y a pas besoin d'une seconde zone de graphique. Vous pouvez décider par Serie quel axe vous souhaitez utiliser avec la propriété série.Yaxistype. Jetez un coup d'œil à la documentation sur http://msdn.microsoft.com/en-us/library/ddd489216 .aspx p>
martijn p>
Voici qu'est-ce que cela a fait pour moi - après avoir créé le graphique, j'ai ajouté les lignes suivantes:
chrtMain.Series[0].YAxisType = AxisType.Primary; chrtMain.Series[1].YAxisType = AxisType.Secondary; chrtMain.ChartAreas[0].AxisY2.LineColor = Color.Transparent; chrtMain.ChartAreas[0].AxisY2.MajorGrid.Enabled = false; chrtMain.ChartAreas[0].AxisY2.Enabled = AxisEnabled.True; chrtMain.ChartAreas[0].AxisY2.IsStartedFromZero = chrtMain.ChartAreas[0].AxisY.IsStartedFromZero;
Vous pouvez ajouter autant de séries sur l'axe Y que vous le souhaitez, ci-dessous, le code est un extrait d'un graphique que j'utilise comportant plus de 2 axes de y secondaire, code est pour vb.net, mais je suis sûr que vous pouvez travailler Sortir:
ChartKPI.Series.Clear() ChartKPI.Series.Add("Series1") ChartKPI.Series("Series1").XValueMember = "Date" ChartKPI.Series("Series1").YValueMembers = "HSDPA_Vol_MBy" ChartKPI.Series("Series1").Name = "HSDPA_Vol_MBy" ChartKPI.Series("HSDPA_Vol_MBy").ChartType = SeriesChartType.Column ChartKPI.Series("HSDPA_Vol_MBy").ToolTip = "HSDPA MBytes: #VAL" ChartKPI.Series.Add("Series2") ChartKPI.Series("Series2").YAxisType = AxisType.Secondary ChartKPI.Series("Series2").XValueMember = "Date" ChartKPI.Series("Series2").YValueMembers = "cs_voice_traffic" ChartKPI.Series("Series2").Name = "cs_voice_traffic" ChartKPI.Series("cs_voice_traffic").ChartType = SeriesChartType.Line ChartKPI.Series("cs_voice_traffic").BorderWidth = 3 ChartKPI.Series("cs_voice_traffic").ToolTip = "CS Voice Traffic: #VAL" ChartKPI.Series.Add("Series3") ChartKPI.Series("Series3").YAxisType = AxisType.Secondary ChartKPI.Series("Series3").XValueMember = "Date" ChartKPI.Series("Series3").YValueMembers = "cs_conv_traffic" ChartKPI.Series("Series3").Name = "cs_conv_traffic" ChartKPI.Series("cs_conv_traffic").ChartType = SeriesChartType.Line ChartKPI.Series("cs_conv_traffic").BorderWidth = 3 ChartKPI.Series("cs_conv_traffic").ToolTip = "CS Conv Traffic: #VAL" ChartKPI.Series.Add("Series4") ChartKPI.Series("Series4").YAxisType = AxisType.Secondary ChartKPI.Series("Series4").XValueMember = "Date" ChartKPI.Series("Series4").YValueMembers = "ps_backg_traffic_ul" ChartKPI.Series("Series4").Name = "ps_backg_traffic_ul" ChartKPI.Series("ps_backg_traffic_ul").ChartType = SeriesChartType.Line ChartKPI.Series("ps_backg_traffic_ul").BorderWidth = 3 ChartKPI.Series("ps_backg_traffic_ul").ToolTip = "PS Backg Traffic UL: #VAL" ChartKPI.Series.Add("Series5") ChartKPI.Series("Series5").YAxisType = AxisType.Secondary ChartKPI.Series("Series5").XValueMember = "Date" ChartKPI.Series("Series5").YValueMembers = "ps_backg_traffic_dl" ChartKPI.Series("Series5").Name = "ps_backg_traffic_dl" ChartKPI.Series("ps_backg_traffic_dl").ChartType = SeriesChartType.Line ChartKPI.Series("ps_backg_traffic_dl").BorderWidth = 3 ChartKPI.Series("ps_backg_traffic_dl").ToolTip = "PS Backg Traffic DL: #VAL" ChartKPI.ChartAreas("ChartArea1").AxisX.Title = "HSDPA Traffic (MB)" ChartKPI.ChartAreas("ChartArea1").AxisX.MajorGrid.Interval = 1 ChartKPI.ChartAreas("ChartArea1").AxisX.LabelStyle.Interval = 1 ChartKPI.ChartAreas("ChartArea1").AxisY.Title = "RRC Attempts" ChartKPI.ChartAreas("ChartArea1").AxisY2.Title = "R99 Traffic (Erlang)" ChartKPI.DataBind()