Як створити легенду гістограми у композиторі друку QGIS?


14

Я знайшов цю публікацію в блозі , шукаючи спосіб динамічно побудувати графік (гістограму) у композиторі друку.

Особливістю, яку я хочу повторити з блогу, є малювання статичних прямокутників у композиторі друку qgis, а потім розмір їх на основі значення поля в цьому випадку у вигляді барів на гістограмі.

Таким чином створюється легенда / гістограма

Я можу дотримуватися цього підручника, але мені було просто цікаво, якщо: а) існував простіший спосіб поза побудовою потрібного мені графіка в matplotlib та імпорті зображення або б) ця функціональність збиралася вбудовуватися в qgis у майбутніх версіях.

введіть тут опис зображення

Відповіді:


8

Я теж бачив цю публікацію в блозі і дивувався тому ж!

Ви можете використовувати HTML Frames і бібліотеку D3 , якщо ви не заперечуєте над тим, щоб зробити трохи JavaScript.

Ось приклад, який я жорстко кодував. Ви можете вставити вирази QGIS у своє джерело сторінки (з QGIS 2.14 або новішої версії)

приклад кадру d3 html у композиції друку qgis

У моєму випадку я зберег HTML-файл локально і зламав його, поки не отримав його для відображення, використовуючи інструменти для розробників браузера.

Після того, як ви працюєте, ви зможете безпосередньо вставити джерело сторінки у текстове поле "джерело" та викинути вирази QGIS у (наприклад, значення поля, змінні тощо) за допомогою Insert an expressionкнопки.

Я співав цей приклад із сайту alignleft.com . Цей підручник корисний, оскільки показує, як створювати діаграми з простих списків; Більшість прикладів, які я бачив, використовують окремі файли TSV.

Bl.ocks.org має дуже великий набір прикладів.

Ви можете отримати код для навчальних посібників AlignedLeft тут, на GitHub

Це може зробити гарний плагін ... Я бачу, є вже кілька плагінів d3, хоча я не мав можливості їх спробувати - варто подивитися, можливо?


2

DataPlotly плагін отримує там.

Замість масштабування прямокутників з використанням відсоткових значень із поля, попередньо обчисленого за допомогою зовнішнього інструменту (Excel був використаний у пов'язаному дописі блогу), DataPlotly дозволяє безпосередньо обчислювати гістограми функцій Atlas:

Я додав XML конфігурації для об'єкта DataPlotly наприкінці цієї відповіді.

У гістограмах Plotly всі смужки мають однаковий колір. Щоб отримати індивідуально кольорові смуги, мені довелося обманювати об’єкт легенди (10 стовпців, замінити всі тексти введення легенди пробілами, видалити всі інтервали, обережно відрегулювати висоту та ширину символів, ...) та розмістити її над гістограмою за допомогою режим "Екран" змішування.

Деякі речі ще не працюють за допомогою DataPlotly

  • Горизонтальні смуги, вказуючи межі осі
  • Маркування кожного бару
  • Налаштування шрифтів міток
  • Видалення / коригування ліній сітки

Плагін DataPlotly знаходиться в стадії активного розвитку, тому деякі з цих питань можуть бути вирішені в майбутньому.


Файл конфігурації 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>

1
чудове використання DataPlotly! Ви не хочете відкрити деякі проблеми сховища плагінів, щоб я міг подивитися і подивитися, що я можу зробити? github.com/ghtmtt/DataPlotly
Маттео

@matteo: Готово! Дякуємо за всю вашу наполегливу роботу над цим супер корисним плагіном!
Джейк

Рада, що багато людей вважають DataPlotly корисним!
matteo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.