Classer manuellement les données graduées en dehors de la plage dans ArcGIS for Desktop?

13

J'ai deux fichiers de formes représentant des grilles avec des valeurs symbolisées par des couleurs graduées, illustrées ci-dessous:

Original

Vous pouvez voir que les deux fichiers de formes englobent des plages de données similaires, mais affectez des couleurs légèrement différentes aux plages de ces données. Je voudrais symboliser les plages dans chacun des deux fichiers de formes en utilisant les mêmes couleurs pour les mêmes plages, ce qui permet une comparaison plus facile entre les fichiers et permet d'utiliser une seule légende.

Cependant, lorsque j'essaie de classer les plages avec un intervalle manuel, ArcGIS force ce qui devrait être la plage la plus élevée à inclure également la valeur minimale de l'ensemble de données. Vous pouvez le voir dans la plage "-81.64 - 10.00" du bloc de données de gauche ci-dessous. Cela force le calque entier à être symbolisé avec cette couleur. Essentiellement, ArcGIS exige que la valeur minimale dans l'ensemble de données soit utilisée comme valeur dans l'une des plages.

Nouveaux intervalles

Existe-t-il un moyen de contourner cette fonctionnalité?

hfisch
la source
Je me souviens également d'avoir rencontré ce problème, même si je ne me souviens pas exactement comment je l'ai résolu. Si vous classez comme "intervalle égal" et double-cliquez sur les valeurs, pouvez-vous les changer de cette façon?
GISKid
@GISKid dès que je double-clique, la classification revient au "Manuel", malheureusement.
hfisch
Qu'en est-il du réglage des valeurs sur l'histogramme lui-même?
GISKid
@GISKid les valeurs reviennent à la valeur minimale si vous les faites glisser sous la valeur minimale.
hfisch
2
Je pense que la meilleure et la plus simple réponse à cela est gis.stackexchange.com/a/136497 - la première (et actuellement acceptée) réponse est beaucoup trop longue à mon goût.
PolyGeo

Réponses:

12

C'est vraiment une douleur majeure quand ArcMap essaie d'être, euh, utile même quand vous ne voulez vraiment pas que ce soit.

Une solution de contournement que j'ai trouvée consiste à créer un nouvel ensemble de données temporaire et à ajouter quelques points avec les valeurs minimale et maximale dont vous savez que vous aurez besoin dans la sortie - assurez-vous simplement de couvrir toute la plage.

Créez votre symbologie basée sur ce faux ensemble de données et enregistrez cette symbologie dans un fichier de couche :

entrez la description de l'image ici

... puis importez la symbologie du fichier * .lyr dans votre ensemble de données réel:

entrez la description de l'image ici

Stephen Lead
la source
1
Cette solution est moins hacky que la mienne. Je passe à votre réponse.
hfisch
Merci, fonctionne comme un charme si vous lisez toutes les boîtes de dialogue que arcmap vous lance avec suffisamment de soin.
Luuklag
6

@ChrisW a déclaré:

Pour autant que je sache et que je puisse trouver des preuves, vous ne pouvez pas définir une plage de classification en dessous de la valeur minimale dans les données.

Cela m'a fait réfléchir et j'ai trouvé un moyen de définir la plage de classification en dessous de la valeur minimale. Mon problème d'origine était basé sur le fait que la plage de classification la plus basse était nécessaire pour contenir la valeur minimale dans les données.

Cependant, aucune restriction de ce type n'est imposée aux autres gammes de classification utilisées. Par conséquent, on peut forcer deux plages de classification (ou plus) à tomber en dessous de la valeur minimale dans les données. L'un d'eux représentera la plage de classification minimale préférée, tandis que l'autre fonctionnera comme une plage fictive pour contenir la valeur minimale.


Voici le point de départ que j'ai utilisé pour le classement. Chacune des couches dans les quatre trames de données a été classée en utilisant un intervalle défini de 10 pieds sans égard aux plages de données des autres couches.

Point de départ

La plage de classification maximale dans l'un des quatre blocs de données est "0,01 à 10,00", et la plage de classification minimale est "-110,62 à -110,00" (qui deviendra idéalement "-119,00 à -110,00"). Puisque j'essaie de maintenir des intervalles de 10 pieds, cela se traduit par un total de 13 intervalles.


J'utilise le bloc de données en haut à gauche comme source pour ma légende générique. Je commence par ouvrir les propriétés du calque et aller à Classifier. Comme je veux que 13 intervalles soient visibles, je dois sélectionner 14 intervalles pour avoir une plage fictive disponible. Je le fais en sélectionnant Manual comme méthode et en créant 14 classes.

Étape 1a

Avec les plages définies dans leur état actuel (avec les plus grandes valeurs en haut), toute modification de la valeur entrée dans la plage n'aura aucun effet sur autre chose que la plage tout en bas de la liste. @ChrisW a souligné qu'il ne s'agit pas d'un bogue, mais plutôt d'une caractéristique de la façon dont ArcGIS attribue les valeurs de rupture. Voici la fenêtre Propriétés de la couche après avoir sélectionné la méthode manuelle mais avant d'apporter des modifications aux plages:

Étape 1b


Pour résoudre ce problème, j'inverse temporairement le tri du calque. À ce stade, les plages les plus basses sont en haut, tandis que les plages les plus élevées sont en bas.

Étape 2a

Maintenant, si je fais défiler vers le bas de la liste des plages (où la plage la plus élevée est affichée) et que je commence à définir les intervalles appropriés de bas en haut, ArcGIS se souviendra des plages que je définis:

Étape 2b

Dans cette image, j'ai défini la valeur supérieure dans 5 des 14 plages, en commençant par la plus grande valeur (10,00) et en descendant.


Lorsque j'atteins le haut de la liste et modifie ma 14e plage, sa valeur minimale sera toujours définie comme la valeur minimale dans le calque, car il n'a pas d'autre plage en dessous pour extraire une valeur de:

Étape 3a

Cela n'a pas d'importance, cependant, car c'est la gamme factice que j'ai mentionnée auparavant. À ce stade, j'inverse à nouveau le tri du calque, de sorte que les plages les plus élevées sont à nouveau en haut. L'image ci-dessous montre la légende mise à jour pour le bloc de données en haut à gauche, qui reflète désormais les plages appropriées pour les quatre blocs de données, y compris la 14e plage factice:

Étape 3b


L'étape suivante consiste à propager ces modifications jusqu'au reste des trames de données. Certains problèmes sont cependant apparents lorsque j'essaie d'importer la symbologie dans les autres trames de données:

Étape 4a

Comme l'a souligné @ChrisW, cela est dû à ma décision de commencer avec une couche qui n'a pas la valeur minimale absolue dans toutes les trames de données. Il semble que le bloc de données n'affichera aucune plage inférieure aux plages qui existent dans le bloc de données d'origine.

Si vous commencez avec un calque comme celui que j'ai fait, la meilleure solution que j'ai trouvée pour cela est de répéter les étapes que j'ai discutées ci-dessus pour chacun des quatre blocs de données; définir manuellement 14 classes, inverser le tri des classes, redéfinir le haut de chaque plage, puis inverser le tri pour placer les plages les plus élevées en haut.

Cependant, la solution la plus simple consiste à démarrer le processus de classification avec la couche qui a la plus petite valeur. L'option Importer la symbologie peut alors être utilisée correctement pour les autres trames de données.

Étape 4b


Enfin, je peux supprimer trois des légendes et masquer la plage factice dans la légende restante ou la convertir en graphiques et supprimer la plage factice.

Point de fin

hfisch
la source
Heureux que vous ayez pu régler quelque chose. J'ai modifié ma réponse pour corriger l'erreur que vous avez citée (je ne sais pas pourquoi j'ai dit cela - vos images originales vous l' ont montré ).
Chris W
En fait, j'ai du mal à reproduire cela. Pour rendre la réponse un peu plus utile, pourriez-vous modifier exactement comment vous avez créé ces plages en dessous de la valeur minimale?
Chris W
@ChrisW J'ai considérablement développé le processus. Faites-moi savoir si cela n'a toujours pas de sens!
hfisch
2
Merci pour la mise à jour. J'ai compris le problème - il y a une différence significative dans la façon dont la définition des ruptures est gérée entre les boîtes de dialogue de classification et de symbologie qui se rapportent à ce que vous interrogez en tant que bogue. Fondamentalement, il trie automatiquement les valeurs de rupture, mais la rupture la plus basse en dessous de la valeur min est toujours liée à la valeur min et apparaît en haut (ou en bas selon le tri). Pour info, bien que vous ne puissiez pas spécifier un nombre total, vous pouvez ajouter ou supprimer des classes dans Manual en cliquant avec le bouton droit sur l'histogramme.
Chris W
1
En ce qui concerne l'application de la symbologie à d'autres trames de données, comme mentionné dans ma réponse, essayez de commencer avec les données ayant la valeur la plus basse (le -110,62) en utilisant celle-ci pour la symbologie initiale. Je note dans votre troisième à dernière image que la valeur min de la classe factice est toujours de -61,01 pour les quatre, ce qui, je pense, est la raison pour laquelle rien en dessous ne s'affiche, même s'il existe une classe pour cela. Si vous commencez par la valeur la plus basse et que la valeur min est plus élevée, je pense qu'elle inclura ou affichera la symbologie min dans les données min lorsque vous appliquerez la symbologie aux autres ensembles de données.
Chris W
5

Je suis tombé sur ce même problème, je pense ... Si je comprends bien, vous aviez deux (ou plus) ensembles de données et vous devez obtenir les plages d'échelle des ensembles de données pour que les comparaisons puissent être faites.

Je l'ai résolu en:

  1. Créez votre premier jeu de données tel que vous souhaitez qu'il apparaisse. Idéalement, avec la plus grande plage de données afin que les symboles puissent être copiés plus facilement vers le deuxième jeu de données (plus petit).

entrez la description de l'image ici

  1. Créez votre deuxième jeu de données, mais ne vous inquiétez pas pour l'instant de la symbologie. Dans le deuxième jeu de données Propriétés de la couche> onglet Symbologie, choisissez le même type de classification qu'avec le premier jeu de données, pour cet exemple, j'utilise Catégories> Valeurs uniques, puis cliquez sur le bouton Ajouter toutes les valeurs .

entrez la description de l'image ici

  1. Regroupez les valeurs afin qu'elles tombent dans les plages correspondantes utilisées dans le premier ensemble de données. Sélectionnez toutes les valeurs pour une catégorie particulière, puis cliquez avec le bouton droit et sélectionnez Groupe . Les deux premières catégories ont déjà été regroupées dans l'image ci-dessous, les quatre valises en surbrillance sont sur le point d'être "tirées" dans un troisième groupe.

entrez la description de l'image ici

  1. Je trouve plus facile à ce stade de réétiqueter les catégories afin qu'il soit plus facile de garder une trace. À ce stade, vous pouvez voir cinq des sept catégories remplies.

entrez la description de l'image ici

  1. Enfin (presque) et le nœud de ce problème, ajouter les catégories vides qui existent en dehors de la plage de données du deuxième ensemble de données. Dans l' onglet Propriétés de la couche> Symbologie, cliquez sur le bouton Ajouter des valeurs et remplissez les catégories requises au-dessus et au-dessous des plages de données selon les besoins.

entrez la description de l'image ici

  1. Enfin, réétiquetez les nouvelles catégories vides afin qu'elles correspondent avec le premier ensemble de données, puis recolorez chaque catégorie afin qu'elle corresponde aux premières.

entrez la description de l'image ici

Désolé si c'est un peu trop simplifié ou même une mauvaise / mauvaise pratique. Je suis un utilisateur de longue date de GIS Stack Exchange et j'ai pensé qu'il était temps que je commence à contribuer, donc c'est mon premier message!

Nige
la source
2
Désolé, je viens de réaliser que l'OP est destiné aux données graduées et après une vérification rapide, je réalise maintenant que ma solution n'est pas valide. Je vais lire de plus près la prochaine fois ....
Nige
4
  1. Choisissez le nombre de cours que vous souhaitez.
  2. Faites un clic droit sur les symboles et sélectionnez save class breaks
  3. cela enregistre un fichier xml que vous pouvez ouvrir et modifier dans n'importe quel éditeur de texte
  4. éditez les sauts de classe que vous voulez dans le fichier xml et enregistrez
  5. cliquez à nouveau avec le bouton droit sur les symboles et importez le fichier des sauts de classe nouvellement modifié

TERMINÉ

Craig
la source
3

Bien que la classification utilise des plages similaires, les données ne partagent pas de plage. Je pense que la solution ici est de le résoudre dans la légende et les affectations de couleurs, et non dans la classification réelle.

Commencez avec votre résultat en bas à gauche et convertissez cette légende en graphique. Modifiez le texte pour obtenir les plages souhaitées. Je remarque que toutes vos autres images ont une plage de 10 unités, mais celle-ci en fait 20 et elle se chevauche. Par exemple, trois des images ont -49,99 à -40,00 mais la partie inférieure gauche a -49,99 à -60,00, et la classe suivante est de -59,99 à -70,00. Les images sont également des plages opposées - c'est-à-dire que trois sont une valeur inférieure à gauche tandis que le coin inférieur gauche est une valeur inférieure à droite (qui me lit beaucoup plus nativement, augmentant les nombres sinon les valeurs de gauche à droite). Peut-être que ces problèmes doivent être résolus en premier pour gagner du temps plutôt qu'une simple modification manuelle du texte.

Une fois que vous avez une légende avec des plages et une rampe de couleurs que vous aimez, vous pouvez revenir à vos deux premiers calques (qui sont déjà classés correctement) et modifier manuellement le patch de couleur de chaque plage pour correspondre à la couleur que vous avez choisie pour la plage dans la légende . Étant donné que les deux couches n'affichent pas leurs propres légendes, peu importe que dans l'une d'entre elles, la plage soit en fait de -89,99 à -80,00 et l'autre de -81,64 à -80,00 car elles auront toutes les deux la même couleur .

Notez cependant que cela impliquera que les deux ensembles de données ont la même plage, ce qu'ils n'ont pas. En fait, il semble qu'il y aura deux patchs de couleur qui ne seront utilisés que dans une seule carte (la plus haute et la plus basse). Vous voudrez peut-être mettre une note sur chaque carte qui donne leur plage de données absolue. J'utiliserais également «à» au lieu de «-» entre les plages, car avec les valeurs négatives, c'est un peu déroutant à lire.


Solution alternative:

Pour autant que je sache et que je puisse trouver des preuves, vous devez avoir une classe qui commence à votre valeur minimale. Vous pouvez ajouter manuellement des classes (même vides) au-dessus ou en dessous de votre plage de données, mais une classe doit commencer à la valeur minimale.

Donc, configurez votre symbologie à l'aide du raster qui contient la valeur minimale / minimale de tous les rasters. Faites-les symboliser. Vous pouvez ensuite modifier l' étiquette de classe pour dire ce que vous voulez. Donc, si votre valeur la plus basse était de 0,4, vous pouvez toujours changer l'étiquette pour dire 0.

Une fois que vous avez terminé et configuré avec la palette de couleurs que vous aimez, enregistrez un fichier lyr de la symbologie. Vous devriez alors pouvoir ouvrir vos autres rasters et appliquer cette même symbologie. Parce que les autres rasters auront tous des valeurs plus élevées, ils devraient se classer correctement et juste la valeur minimale elle-même augmentera (ou peut-être que cette classe sera supprimée si rien ne s'y trouve). Ce qui encore une fois, vous pouvez changer le libellé de classe en plancher de classe au lieu de la valeur réelle si cela ne se poursuit pas avec la symbologie.

Chris W
la source
Vous pouvez en fait ignorer l'étape .lyr et simplement classer un raster comme vous le souhaitez (plages, couleurs, etc.), puis utiliser la fonction de symbologie d'importation pour l'appliquer à tous vos autres rasters. Ouvrez les Propriétés de la couche, sélectionnez l'onglet Symbologie, sélectionnez l'icône du dossier @ en haut à droite (qui indiquera Importer lorsque vous survolez) - puis sélectionnez le raster que vous souhaitez imiter.
JWallace
@JWallace True, à condition que vos autres rasters soient déjà chargés dans le même document ArcMap (peut-être la même trame de données - je ne me souviens pas si cela vous permettra d'importer la symbologie d'une autre) et que vous êtes prêt à laisser votre travail dans la configuration de la la symbologie réside uniquement dans le mxd (et vous pouvez peut-être en sauvegarder une sauvegarde au cas où vous changeriez les choses). J'ai une réponse graphique couvrant ces étapes ici .
Chris W
Bonne prise sur les unités étranges pour le résultat en bas à gauche. Je pense que c'était un artefact de mes tentatives pour définir manuellement les plages, et je les ai définies dans l'ordre inverse. L'utilisation de «à» au lieu de «-» est également une bonne chose. Le problème que j'ai avec votre solution d'origine est qu'elle nécessite beaucoup de travail manuel avec la coloration et l'étiquetage, et je dois générer une série de ces figures. Votre solution alternative m'a cependant donné quelques idées. Je pense avoir trouvé un moyen de le rendre un peu plus élégant et de supprimer les problèmes de valeur minimale.
hfisch
3

Une solution plus simple mais aussi plus sale qui a fonctionné pour moi. N'oubliez pas de créer une sauvegarde de vos données d'origine.

  1. Ouvrez la table des attributs et commencez la modification
  2. Modifiez manuellement deux valeurs afin que les valeurs minimale et maximale sur lesquelles vous souhaitez baser votre classification soient incluses (rappelez-vous les valeurs d'origine)
  3. Enregistrer et arrêter l'édition
  4. Classer en fonction du nouvel extrema
  5. Recommencer et remplacer manuellement les valeurs modifiées par les valeurs d'origine
  6. La classification existante ne sera pas affectée
Alex_A
la source
2

Je crois qu'il s'agit de la légende des fonctionnalités mais pas des rasters. S'il s'agit de rasters, ne tenez pas compte de ma suggestion. J'utilise habituellement ces derniers:

  • Fusionner 2 (ou plusieurs fichiers de formes) ENFANTS en un, appelons-le FAMILLE
  • créer une légende pour la FAMILLE
  • importer la symbologie pour chaque ENFANT de FAMILLE

J'espère que ça aide, FP

FelixIP
la source
Rendez
vous
2

J'ai effectué la solution de contournement suivante. J'ai créé mes propres interruptions de classe dans un document XML et l'ai chargé dans la symbologie classée des deux couches.

  1. Pour obtenir un modèle de classe XML-documents de rupture: dans les propriétés de la couche, cliquez à droite sur la plage de classification puis "enregistrer les ruptures de classe".
  2. Modifier le document XML: entrez les ruptures de classes dans le document XML, vous pouvez également saisir des nombres qui seront hors de portée de vos jeux de données.
  3. Charger les ruptures de classe XML: même menu que celui où vous avez enregistré le modèle (voir 1), cliquez sur "charger les ruptures de classe"

    Étape 1 et 3

Étape 2

Maja Ott
la source
1
Quelle version d'ArcMap? Je n'ai pas la possibilité de sauvegarder les pauses de classe dans la v10.6: i.imgur.com/znDqUpQ.png
matt wilkie
@mattwilkie Ce n'est pas une question de version mais de type de données. Vous consultez une boîte de dialogue de symbologie pour les données vectorielles, et l'enregistrement des sauts de classe comme celui-ci n'est disponible que pour les données raster. Cette réponse reproduit fondamentalement celle de Craig, mais avec des illustrations.
Chris W
1

Une autre manière consiste à combiner toutes les valeurs de chaque couche en une seule couche, de cette façon, vous aurez les valeurs minimum et maximum sur la couche.

L'illustration:
1.combinez les valeurs de tous les calques dans une seule colonne (appelons-la All_Vals) dans une feuille Excel

  1. à côté de la colonne All_Vals, ajoutez deux nouvelles colonnes nommées X et Y et remplissez-les de zéros.

  2. Dans arcmap, ajoutez la feuille Excel en tant que tableau et utilisez-la pour créer une classe d'entités ponctuelles à l'aide de la commande / outil d'affichage des données xy, puis exportez la couche d'événements dans un fichier de formes (je vais l'appeler NB_Point) et ajoutez-la au bloc de données.

4. Convertissez le fichier de forme NB_Point en une grande partie du type de classe d'entités de vos couches, par exemple si le type de votre couche d'entités est polygone, utilisez l'outil tampon pour créer une classe d'entités polygonales à partir du fichier de formes NB_Point (appelons-le NB_polygon).

  1. Maintenant, tout ce que vous avez à faire est de cliquer avec le bouton droit sur la couche finale NB_polygon et d'appliquer la symbologie de couleur graduée à l'aide de la classification des ruptures naturelles, de l'exporter vers un fichier .lyr pour l'utiliser comme couche d'entrée lorsque vous utilisez l'utilitaire de symbologie de couche d'importation pour chaque des calques d'origine.

J'espère que cela vous aide et désolé pour toute faute d'orthographe.

BMB
la source