Bagaimana cara membuat legenda histogram di komposer cetak QGIS?

14

Saya telah menemukan posting blog ini sambil mencari cara untuk secara dinamis membangun grafik (histogram) di komposer cetak.

Fitur yang ingin saya tiru dari blog adalah menggambar persegi panjang statis di komposer cetak qgis dan kemudian mengukurnya berdasarkan nilai bidang dalam hal ini sebagai bilah pada histogram.

Sehingga menciptakan legenda / histogram

Saya dapat mengikuti tutorial ini tetapi saya hanya ingin tahu apakah a) ada cara yang lebih mudah di luar membangun grafik yang saya butuhkan di matplotlib dan mengimpor gambar atau b) fungsi ini akan dibangun untuk qgis di versi mendatang.

masukkan deskripsi gambar di sini

hselbie
sumber

Jawaban:

8

Saya telah melihat posting blog itu juga, dan bertanya-tanya hal yang sama!

Anda dapat menggunakan Bingkai HTML dan pustaka D3 , jika Anda tidak keberatan melakukan sedikit JavaScript.

Inilah contoh yang saya hard-coded. Anda dapat memasukkan Ekspresi QGIS ke sumber halaman Anda (dari QGIS 2.14 atau lebih baru)

contoh bingkai h3 d3 dalam komposer cetak qgis

Dalam kasus saya, saya telah menyimpan file html secara lokal dan meretasnya hingga saya dapat menampilkannya, menggunakan alat pengembang browser.

Setelah berhasil, Anda harus dapat menempelkan sumber halaman ke dalam kotak teks 'sumber' secara langsung, dan memasukkan ekspresi QGIS (seperti nilai bidang, variabel, dll.) Menggunakan Insert an expressiontombol.

Saya mengumpulkan contoh itu dari alignedleft.com . Tutorial ini bermanfaat karena menunjukkan cara membangun grafik batang dari daftar sederhana; kebanyakan contoh yang saya lihat menggunakan file TSV terpisah.

Bl.ocks.org memiliki serangkaian contoh yang sangat besar.

Anda bisa mendapatkan kode untuk tutorial AlignedLeft di GitHub

Ini mungkin merupakan plugin yang bagus ... Saya melihat ada beberapa plugin d3, walaupun saya belum memiliki kesempatan untuk mencobanya - layak untuk dilihat?

Steven Kay
sumber
2

The DataPlotly plugin sampai ke sana.

Alih-alih menskalakan persegi panjang menggunakan nilai persentase dari bidang yang dihitung sebelumnya menggunakan alat eksternal (Excel digunakan dalam posting blog tertaut), DataPlotly memungkinkan Anda untuk menghitung histogram fitur Atlas secara langsung:

Saya telah menambahkan XML konfigurasi untuk objek DataPlotly di akhir jawaban ini.

Dalam Plotly histogram, semua bilah memiliki warna yang sama. Untuk mendapatkan bilah berwarna secara individual, saya harus memotong-motong objek legenda (10 kolom, mengganti semua teks entri legenda dengan spasi, menghapus semua spasi, dengan hati-hati mengatur tinggi dan lebar simbol, ...) dan meletakkannya di atas histogram menggunakan mode blending "Layar".

Beberapa hal belum berfungsi menggunakan DataPlotly

  • Bilah horizontal saat menentukan batas sumbu
  • Memberi label setiap bilah
  • Menyesuaikan font label
  • Menghapus / menyesuaikan garis kisi

Plugin DataPlotly sedang dalam pengembangan aktif, sehingga beberapa masalah ini dapat diatasi di masa mendatang.


File konfigurasi 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
sumber
1
penggunaan DataPlotly yang luar biasa! Apakah Anda keberatan membuka beberapa masalah repositori plugin sehingga saya dapat melihat dan melihat apa yang dapat saya lakukan? github.com/ghtmtt/DataPlotly
matteo
@matteo: Selesai! Terima kasih untuk semua kerja keras Anda pada plugin yang sangat berguna ini!
Jake
Senang banyak orang menemukan DataPlotly berguna!
matteo