Précision de l'intervalle automatique dans MS Chart
Je suis actuellement à l'aide de la cartographie à l'intérieur .NET en utilisant System.Windows.Forms.DataVisualization.Charting.Chart
. Jusqu'ici, il semble très puissant, et fonctionne très bien. Cependant, il y a un énorme problème en termes de la façon dont il est auto-calcul des intervalles. J'utilise beaucoup de double
valeurs, et dans les bibliothèques comme ZedGraph, il gère parfaitement. Il choisit min/max/intervalle de l'amende juste. Toutefois, dans MS Graphique, il peut sélectionner 206.3334539832 comme un minimum, et les intervalles de même, la précision décimale. Évidemment, cela semble assez laid.
Donc, j'ai tout simplement essayé de faire de l'axe format {0.00}
et il fonctionne très bien quand il charge le graphique. Sauf lorsque vous effectuez un zoom avant, vous avez besoin de plus de précision, peut-être à 4 décimales au lieu de 2. Il semble que je suis coincé avec 9 décimales tout le temps, ou alors un constant nombre fixe, qui peut se casser lorsque quelqu'un exige une plus grande précision. Je préférerais qu'il ramasser la précision en fonction du niveau de zoom appliqué actuellement. Les bibliothèques comme ZedGraph et Dundas (qui, je crois que MS est même à l'aide!) ont tendance à choisir les bonnes valeurs que le changement que vous effectuez un zoom avant et arrière.
Est-il possible d'avoir les intervalles de changement de précision comme le zoom de l'image est modifié? C'est probablement une propriété simple que j'ai mal réglé, mais c'est difficile à dire avec les millions de propriétés de cette chose (surtout quand il y a environ 14 lieux qui représentent le concept d'Intervalle).
source d'informationauteur drharris
Vous devez vous connecter pour publier un commentaire.
J'ai eu exactement le même problème lors d'un zoom. J'ai ajouté le code pour formater les étiquettes de l'axe et de l'appeler à partir de la Peinture de gestionnaire. L'Axe de voir les objets ont une IsZoomed bien et ont des fonctions pour récupérer les limites de l'axe (GetViewMinimum/Maximum). J'ai défini l'Axe LabelStyle.Format de "N" dans tous les cas, à moins que le Max-Min=plage est à moins de 1. Puis-je définir le format "F#" où # est calculée sur la base des axes.
Avoir joué un peu avec le tableau de contrôle, je n'ai pas été en mesure de trouver une solution simple à votre problème. Toutefois, les considérations suivantes peuvent vous aider:
Avez-vous envisagé de mettre les valeurs maximum et minimum pour les axes de vous-même? Si vous arrondissez les réelles valeurs minimum et maximum, le plus proche sensible "ronde" (numéro 5, 10, 0.5, 0.01), qui devraient faire le calcul des intervalles un peu plus convivial.
Je comprends que ce n'est pas une solution idéale, mais en choisissant avec soin le maximum et/ou minimum de valeurs vous pouvez vous assurer que les intervalles sont "plus agréable" numéros. Si la portée de vos axes est-à-dire divisible par 2, 5 & 10 il devrait en résulter une assez belle intervalles.
Pourquoi ne pas modifier le numéro de chaîne de format.
Créer de la chaîne de format
Identifier le niveau de zoom, dire zoomLevel = 2;
Maintenant, utilisez ce format de l'axe de la légende. Utiliser le générateur de chaîne ou de certains de meilleure façon de modifier la chaîne de format.
Pour fournir le résultat avec un minimum de coût, vous pouvez utiliser exponentielle format scientifique
Vous pouvez joindre à personnaliser événement.
À partir de là, vous pouvez modifier les étiquettes sur l'axe des x:
set min. et max. valeurs:
etc.
vous pouvez mettre à jour dynamiquement le max et le min en fonction de votre jeu de données. chaque fois que l'utilisateur effectue un zoom avant, vous faire un FOREACH sur tous les points et d'obtenir des statistiques et basée sur celle de votre max et min
Il aide à définir le IntervalOffset de l'axe, voici un exemple: