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

Esta entrada fue publicada en PyQGIS, QGIS, SIG, Software Libre. Guarda el enlace permanente.

Una respuesta a 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

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s