Plote valores RGB para cada característica separadamente
Aug 18 2020
Quero plotar cada valor rgb para seu respectivo recurso da camada via pyqgis. Atm, luto para implementá-lo adequadamente para cada camada individualmente. Com meu código atual abaixo, todos os recursos obtêm o último código de cor na linha no.3. e, portanto, todos eles têm a mesma cor em vez de cada elemento é um individual.
Eu uso o QGIS 2.8.8 Wien e, portanto, as soluções propostas para o QGIS 3 não funcionam corretamente.
b = iface.activeLayer()
symbols = b.rendererV2().symbols()
symbol = symbols[0]
for f in b.getFeatures():
expr = f['rgb']
express = "color_rgb("+str(expr) +")"
symbol.symbolLayer(0).setDataDefinedProperty('color', express)
b.triggerRepaint()
iface.legendInterface().refreshLayerSymbology(b)


Respostas
2 LouisCottereau Aug 18 2020 at 21:08
Aqui está um código que adaptei para você, ele funcionou no meu qgis 2.18.28:
b = iface.activeLayer()
fni = b.fieldNameIndex("rgb")
unique_values = b.uniqueValues(fni)
# fill categories
categories = []
for unique_value in unique_values:
red, blue, green = unique_value.split(",")
# initialize the default symbol for this geometry type
symbol = QgsSymbolV2.defaultSymbol(b.geometryType())
symbol.setSize(size)
# configure a symbol layer
layer_style = {}
layer_style['color'] = '%d, %d, %d' % (red, blue, green)
layer_style['outline'] = '#000000'
symbol_layer = QgsSimpleFillSymbolLayerV2.create(layer_style)
# replace default symbol layer with the configured one
if symbol_layer is not None:
symbol.changeSymbolLayer(0, symbol_layer)
# create renderer object
category = QgsRendererCategoryV2(unique_value, symbol, str(unique_value))
# entry for the list of category items
categories.append(category)
# create renderer object
renderer = QgsCategorizedSymbolRendererV2('$id', categories)
# assign the created renderer to the layer
if renderer is not None:
b.setRendererV2(renderer)
b.triggerRepaint()
b.triggerRepaint()
iface.legendInterface().refreshLayerSymbology(b)
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas