2010-12-29 3 views
3

Je crée un graphique (DataVisualization.Charting.Chart) par programme, qui est un graphique à barres empilées.Graphiques asp.net: légende chevauchant avec l'axe des X

Je lui ajoute également des entrées de légende par programmation. Je veux montrer la légende au bas du tableau. Mais, tout en faisant cela, la légende se superpose à l'axe X du graphique.

Voici le code que je utilise:

Private Function GetLegend(ByVal legendName As String, ByVal s As Single) As  System.Windows.Forms.DataVisualization.Charting.Legend 

Dim objLegend As System.Windows.Forms.DataVisualization.Charting.Legend = New System.Windows.Forms.DataVisualization.Charting.Legend() 

objLegend.Name = legendName 
objLegend.Font = New System.Drawing.Font("Verdana", s) 
objLegend.IsDockedInsideChartArea = False 
objLegend.Docking = Docking.Bottom 
Return objLegend 
End Function 

Ci-dessous la déclaration ajoute que la légende au tableau

_msChart.Legends.Add(GetLegend("SomeValue1", 10.0F)) 

Toute idée, ce qui manque? Je veux montrer la légende en bas seulement, mais il ne faut pas la recouvrir avec l'axe X.

Répondre

2

J'ai eu le même problème aujourd'hui. Essayez d'ajouter:

objLegend.Position.Auto = true 
objLegend.DockedToChartArea = "yourChartAreaName" 

Cela n'a pas aidé mais j'ai trouvé sur le net que cela pourrait être utile (et solution propre). Ce qui a vraiment fonctionné pour moi, c'était déplacer la zone du graphique pour faire de la place pour la légende afin qu'elle ne se chevauche plus. Ma légende était sur le dessus si ce code a fonctionné pour moi:

chart.ChartAreas[0].Position.Y = 15 

Vous pouvez redimensionner la place, le forçant à être par exemple 20 pixels plus court que chart.Size.

Espérons que cela aide.

0

J'avais aussi un problème de légende/diagramme en chevauchement, mais aucune des autres suggestions ne semblait faire de différence. Je pense que le problème provient de l'enroulement du texte de la légende sur deux lignes et que les algorithmes de dimensionnement n'en tiennent pas compte. Les idées ici m'ont fait penser plus clairement au problème, et j'ai pu contrôler la taille et la position de la zone de diagramme en utilisant ce qui suit.

Chart1.ChartAreas[0].InnerPlotPosition = new ElementPosition(15, 5, 90, 75); 

Il y a IntelliSense pas grand-chose sur ces paramètres, mais aussi bien que je pourrais en déduire, les paramètres sont tous les pourcentages de la superficie totale du graphique (je pensais d'abord qu'ils pourraient être des valeurs de pixel et a obtenu quelques résultats très impairs). Donc, ce que j'ai écrit ci-dessus définirait la zone de tracé à partir de 15% du bord gauche de l'image graphique et 5% du haut, et avoir une largeur de 90% et une hauteur de 75%.

Questions connexes