Como criar uma legenda no histograma no compositor de impressão QGIS?

14

Encontrei este post do blog enquanto procurava uma maneira de criar dinamicamente um gráfico (histograma) no compositor de impressão.

O recurso que desejo replicar do blog é desenhar retângulos estáticos no compositor de impressão qgis e, em seguida, dimensioná-los com base em um valor de campo, neste caso, como barras em um histograma.

Assim, criando uma legenda / histograma

Posso seguir este tutorial, mas fiquei curioso para saber se: a) havia uma maneira mais fácil de criar o gráfico necessário no matplotlib e importar uma imagem ou b) essa funcionalidade seria incorporada ao qgis em versões futuras.

insira a descrição da imagem aqui

hselbie
fonte

Respostas:

8

Eu também vi esse post e me perguntei a mesma coisa!

Você pode usar os quadros HTML e a biblioteca D3 , se não se importar em fazer um pouco de JavaScript.

Aqui está um exemplo que eu codifiquei. Você pode inserir expressões QGIS na fonte da página (a partir do QGIS 2.14 ou posterior)

exemplo de quadro html d3 no compositor de impressão qgis

No meu caso, salvei o arquivo html localmente e o cortei até conseguir exibi-lo, usando as ferramentas de desenvolvedor do navegador.

Depois de funcionar, você poderá colar a fonte da página na caixa de texto 'fonte' diretamente e soltar expressões QGIS (como valores de campo, variáveis ​​etc.) usando o Insert an expressionbotão

Eu juntei esse exemplo no alinhadoleft.com . Este tutorial é útil, pois mostra como criar gráficos de barras a partir de listas simples; a maioria dos exemplos que eu vi usam arquivos TSV separados.

O Bl.ocks.org tem um conjunto muito grande de exemplos.

Você pode obter o código dos tutoriais AlignedLeft aqui no GitHub

Isso pode ser um bom plugin ... Vejo que já existem alguns plugins d3, embora ainda não tenha tido a chance de experimentá-los - vale a pena dar uma olhada, talvez?

Steven Kay
fonte
2

O plug-in DataPlotly está chegando lá.

Em vez de dimensionar retângulos usando valores percentuais de um campo pré-calculado usando uma ferramenta externa (o Excel foi usado na postagem do blog vinculada), o DataPlotly permite calcular diretamente os histogramas dos recursos do Atlas:

Adicionei o XML de configuração para o objeto DataPlotly no final desta resposta.

Nos histogramas de Plotly, todas as barras têm a mesma cor. Para obter barras coloridas individualmente, tive que alterar um objeto de legenda (10 colunas, substituir todos os textos de entrada de legenda por espaços, remover todo o espaçamento, ajustar cuidadosamente a altura e a largura dos símbolos, ...) e colocá-lo sobre o histograma usando o modo de mesclagem "Tela".

Algumas coisas ainda não funcionam usando o DataPlotly

  • Barras horizontais ao especificar os limites do eixo
  • Rotular cada barra
  • Ajustando as fontes da etiqueta
  • Removendo / ajustando as linhas de grade

O plug-in DataPlotly está em desenvolvimento ativo, portanto, alguns desses problemas podem ser resolvidos no futuro.


Arquivo de configuração do 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
fonte
1
uso maravilhoso do DataPlotly! Você se importa de abrir alguns problemas do repositório de plugins para que eu possa dar uma olhada e ver o que posso fazer? github.com/ghtmtt/DataPlotly
matteo
@matteo: Feito! Obrigado por todo o seu trabalho duro neste plugin super útil!
Jake
Fico feliz que muitas pessoas achem o DataPlotly útil!
matteo