Wie erstelle ich eine Histogrammlegende in QGIS Print Composer?

14

Ich habe diesen Blog-Beitrag gefunden, als ich nach einer Möglichkeit gesucht habe, ein Diagramm (Histogramm) in Print Composer dynamisch zu erstellen.

Die Funktion, die ich aus dem Blog replizieren möchte, besteht darin, statische Rechtecke im qgis print composer zu zeichnen und sie dann basierend auf einem Feldwert in diesem Fall als Balken in einem Histogramm zu dimensionieren.

So erstellen Sie eine Legende / ein Histogramm

Ich kann diesem Tutorial folgen, war aber nur neugierig, ob a) es einen einfacheren Weg gibt, das in matplotlib benötigte Diagramm zu erstellen und ein Bild zu importieren, oder b) diese Funktionalität in zukünftigen Versionen in qgis integriert werden soll.

Geben Sie hier die Bildbeschreibung ein

hselbie
quelle

Antworten:

8

Ich habe diesen Blog-Beitrag auch gesehen und mich das Gleiche gefragt!

Sie können HTML-Frames und die D3-Bibliothek verwenden , wenn Sie nichts dagegen haben, ein bisschen JavaScript zu verwenden.

Hier ist ein Beispiel, das ich fest codiert habe. Sie können QGIS-Ausdrücke in Ihre Seitenquelle einfügen (ab QGIS 2.14).

Beispiel für einen d3-HTML-Frame in qgis print composer

In meinem Fall habe ich die HTML-Datei lokal gespeichert und gehackt, bis sie mithilfe der Entwicklertools des Browsers angezeigt wurde.

Sobald es funktioniert hat, sollten Sie in der Lage sein, die Seitenquelle direkt in das Textfeld "Quelle" einzufügen und QGIS-Ausdrücke (wie Feldwerte, Variablen usw.) über die Insert an expressionSchaltfläche einzufügen.

Ich habe dieses Beispiel von alignleft.com zusammengeschustert . Dieses Tutorial ist nützlich, da es zeigt, wie Balkendiagramme aus einfachen Listen erstellt werden. Die meisten Beispiele, die ich gesehen habe, verwenden separate TSV-Dateien.

Bl.ocks.org hat eine sehr große Anzahl von Beispielen.

Code für die AlignedLeft-Tutorials erhalten Sie hier auf GitHub

Dies könnte ein gutes Plugin sein ... Ich sehe, dass es bereits einige d3-Plugins gibt, obwohl ich keine Gelegenheit hatte, sie auszuprobieren - vielleicht einen Blick wert?

Steven Kay
quelle
2

Das DataPlotly- Plugin ist da.

Anstatt Rechtecke mit Prozentwerten aus einem Feld zu skalieren, das mit einem externen Tool vorberechnet wurde (Excel wurde im verknüpften Blog-Beitrag verwendet), können Sie mit DataPlotly Histogramme der Atlas-Features direkt berechnen:

Ich habe das Konfigurations-XML für das DataPlotly-Objekt am Ende dieser Antwort hinzugefügt.

In Plotly-Histogrammen haben alle Balken dieselbe Farbe. Um individuell farbige Balken zu erhalten, musste ich ein Legendenobjekt entstellen (10 Spalten, alle Legendeneintragstexte durch Leerzeichen ersetzen, alle Abstände entfernen, Höhe und Breite der Symbole sorgfältig anpassen, ...) und es mit über dem Histogramm platzieren der Mischmodus "Bildschirm".

Einige Dinge funktionieren mit DataPlotly noch nicht

  • Horizontale Balken unter Angabe der Achsengrenzen
  • Beschriften Sie jeden Balken
  • Anpassen der Beschriftungsschriftarten
  • Gitterlinien entfernen / anpassen

Das DataPlotly-Plugin befindet sich in der aktiven Entwicklung, sodass einige dieser Probleme möglicherweise in Zukunft behoben werden.


DataPlotly-Konfigurationsdatei 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
quelle
1
wunderbare Nutzung von DataPlotly! Haben Sie etwas dagegen, einige Probleme des Plugin-Repositorys zu öffnen, damit ich einen Blick darauf werfen und sehen kann, was ich tun kann? github.com/ghtmtt/DataPlotly
matteo
@ Matto: Fertig! Vielen Dank für all Ihre harte Arbeit an diesem super nützlichen Plugin!
Jake
Ich bin froh, dass die vielen Leute DataPlotly nützlich finden!
Matto