IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

boucle sur plotly pour carte valeurs discretes


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Par défaut boucle sur plotly pour carte valeurs discretes
    Bonjour,

    Tous d'abord une première question, est t il possible de créer des couleurs avec valeurs discrètes sur une carte gérer par une liste déroulante avec plotly ?

    J'ai essayé pas mal de choses et trouvé aucun exemple sur le net où je pourrais me dire "ok, c'est possible".

    J'ai un dataframe avec une répartition d’espèces par département et un statut associé.

    Donc je boucle sur chaque espèce pour pouvoir afficher les départements et avoir les statuts (au nombre de 3 modalités) sur la symbologie.

    Dans les faits , avec le code suivant j'ai bien ma carte . Par contre impossible de faire correspondre les valeurs du champ avec les couleurs.

    si j'ai 10 département avec statut 1 et deux avec statuts 2 et un dep avec statut 3..

    Le compte des couleurs affichée est respecté mais cela ne correspond pas au valeur de champs. C'est mélangé.

    Si quelqu'un à une idée ? (et si au final ce n'est pas possible alors j'ai perdu mon temps :-) (j'ai pu le faire avec dash mais je préférerais le résultat émis par plotly)t

    Merci d'avance...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    import plotly.graph_objects as go
    import pandas as pd
     
     
     
    species = sorted(list(data['esp'].unique()))
     
     
     
    status_colors = {
        1: 'red',
        2: 'green',
        3: 'blue'
    }
    colorscales = [[status / (len(status_colors) - 1), color] for status, color in enumerate(status_colors.values())]
     
     
     
     
     
    text = data.apply(lambda row:  f"Code département: {str(row['dept'])}"
     
                                            , axis=1)
    # Créez la figure initiale
    fig = go.Figure()
     
    # Ajoutez des traces pour chaque espèce
    for specie in species:
        df_temp = data[data['esp'] == specie]
     
        fig.add_trace(go.Choroplethmapbox(
            featureidkey="properties.code",  # Clé du JSON pour la jointure avec la data
            geojson=dep_data,  # GeoJSON du département 
            locations=df_temp.dept,  # Clé de la data pour la jointure
            z=df_temp.category_numeric,# valeurs du champ qui correspond à 0.0, 0.5, 1.0
            colorscale=colorscales,# valeurs obtenue pour correspondre à df_temp.category_numeric
            colorbar=dict(
            tick0=0,
            dtick=1),#'viridis',  # Palette de couleurs colorscales,#
            #reversescale=True,  # Inverse la montée de valeur sur la barre de couleurs
            marker_opacity=0.6,  # Transparence de la figure (entre 0 et 1)
            text=text,#df_temp['some_field'],  # Champ de texte affiché au passage de la souris
            hoverinfo="text",  # Doit être associé à la variable text ci-dessus
            marker_line_width=0.8,  # Taille du contour de département
            visible=(specie==species[0]),  #paramètre pour afficher que la première espèces de la liste   deroulante            
            showscale=True,  # Par défaut, l'échelle (barre de couleur) est visible
        ))
     
    #boutons de liste déroulante pour les espèces
    buttons = []
     
     
    for specie in species:
        visible = [False] * len(species)
        visible[species.index(specie)] = True
        buttons.append(dict(label=specie, method='update', args=[{'visible': visible}]))
     
    updatemenus = [{'buttons': buttons,
                    'direction': 'down',
                    'showactive': True,
                    'x': 0,
                    'y': 1.1,
                    'xanchor': 'left'
                   }]
     
    # Configurez les mises à jour de la figure
    fig.update_layout(
        title={
            'text': f'Programme test',
            'xref': 'paper',
            'y': 0.95,
            'x': 0,
            'xanchor': 'left',
            'yanchor': 'bottom',
        },
        updatemenus=updatemenus,
        height=700, width=800,
        mapbox=dict(
            style="open-street-map",
            zoom=4, 
            center={"lat": 46, "lon": 2}
    ))
     
    fig.show()

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 242
    Par défaut
    Hello,
    je ne sais pas si c'est cela que tu recherches mais il y a ici de quoi afficher une carte choroplèthe en python en utilisant holoviz, geoviews et geopandas.
    Ami calmant, J.P

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Par défaut
    bonjour jurassic pork,

    Merci pour le partage, je vais regarder ça..

    Je cherche surtout une représentation avec des couleurs discrètes et non pas une colorscale (ou montée de valeurs) comme sur ces exemples.

    bonne journée

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 242
    Par défaut
    voici un exemple qui utilise geoviews et affiche une carte des départements français (dans un navigateur). Pour chaque département une valeur de 1 à 10 est tirée aléatoirement et on affiche une couleur qui se trouve dans la colormap "Accent" de bokeh dans chaque département en fonction de la valeur tirée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import geoviews as gvimport geoviews.feature as gf
    from geoviews import dim
    import geopandas as gpd
    import numpy as np
    from bokeh.plotting import show
    from bokeh.models import PrintfTickFormatter
     
    gv.extension('bokeh')
    sf = gpd.read_file('d:/tmp/france-geojson/departements-version-simplifiee.geojson')
    sf['value'] = np.random.randint(1, 10, sf.shape[0])
    deps = gv.Polygons(sf, vdims=['nom','value'])
    deps.opts(width=600, height=600, toolbar='above', color=dim('value'), cmap='Accent',
              colorbar=True, tools=['hover'], aspect='equal')
    show(gv.render(deps))
    Voici ce que cela donne dans Edge :
    Nom : Geoviews.gif
Affichages : 72
Taille : 146,9 Ko

Discussions similaires

  1. [XL-2007] Boucle Sur listview Pour changer le Font
    Par salhix dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/01/2016, 22h00
  2. [Carte graphique] Question sur port pour carte graphique
    Par Invité dans le forum Composants
    Réponses: 3
    Dernier message: 02/12/2014, 12h05
  3. Boucle sur TextBox pour les "Enabled" suivant une condition
    Par GoFio dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 06/03/2014, 18h38
  4. boucle sur feuille pour trouver valeur
    Par ericdev67 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/11/2010, 06h58
  5. copier feuille sur place pour garder valeur et format uniquement
    Par fabiencal dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 29/07/2008, 17h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo