Solo intento ejecutar el siguiente código que ya se encuentra en el libro de cocina de pyqgis para crear simbología de colores graduados (como en el ejemplo con 2 clases)
Defino la información de origen para el archivo de forma, pero cuando ejecuto el código dentro de mi complemento de prueba, solo agrega la capa sin clasificar. Solo agrega como de costumbre, todas las polilíneas parecen iguales.
¿Alguna solución o código / método de trabajo?
enlace al código en el libro de cocina http://www.qgis.org/pyqgis-cookbook/vector.html#graduated-symbol-renderer
from qgis.core import (QgsVectorLayer, QgsMapLayerRegistry, QgsGraduatedSymbolRendererV2, QgsSymbolV2,QgsRendererRangeV2)
myVectorLayer = QgsVectorLayer('C:/my_test_shape_file.shp', 'test_shp_file', 'ogr')
myTargetField = 'target_field'
myRangeList = []
myOpacity = 1
# Make our first symbol and range...
myMin = 0.0
myMax = 50.0
myLabel = 'Group 1'
myColour = QtGui.QColor('#ffee00')
mySymbol1 = QgsSymbolV2.defaultSymbol(myVectorLayer.geometryType())
mySymbol1.setColor(myColour)
mySymbol1.setAlpha(myOpacity)
myRange1 = QgsRendererRangeV2(myMin, myMax, mySymbol1, myLabel)
myRangeList.append(myRange1)
#now make another symbol and range...
myMin = 50.1
myMax = 100
myLabel = 'Group 2'
myColour = QtGui.QColor('#00eeff')
mySymbol2 = QgsSymbolV2.defaultSymbol(myVectorLayer.geometryType())
mySymbol2.setColor(myColour)
mySymbol2.setAlpha(myOpacity)
myRange2 = QgsRendererRangeV2( myMin, myMax, mySymbol2, myLabel)
myRangeList.append(myRange2)
myRenderer = QgsGraduatedSymbolRendererV2('', myRangeList)
myRenderer.setMode(QgsGraduatedSymbolRendererV2.EqualInterval)
myRenderer.setClassAttribute(myTargetField)
myVectorLayer.setRendererV2(myRenderer)
QgsMapLayerRegistry.instance().addMapLayer(myVectorLayer)
El código de @ Kelly funciona perfectamente.
Sin embargo, noté que tanto el código (uno que escribí en mi primer mensaje y el suyo en el segundo mensaje) NO funcionan en QGIS v1.7.3 sino que FUNCIONA en QGIS v1.8.0. Creo que esto fue un error (?) Que ya se resolvió en v1.8.0
Y una pregunta más;
¿Tiene algún código de muestra para la clasificación (cortes naturales, Jenks) del "numeric_attribute_field" en función del número dado de clases (es decir, ninguna de las clases será una variable en el código, diga "n", y lo pasaré del GUI del complemento, es decir, n = spinBox.value ())
Respuestas:
¿Qué tipo de capa estás usando?
Descubrí que con la capa de puntos estaba usando la siguiente línea devuelta
None
Sin embargo, esto podría solucionarse reemplazándolo con una llamada al
validatedDefaultSymbol
método desde el siguiente código. La premisa básica es llamarQgsSymbolV2.defaultSymbol()
y luego validar y, si es necesario, hacer correcciones.Editar: Cambios para garantizar la compatibilidad con QGIS 1.8 y el maestro actual (27/01/13); extendido a una serie de ejemplos con un alcance más amplio.
Los fragmentos a continuación están formateados para ser pegados en la consola de Python y para ser aplicados a los Datos Naturales de la Tierra 1: 10 millones de lugares poblados disponibles desde aquí . Tenga en cuenta que los fragmentos posteriores dependen de las definiciones e importaciones del primero.
1) Este es un ejemplo de aplicación de categorías personalizadas pero codificadas a una capa determinada.
2) Este ejemplo se aplica, a su vez, a cada uno de los modos estándar admitidos por QgsGraduatedSymbolRendererV2. El valor de las clases se tratará como una pista en lugar de como una regla según lo requiera cada modo específico. La línea setSizeScaleField se puede descomentar si se desea, sin embargo, los valores de la columna LABELRANK son demasiado grandes para verse bien en los niveles de zoom estándar.
3) Este ejemplo demuestra la aplicación de divisiones personalizadas dinámicas. En este caso, las características se ordenan por valor, luego se dividen en grupos de modo que la suma de los valores en cada categoría sea igual. es decir, dividir la población mundial en tercios que viven en lugares de la población más pequeña / mediana / más grande.
fuente