Cómo establecer el color de un rasgo (feature) dependiendo de los valores de los atributos con PyQGIS

En artículos (1, 2) pasados expuse la manera de establecer el renderizado de un ráster ‘Single Band Gray’ a un ‘Single Band Pseudo Color’ utilizando una rampa de color (objetos de la clase QgsColorRampShader) en PyQGIS. En esta oportunidad se considerará el renderizado por los valores de los atributos en un archivo vectorial tipo polígono cuyo procedimiento es bastante diferente.

El archivo vectorial a considerar se encuentra a continuación. Es una rejilla de 4×6, es decir, contiene 24 rasgos (features).

render1

En el vectorial anterior voy a crear un campo (random) y a generar aleatoriamente dentro de él valores enteros entre 1 y 24 mediante la calculadora de campos. Estos representan los valores de los atributos que voy a colocar en tres clases arbitrarias “Low” (1-8), “Medium” (9-16) y “Large” (17-24). Antes de exponer el código para el renderizado por valores del atributo vamos a explorar el renderer de la layer de partida y los posibles renderizados a obtener. En la Python Console tenemos que:

>>>layer = iface.activeLayer()
>>>renderer = layer.rendererV2()
>>>renderer
<qgis._core.QgsSingleSymbolRendererV2 object at 0xc4386a4>
QgsRendererV2Registry().renderersList()
[u'singleSymbol', u'categorizedSymbol', u'graduatedSymbol', 
u'RuleRenderer', u'pointDisplacement', u'invertedPolygonRenderer']

Se observa que el renderer inicial es un objeto del tipo QgsSingleSymbolRendererV2. De acuerdo a la lista de todos los posibles renderizados, 6 en total, vamos a escoger la transformación a un ‘graduatedSymbol”; objeto del tipo:

    QgsGraduatedSymbolRendererV2)

Las clases “Low” (1-8), “Medium” (9-16) y “Large” (17-24) tendrán, respectivamente, los colores verde, amarillo y naranja. El código propuesto para ello es el siguiente:

from PyQt4.QtCore import *
from PyQt4.QtGui import *

layer = iface.activeLayer()

# define ranges: label, lower value, upper value, color name
# in the field named 'random' (attributes table) 
values = (
    ('Low', 1, 8, 'green'),
    ('Medium', 9, 16, 'yellow'),
    ('Large', 17, 24, 'orange'),
)

# create a category for each item in values
ranges = []
for label, lower, upper, color in values:
    symbol = QgsSymbolV2.defaultSymbol(layer.geometryType())
    symbol.setColor(QColor(color))
    rng = QgsRendererRangeV2(lower, upper, symbol, label)
    ranges.append(rng)

# create the renderer and assign it to a layer
expression = 'random' # field name
renderer = QgsGraduatedSymbolRendererV2(expression, ranges)
layer.setRendererV2(renderer)

iface.mapCanvas().refresh() 

El resultado de ejecución de este código en la Python Console de QGIS es el siguiente:

render2

This entry was posted in PyQGIS, QGIS, SIG, Software Libre. Bookmark the permalink.

2 Responses to Cómo establecer el color de un rasgo (feature) dependiendo de los valores de los atributos con PyQGIS

  1. Pingback: Générer un style catégorisé sur QGIS à partir d’un fichier CSV | GIS-blog.fr

  2. Pingback: Générer un style catégorisé sur QGIS à partir d’un fichier CSV – DATAWAX

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s