plotly / plotly/plotly.py

Choropleth maps only render the first feature with a matching featureidkey, not all matching features

Aperta
#4,660 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug P3
Lingua principale
Python
Stelle
18.8k
Fork
2.8k
Merge medio
16h 26m
PR unite (30g)
21

Descrizione

When px.choropleth() is called with a GeoJSON feature collection containing multiple features matching a single featureidkey value, only the first feature is rendered. I believe all features should be so rendered.

The following code generates two images: the first renders all four features, while the second renders only three. The first uses a featureidkey unique to all features, the second uses a featureidkey that is not unique -- only the first feature to match is rendered. :-(

#!/usr/bin/env python3

import pandas as pd
import plotly.express as px

# A simple GeoJSON with four features.  
# Each feature has a district.  
# One district has two features.
geojson = {
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "properties": {
                "name": "Alpha",
                "district": "One",
            },
            "geometry": {
                "type": "Polygon",
                "coordinates": [[[0, 0], [0, 5], [5, 5], [5, 0], [0, 0]]],
            },
        },
        {
            "type": "Feature",
            "properties": {
                "name": "Bravo",
                "district": "One",
            },
            "geometry": {
                "type": "Polygon",
                "coordinates": [[[5, 0], [5, 5], [10, 5], [10, 0], [5, 0]]],
            },
        },
        {
            "type": "Feature",
            "properties": {
                "name": "Charlie",
                "district": "Two",
            },
            "geometry": {
                "type": "Polygon",
                "coordinates": [[[0, 5], [0, 10], [5, 10], [5, 5], [0, 5]]],
            },
        },
        {
            "type": "Feature",
            "properties": {
                "name": "Delta",
                "district": "Three",
            },
            "geometry": {
                "type": "Polygon",
                "coordinates": [[[5, 5], [5, 10], [10, 10], [10, 5], [5, 5]]],
            },
        },
    ],
}

districts = {
    f["properties"]["name"]: f["properties"]["district"] for f in geojson["features"]
}

# A simple dataframe relating names and districts from the above GeoJSON data.
# i.e., [{'name': 'Alpha', 'district': 'One'}, ...]
data = [f['properties'] for f in geojson['features']]

df = pd.DataFrame(data)

# This code generates two maps from the data:
# * The name map shows all four squares in the same color (count = 1)
# * The district map shows _three_ squares, one with one color (count = 2) and two with another color (count = 1)

# What I expected:
# * The district map should show all four squares, two with light color and two with dark
for key in ["name", "district"]:

    region_counts = df.groupby([key], observed=False).size().reset_index(name="count")

    fig = px.choropleth(
        region_counts,
        geojson=geojson,
        fitbounds='geojson',
        locations=key,
        color="count",
        featureidkey=f"properties.{key}",
    )

    fig.write_image(f"mwe-{key}.png")

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Riproduci le due chiamate a px.choropleth() dallo script fornito, confrontando i nomi univoci e i valori di distretto ripetuti tramite locations e featureidkey. Segui l’entry point di choropleth e la corrispondenza delle feature GeoJSON, quindi verifica il completamento eseguendo il rendering di tutti e quattro i poligoni nella mappa dei distretti, preservando il risultato del nome univoco.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
data-visualization
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
28/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.