Как создать легенду гистограммы в QGIS print composer?

14

Я нашел это сообщение в блоге, когда искал способ динамически построить график (гистограмму) в программе печати композитора.

Функция, которую я хочу воспроизвести в блоге, состоит в том, чтобы рисовать статические прямоугольники в компоновщике печати qgis, а затем изменять их размер на основе значения поля, в данном случае в виде столбцов на гистограмме.

Таким образом создавая легенду / гистограмму

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

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

hselbie
источник

Ответы:

8

Я тоже видел этот пост и удивлялся тому же самому!

Вы можете использовать HTML-фреймы и библиотеку 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
@matteo: Готово! Спасибо за всю вашу тяжелую работу над этим супер полезным плагином!
Джейк
Рад, что многие люди считают DataPlotly полезным!
Маттео