I'm trying to set the color of a vectorlayer feature depending on the feature attributes with PyQGIS.
How do you acces the attributes of a vectorlayer feature?
To set the color of a vector layer feature depending on the feature attributes with PyQGIS is necessary to change the QgsSingleSymbolRendererV2 default object in a, for example, QgsGraduatedSymbolRendererV2 object. To test this I created the 'random' field name in a Polygon Vector Layer and this field was filled with aleatory values between 1 and 24. These values were grouped in three arbitrary classes in a tuple for being used in the following code at the Python Console of QGIS:
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()
Before running the code at Python Console:
After running the code at the Python Console:
The renderer produced was of the QgsGraduatedSymbolRendererV2 type.
Right click on the layer in the table of contents > properties > style tab > there you have options to style as a single symbol, using categories, using graduated colours, and rules.
You then have the option to choose the field containing the values to be displayed.
See the QGIS manual for more information: http://docs.qgis.org/user_guide/html/en/
pyqgis
which is the QGIS Python API, not via the GUI