Index de l'article

Symbologies

Simple symbology on points

myLayer = QgsProject.instance().mapLayersByName("My points")[0]
 
symbol_peak = QgsMarkerSymbol.createSimple({'name': 'Triangle', 'color': 'green', 'outline_color': 'black', 'size': '4'})
myLayer.renderer().setSymbol(symbol_peak)
myLayer.triggerRepaint()
iface.layerTreeView().refreshLayerSymbology(myLayer.id())
iface.mapCanvas().refresh()

Other point markers: 

circle square cross rectangle diamond pentagon triangle equilateral_triangle star regular_star arrow filled_arrowhead x

Use PNG on points

You can build your own picture as PNG and use it in symbology with QgsRasterMarkerSymbolLayer:

myPath = r'C:\\Users\\georg\\Downloads\\'
 
project = QgsProject.instance()
project.removeAllMapLayers()
project.clear()
iface.mapCanvas().refresh()
 
# Path of layers
peaks = QgsVectorLayer(myPath + 'peaks_selection/peaks_selection.shp', 'Peaks', 'ogr')
project.addMapLayer(peaks)
 
myLayer = QgsProject.instance().mapLayersByName("Peaks")[0]
 
# Use a SVG in symbology
myPicture = myPath + 'flower.png'
 
symbolLayer = QgsRasterMarkerSymbolLayer(myPicture)
symbolLayer.setSize(10)
 
symbol_peak = QgsMarkerSymbol.createSimple({})
symbol_peak.changeSymbolLayer(0, symbolLayer)
 
myLayer.renderer().setSymbol(symbol_peak)
myLayer.triggerRepaint()
 
iface.layerTreeView().refreshLayerSymbology(myLayer.id())
iface.mapCanvas().refresh()

Use SVG on points

Use QgsSvgMarkerSymbolLayer, but attention, SVG is a very specific format, maybe prefer PNG.

myPath = r'C:\\Users\\georg\\Downloads\\'
 
project = QgsProject.instance()
project.removeAllMapLayers()
project.clear()
iface.mapCanvas().refresh()
 
# Path of layers
peaks = QgsVectorLayer(myPath + 'peaks_selection/peaks_selection.shp', 'Peaks', 'ogr')
project.addMapLayer(peaks)
 
myLayer = QgsProject.instance().mapLayersByName("Peaks")[0]
 
# Use a SVG in symbology
mySvg = 'C:/Program Files/QGIS 3.28.13/apps/qgis-ltr/resources/themes/Night Mapping/icons/eye.svg'
 
svg_symbol_layer = QgsSvgMarkerSymbolLayer(mySvg)
svg_symbol_layer.setSize(10)
 
symbol_peak = QgsMarkerSymbol.createSimple({})
symbol_peak.changeSymbolLayer(0, svg_symbol_layer)
 
myLayer.renderer().setSymbol(symbol_peak)
myLayer.triggerRepaint()
 
iface.layerTreeView().refreshLayerSymbology(myLayer.id())
iface.mapCanvas().refresh()

Simple symbology on lines

With HTML color.

myroads = QgsProject.instance().mapLayersByName("Roads")[0]
myrivers = QgsProject.instance().mapLayersByName("Rivers")[0]
 
# Roads
symbol = QgsLineSymbol.createSimple({'line_style': 'dash', 'line_width': '0.5', 'color': 'black'})
myroads.renderer().setSymbol(symbol)
myroads.triggerRepaint()
iface.layerTreeView().refreshLayerSymbology(myroads.id())
 
# Rivers
symbol = QgsLineSymbol.createSimple({'line_style': 'solid', 'line_width': '0.75', 'color': '#0088CC'})
myrivers.renderer().setSymbol(symbol)
myrivers.triggerRepaint()
iface.layerTreeView().refreshLayerSymbology(myrivers.id())
 
iface.mapCanvas().refresh()

Simple symbology on polygons

With RGB color (50,165,77,75), and some transparency (here 75, from 0 to 255), et on rafraîchit le panneau des couches afin que notre légende y soit aussi prise en compte:

myground = QgsProject.instance().mapLayersByName("Ground")[0]
 
symbol = QgsFillSymbol.createSimple({'line_style': 'solid', 'line_width': '0.2', 'color': '50,165,77,75'})
myground.renderer().setSymbol(symbol)
 
myground.triggerRepaint()
iface.layerTreeView().refreshLayerSymbology(myground.id())
iface.mapCanvas().refresh()

Check current symbology properties

my_layer = QgsProject.instance().mapLayersByName("My points")[0]
print(my_layer.renderer().symbol().symbolLayers()[0].properties())

Categorized Symbology

For a categorized symbology, we will need to define several symbologies, then assign them based on attribute values.

Here we put all our peaks in blue triangle (, then we will look for a single peak based on its name (My best peak, in the NAME field). This will change to a dark blue triangle and larger size ().

symbol_peak = QgsMarkerSymbol.createSimple({'name': 'Triangle', 'color': '#0088CC', 'outline_color': 'black', 'size': '4'})
symbol_peak_selected = QgsMarkerSymbol.createSimple({'name': 'Triangle', 'color': 'blue', 'outline_color': 'black', 'size': '7'})
 
color_peak = QgsRendererCategory(None, symbol_peak, 'Peaks', True)
color_peak_selected = QgsRendererCategory('My best peak', symbol_peak_selected, 'My best peak', True)
 
renderer = QgsCategorizedSymbolRenderer("NAME", [color_peak,color_peak_selected])
 
mylayer.setRenderer(renderer)
mylayer.triggerRepaint()
iface.mapCanvas().refresh()

Transparency on a basemap (OSM)

osm = QgsRasterLayer(urlWithParams, "OpenStreetMap", "wms")
project.addMapLayer(osm)
osm.setOpacity(0.75)
 
iface.mapCanvas().refresh()