Dezelfde dataset op twee manieren categoriseren (in een vegetatiekaart: soortnaam en aantalsklasse)

Mijn werkgever vraagt om een weergave van florawaarnemingen met daarin verschillende soorten (kleur) en aantalsklasses (stipgrootte). Ik heb mij laten vertellen dat de QGIS interface slechts één categorisatie tegelijk kan uitvoeren op de dataset; niet twee tegelijk. Daarom categoriseren we op soortnaam en passen we daarna de stipgrootte aan met een expressie in het onderliggende Python script, namelijk

coalesce(sqrt(2*(class)),0)

Dit werkt op zich prima om een kaart te genereren met stippen in verschillende kleuren en verschillende groottes. Door te spelen met de waarden in de kolom “class” kun je de verschillen in aantallen helder weergeven.

Nu het probleem:

Als je hier een legenda van wilt toevoegen aan je layout, kan QGIS – voor zover ik nu weet – alleen de verschillende kleuren weergeven, maar niet tegelijk de verschillende stipgroottes. Althans, de interface van QGIS laat het niet makkelijk toe.

Het is weliswaar mogelijk om de eigenschappen van de legenda-items aan te passen. Enerzijds is het mogelijk handmatige stipgroottes te kiezen; het nadeel hiervan is dat de stipgroottes van de legenda dan niet exact overeenkomen met die in de kaart, wat precies mijn doel is. Anderzijds is het ook mogelijk om daar bij de stipgrootte dezelfde expressie in te voeren. Echter: dit geeft de foutmelding

Er werd op deze laag geen object gevonden om de expressie te evalueren.

QGIS lijkt hier de verbinding met de onderliggende data om een of andere reden kwijt te zijn. Mijn eerste vraag is: waarom gebeurt dat? Wat zie ik over het hoofd?

En verder de vraag: is dit überhaupt een handige aanvliegroute voor dit probleem van ‘dubbele categorisatie’? Of bestaat hier een betere functie voor, die niet alleen op de kaart maar ook in de legenda twee categorieën tegelijk kan weergeven?

Heeft er iemand ervaring met een soortgelijke vraag? Ik ben een (bijna-)beginner in QGIS en een absolute beginner in Python. Alle hulp is welkom!

~ Maxwell

Wat als je in je project de kaartlaag kopieert?
De ene visualisatie in de ene laag en de andere in de kopie-laag instelt?

Ik weet niet zeker of er dan ook een kopie van de onderliggende data wordt gemaakt. Dus of je dan wijzigingen in beide lagen moet doorvoeren of dat beide kaartlagen verwijzen naar hetzelfde bronbestand.
Dat kan ik nu even niet voor je nagaan.

Je kunt het op verschillende manieren doen, expressies zijn er 1, regelgebaseerde weergave is een andere. Persoonlijk zou ik dit wat simpeler aanpakken:
categoriseren op basis van 1 waarde.
daarna, of daarvoor, de grootte van het symbool aanpassen op basis van de waarde:


Je gebruikt daarvoor een formule, maar het is makkelijk genoeg om het resultaat van die formule in een nieuwe kolom op te slaan, of zelfs als berekende waarde toe te voegen.

Overigens: Dat jouw oplossing een foutmelding geeft, komt waarschijnlijk omdat class een gereserveerd woord is. En bovendien moet in die expressiebuilder de naam van een attribuut altijd tussen dubbele aanhalingstekens staan. Dat is bij jou niet het geval, vermoedelijk kan QGis er daarom niets mee, en geeft een foutmelding.

Oh, en @ThomasHaarlem : uiteraard kun je 1 dataset meerdere keren toevoegen, en dan worden de gegevens niet gekopieerd (beide lagen kijken naar 1 en dezelfde databron). Ik maak daar zelf wel eens gebruik van als ik veel moet aanpassen, dan kan ik in de 2e laag de symbologie instellen op al of niet verwerkt. Kun je prima je voortgang mee bijhouden.

1 like

@Maxwell Voor zover het mogelijk is om de legenda hetzelfde als de kaart te laten zijn… Ik ga er vanuit dat je de expressiebouwer vanuit de eigenschappen>symbologie> opent, maar je plaatje dat niet toont.
Zo ja: als je vanuit symbologie eerst Categorien/Gradueel/Regel-gebaseerd etc het sigma teken rechtsbovenaan opent, dan dien je in de expressie nog @ voor je kolom met waarden op te geven., dus in jouw geval: coalesce(sqrt(2*(@class)),0)

Dan werkt het waarschijnlijk wel. Voorwaarde is dat er uitsluitend getallen in die kolom staan.
Geen garantie dat je dan in je legenda exact grootte punten krijgt dan in de kaart.

De meeste dingen zijn al gezegd. Rest nog je vraag over legenda’s voor proportionele symbolen. Dat kan, maar is wat verborgen. Dit en nog een paar handige tips vind je in de Primer die we aan onze studenten geven:
https:https://kartoweb.itc.nl/courses/Primer_thematic_maps_in_QGIS.pdf :
“Select the “Marker”, scroll down until below the list of default symbols. Then click the “Advanced” menu and choose “Data-defined Size Legend…””

3 likes

Dank allemaal voor jullie heldere antwoorden!

Regelgebaseerde weergave lijkt mij inderdaad veel handiger dan de methode die ik tot nu toe gebruikte. Hiermee kan ik eerst categoriseren op soortnaam en vervolgens de proportionaliteit van de symbolen toekennen met de functie Bereiken aan regel toevoegen, en wel als volgt:

  1. In de laagopmaak van de Shapefile, kies i.p.v. Categorieën, Regelgebaseerd;
  2. klik op + om een regel toe te voegen → selecteer regel → klik op Geselecteerde regels verfijnen (drop down) → klik op Categorieën aan regel toevoegen;
  3. onder Waarde (drop down), kies de gewenste waarde, in dit geval “species name” → klik op Classificeren → klik op Ga terug (pijl naar links);
  4. in de lijst met regels, selecteer alle regels onder de eerste → klik op Geselecteerde regels verfijnen (drop down) → Klik op Bereiken aan regels toevoegen;
  5. onder Waarde (drop down), kies de gewenste waarde, in dit geval “number” (aantal) → onder Methode (drop down), kies Grootte → kies het gewenste aantal klassen en de gewenste modus, in dit geval 5 en Gelijk aantal → klik op Classificeren.

Dan ben ik er bijna!

Het probleem dat zich nu voordoet, is dat de regels van – wat ik maar even noem – het tweede niveau, d.w.z. de regels die de aantallen weergeven, allemaal dezelfde kleur krijgen:

Wat ik echter wil, is dat QGIS slechts de grootte van het symbool aanpast, maar niet de kleur; de kleur moet juist overeenkomen met die van het eerste niveau, de regels die de soortnamen bevatten.

Is er een manier om QGIS te vertellen dat het de kleur moet overnemen van de regels van het voorgaande niveau? Of een andere manier om de gewenste visualisatie voor elkaar te krijgen? (De symbolen van laagste niveau transparant maken in de hoop dat de kleur van het hogere niveau die er ‘achter’ zou liggen, zichtbaar wordt, werkt helaas niet; dit heb ik al geprobeerd. En handmatig de kleuren kopiëren gaat nu wel, maar dat wordt wel een vervelend klusje met meer data :sweat_smile:)