Jak stworzyć legendę histogramu w kompozytorze wydruku QGIS?

14

Znalazłem ten post na blogu , szukając sposobu na dynamiczne budowanie wykresu (histogramu) w kompozytorze wydruku.

Funkcją, którą chcę replikować z bloga, jest rysowanie statycznych prostokątów w kompozytorze wydruku qgis, a następnie ich wymiarowanie na podstawie wartości pola w tym przypadku jako słupków na histogramie.

W ten sposób powstaje legenda / histogram

Mogę postępować zgodnie z tym samouczkiem, ale byłem ciekawy, czy a) istniało łatwiejsze wyjście poza budowanie wykresu, którego potrzebuję w matplotlib i importowaniu obrazu lub b) ta funkcja miała zostać wbudowana w qgis w przyszłych wersjach.

wprowadź opis zdjęcia tutaj

hselbie
źródło

Odpowiedzi:

8

Widziałem też ten post na blogu i zastanawiałem się nad tym samym!

Możesz użyć ramek HTML i biblioteki D3 , jeśli nie masz nic przeciwko zrobieniu trochę JavaScript.

Oto przykład, który zapisałem na stałe. Możesz wstawić wyrażenia QGIS do źródła strony (z QGIS 2.14 lub nowszego)

przykład ramki html d3 w qgis print composer

W moim przypadku zapisałem plik html lokalnie i zhakowałem go, dopóki nie wyświetliłem go, używając narzędzi programistycznych przeglądarki.

Gdy już zaczniesz działać, powinieneś być w stanie wkleić źródło strony bezpośrednio do pola tekstowego „źródło” i upuścić wyrażenia QGIS w (takie jak wartości pól, zmienne itp.) Za pomocą Insert an expressionprzycisku.

Stworzyłem ten przykład z wyrównanyleft.com . Ten samouczek jest przydatny, ponieważ pokazuje, jak budować wykresy słupkowe z prostych list; większość przykładów widziałem używać osobnych plików TSV.

Bl.ocks.org ma bardzo duży zestaw przykładów.

Możesz pobrać kod do samouczków AlignedLeft tutaj na GitHub

Może to być dobra wtyczka ... Widzę, że jest już kilka wtyczek d3, chociaż nie miałem okazji ich wypróbować - może warto rzucić okiem?

Steven Kay
źródło
2

DataPlotly wtyczka jest dotarcie tam.

Zamiast skalować prostokąty przy użyciu wartości procentowych z pola wstępnie obliczonego za pomocą zewnętrznego narzędzia (w łączonym poście na blogu użyto programu Excel), DataPlotly pozwala bezpośrednio obliczać histogramy funkcji Atlasu:

Na końcu tej odpowiedzi dodałem XML konfiguracji dla obiektu DataPlotly.

Na wykresach wykresów wszystkie paski mają ten sam kolor. Aby uzyskać indywidualnie kolorowe paski, musiałem zmieszać obiekt legendy (10 kolumn, zastąpić wszystkie teksty wpisu legendy spacjami, usunąć wszystkie odstępy, ostrożnie wyregulować wysokość i szerokość symboli, ...) i umieścić go nad histogramem za pomocą tryb mieszania „Screen”.

Niektóre rzeczy nie działają jeszcze przy użyciu DataPlotly

  • Poziome paski przy określaniu granic osi
  • Etykietowanie każdego paska
  • Dostosowywanie czcionek etykiet
  • Usuwanie / dostosowywanie linii siatki

Wtyczka DataPlotly jest w fazie rozwoju, więc niektóre z tych problemów mogą zostać rozwiązane w przyszłości.


Plik konfiguracyjny 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
źródło
1
wspaniałe wykorzystanie DataPlotly! Czy masz coś przeciwko otwarciu niektórych problemów z repozytorium wtyczek, abym mógł zajrzeć i zobaczyć, co mogę zrobić? github.com/ghtmtt/DataPlotly
matteo
@matteo: Gotowe! Dziękujemy za całą ciężką pracę nad tą bardzo przydatną wtyczką!
Jake
Cieszę się, że wiele osób uważa DataPlotly za przydatne!
matteo