¿Cómo crear una leyenda de histograma en QGIS print composer?

14

Encontré esta publicación de blog mientras buscaba una forma de construir dinámicamente un gráfico (histograma) en el compositor de impresión.

La característica que quiero replicar desde el blog es dibujar rectángulos estáticos en el compositor de impresión qgis y luego dimensionarlos según un valor de campo en este caso como barras en un histograma.

Creando así una leyenda / histograma

Puedo seguir este tutorial, pero tenía curiosidad por saber si a) había una manera más fácil de construir el gráfico que necesitaba en matplotlib e importar una imagen ob) esta funcionalidad se iba a incorporar a qgis en futuras versiones.

ingrese la descripción de la imagen aquí

hselbie
fuente

Respuestas:

8

¡También he visto esa publicación de blog y me he preguntado lo mismo!

Puede usar marcos HTML y la biblioteca D3 , si no le importa hacer un poco de JavaScript.

Aquí hay un ejemplo que codifiqué. Puede insertar expresiones QGIS en la fuente de su página (de QGIS 2.14 o posterior)

ejemplo de marco d3 html en qgis print composer

En mi caso, guardé el archivo html localmente y lo pirateé hasta que lo visualicé, usando las herramientas de desarrollo del navegador.

Una vez que lo tiene funcionando, debería poder pegar la fuente de la página en el cuadro de texto 'fuente' directamente, y soltar expresiones QGIS (como valores de campo, variables, etc.) usando el Insert an expressionbotón.

He improvisado ese ejemplo de alineadoft.com . Este tutorial es útil ya que muestra cómo crear gráficos de barras a partir de listas simples; La mayoría de los ejemplos que he visto usan archivos TSV separados.

Bl.ocks.org tiene un gran conjunto de ejemplos.

Puede obtener el código para los tutoriales de AlignedLeft aquí en GitHub

Esto podría ser un buen complemento ... Veo que ya hay un par de complementos d3, aunque no he tenido la oportunidad de probarlos, ¿vale la pena echarle un vistazo?

Steven Kay
fuente
2

El complemento DataPlotly está llegando allí.

En lugar de escalar rectángulos usando valores de porcentaje de un campo precalculado usando una herramienta externa (se usó Excel en la publicación de blog vinculada), DataPlotly le permite calcular histogramas de las características de Atlas directamente:

He agregado el XML de configuración para el objeto DataPlotly al final de esta respuesta.

En los histogramas de Plotly, todas las barras tienen el mismo color. Para obtener barras coloreadas individualmente, tuve que destrozar un objeto de leyenda (10 columnas, reemplazar todos los textos de entrada de leyenda con espacios, eliminar todo el espacio, ajustar cuidadosamente la altura y el ancho de los símbolos, ...) y colocarlo sobre el histograma usando el modo de fusión "Pantalla".

Algunas cosas aún no funcionan con DataPlotly

  • Barras horizontales al especificar los límites del eje
  • Etiquetando cada barra
  • Ajuste de las fuentes de la etiqueta
  • Eliminar / ajustar las líneas de la cuadrícula

El complemento DataPlotly está en desarrollo activo, por lo que algunos de estos problemas pueden resolverse en el futuro.


Archivo de configuración 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
fuente
1
maravilloso uso de DataPlotly! ¿Te importaría abrir algunos problemas del repositorio de complementos para que pueda echar un vistazo y ver qué puedo hacer? github.com/ghtmtt/DataPlotly
matteo
@matteo: ¡Listo! ¡Gracias por todo su trabajo duro en este complemento súper útil!
Jake
¡Me alegra que muchas personas encuentren útil DataPlotly!
matteo