Comment créer une légende d'histogramme dans QGIS print composer?

14

J'ai trouvé ce billet de blog en cherchant un moyen de construire dynamiquement un graphique (histogramme) dans le compositeur d'impression.

La fonctionnalité que je souhaite répliquer à partir du blog consiste à dessiner des rectangles statiques dans le compositeur d'impression qgis, puis à les redimensionner en fonction d'une valeur de champ dans ce cas, sous forme de barres sur un histogramme.

Créer ainsi une légende / histogramme

Je peux suivre ce tutoriel mais j'étais simplement curieux de savoir si a) il y avait un moyen plus simple de construire le graphique dont j'avais besoin dans matplotlib et d'importer une image ou b) cette fonctionnalité allait être intégrée à qgis dans les futures versions.

entrez la description de l'image ici

hselbie
la source

Réponses:

8

J'ai aussi vu ce billet de blog et je me suis demandé la même chose!

Vous pouvez utiliser des cadres HTML et la bibliothèque D3 , si cela ne vous dérange pas de faire un peu de JavaScript.

Voici un exemple que j'ai codé en dur. Vous pouvez insérer des expressions QGIS dans votre source de page (à partir de QGIS 2.14 ou version ultérieure)

exemple de cadre html d3 dans qgis print composer

Dans mon cas, j'ai enregistré le fichier html localement et l'ai piraté jusqu'à ce que je l'aie affiché, en utilisant les outils de développement du navigateur.

Une fois que vous l'avez fait fonctionner, vous devriez pouvoir coller directement la source de la page dans la zone de texte 'source', et déposer des expressions QGIS (telles que des valeurs de champ, des variables, etc.) à l'aide du Insert an expressionbouton.

J'ai bricolé cet exemple de alignedleft.com . Ce didacticiel est utile car il montre comment créer des graphiques à barres à partir de listes simples; la plupart des exemples que j'ai vus utilisent des fichiers TSV distincts.

Bl.ocks.org a un très grand nombre d'exemples.

Vous pouvez obtenir le code des didacticiels AlignedLeft ici sur GitHub

Cela pourrait faire un bon plugin ... Je vois qu'il y a déjà quelques plugins d3, même si je n'ai pas eu l'occasion de les essayer - ça vaut le coup peut-être?

Steven Kay
la source
2

Le plugin DataPlotly y arrive .

Au lieu de mettre à l'échelle des rectangles en utilisant des valeurs de pourcentage d'un champ précalculé à l'aide d'un outil externe (Excel a été utilisé dans le billet de blog lié), DataPlotly vous permet de calculer directement les histogrammes des fonctionnalités de l'Atlas:

J'ai ajouté le XML de configuration pour l'objet DataPlotly à la fin de cette réponse.

Dans les histogrammes Plotly, toutes les barres ont la même couleur. Pour obtenir des barres colorées individuellement, j'ai dû manipuler un objet de légende (10 colonnes, remplacer tous les textes d'entrée de légende par des espaces, supprimer tout espacement, ajuster soigneusement la hauteur et la largeur des symboles, ...) et le placer sur l'histogramme à l'aide le mode de fusion "Écran".

Certaines choses ne fonctionnent pas encore avec DataPlotly

  • Barres horizontales tout en spécifiant les limites de l'axe
  • Étiquetage de chaque barre
  • Réglage des polices d'étiquettes
  • Suppression / ajustement des lignes de la grille

Le plugin DataPlotly est en cours de développement actif, donc certains de ces problèmes pourraient être résolus à l'avenir.


Fichier de configuration DataPlotly configuration.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dataplotly>
<Option type="Map">
 <Option type="Map" name="dynamic_properties">
  <Option type="QString" name="name" value=""/>
  <Option name="properties"/>
  <Option type="QString" name="type" value="collection"/>
 </Option>
 <Option type="Map" name="plot_layout">
  <Option type="QString" name="additional_info_expression" value=""/>
  <Option type="QString" name="bar_mode" value="group"/>
  <Option type="double" name="bargaps" value="0"/>
  <Option type="bool" name="bins_check" value="true"/>
  <Option type="bool" name="legend" value="false"/>
  <Option type="QString" name="legend_orientation" value="h"/>
  <Option type="invalid" name="legend_title"/>
  <Option type="Map" name="polar">
   <Option type="Map" name="angularaxis">
    <Option type="QString" name="direction" value="clockwise"/>
   </Option>
  </Option>
  <Option type="Map" name="range_slider">
   <Option type="int" name="borderwidth" value="1"/>
   <Option type="bool" name="visible" value="false"/>
  </Option>
  <Option type="QString" name="title" value=""/>
  <Option type="invalid" name="x_inv"/>
  <Option type="double" name="x_max" value="10.5"/>
  <Option type="double" name="x_min" value="0.5"/>
  <Option type="QString" name="x_title" value=""/>
  <Option type="QString" name="x_type" value="linear"/>
  <Option type="invalid" name="xaxis"/>
  <Option type="invalid" name="y_inv"/>
  <Option type="invalid" name="y_max"/>
  <Option type="invalid" name="y_min"/>
  <Option type="QString" name="y_title" value=""/>
  <Option type="QString" name="y_type" value="linear"/>
  <Option type="QString" name="z_title" value=""/>
 </Option>
 <Option type="Map" name="plot_properties">
  <Option type="invalid" name="additional_hover_text"/>
  <Option type="int" name="bins" value="10"/>
  <Option type="QString" name="box_orientation" value="v"/>
  <Option type="bool" name="box_outliers" value="false"/>
  <Option type="bool" name="box_stat" value="false"/>
  <Option type="invalid" name="color_scale"/>
  <Option type="bool" name="color_scale_data_defined_in_check" value="false"/>
  <Option type="bool" name="color_scale_data_defined_in_invert_check" value="false"/>
  <Option type="QString" name="cont_type" value="fill"/>
  <Option type="QString" name="contour_type_combo" value="Fill"/>
  <Option type="bool" name="cumulative" value="false"/>
  <Option type="List" name="custom">
   <Option type="QString" value="IMDD15"/>
  </Option>
  <Option type="QString" name="hover_text" value="all"/>
  <Option type="QString" name="in_color" value="#000000"/>
  <Option type="bool" name="invert_color_scale" value="false"/>
  <Option type="QString" name="invert_hist" value="increasing"/>
  <Option type="QString" name="line_combo" value="Solid Line"/>
  <Option type="QString" name="line_dash" value="solid"/>
  <Option type="QString" name="marker" value="markers"/>
  <Option type="double" name="marker_size" value="10"/>
  <Option type="int" name="marker_symbol" value="0"/>
  <Option type="QString" name="marker_type_combo" value="Points"/>
  <Option type="double" name="marker_width" value="1"/>
  <Option type="QString" name="name" value="IMDD15"/>
  <Option type="QString" name="normalization" value=""/>
  <Option type="double" name="opacity" value="1"/>
  <Option type="QString" name="out_color" value="#ffffff"/>
  <Option type="QString" name="point_combo" value=""/>
  <Option type="bool" name="selected_features_only" value="false"/>
  <Option type="bool" name="show_colorscale_legend" value="false"/>
  <Option type="bool" name="show_lines" value="false"/>
  <Option type="bool" name="show_lines_check" value="false"/>
  <Option type="bool" name="show_mean_line" value="false"/>
  <Option type="bool" name="violin_box" value="false"/>
  <Option type="QString" name="violin_side" value="both"/>
  <Option type="bool" name="visible_features_only" value="true"/>
  <Option type="QString" name="x_name" value="IMDD15"/>
  <Option type="QString" name="y_name" value=""/>
  <Option type="QString" name="z_name" value=""/>
 </Option>
 <Option type="QString" name="plot_type" value="histogram"/>
 <Option type="QString" name="source_layer_id" value="london_IMD_2004_2010_2015_081015_v120160214112646566"/>
</Option>
Jake
la source
1
merveilleuse utilisation de DataPlotly! Cela vous dérange-t-il d'ouvrir certains problèmes du référentiel de plugins afin que je puisse jeter un œil et voir ce que je peux faire? github.com/ghtmtt/DataPlotly
matteo
@matteo: Terminé! Merci pour tout votre travail acharné sur ce plugin super utile!
Jake
Heureux que beaucoup de gens trouvent DataPlotly utile!
matteo