updateColorizer
汇总
正是通过 Symbology 类,您可以访问要素图层的渲染器或栅格图层的着色器。
讨论
典型的工作流是参考图层的 symbology ,进行更改,然后将更改应用回图层。
重要的是,应首先确保图层支持渲染器或着色器并在对其进行更新之前了解其类型。 为此,可使用内置 hasattr 函数。
arcpy.mp 中当前支持的要素图层渲染器如下: SimpleRenderer 、 GraduatedColorsRenderer 、 GraduatedSymbolsRenderer 、 UnclassedColorsRenderer 和 UniqueValueRenderer 。 支持以下栅格着色器: RasterClassifyColorizer 、 RasterStretchColorizer 和 RasterUniqueValueColorizer 。
支持的渲染器和着色器仅显示一组基本属性。 可以使用 CIM 访问其他属性。 Layer 类具有 getSymbologyDefinition 和 setSymbologyDefinition 方法。 这些方法可用于更新不受支持的 arcpy.mp 渲染器或着色器,方法为进行直接的 CIM 更改或交换出从 Map 或 LayerFile 中的另一个图层引用的符号系统。 下面的第三个和第四个代码示例演示了这些工作流。
语法
updateColorizer()
属性
| 名称 | 说明 | 数据类型 |
|---|---|---|
|
colorizer (只读) |
获取栅格图层的着色器对象。支持的类型为: RasterClassifyColorizer 和 RasterUniqueValueColorizer 。 |
Object |
|
renderer (只读) |
获取要素图层的渲染器对象。支持的类型为: GraduatedColorsRenderer 、 GraduatedSymbolsRenderer 、 SimpleRenderer 或 UniqueValueRenderer 。 |
Object |
方法
updateColorizer(colorizer_name)
updateColorizer 方法用于更改栅格图层的着色器。
| 名称 | 说明 | 数据类型 |
|---|---|---|
|
colorizer_name |
The supported renderers are as follows:
|
String |
updateRenderer(renderer_name)
updateRenderer 方法用于更改图层渲染器。
| 名称 | 说明 | 数据类型 |
|---|---|---|
|
renderer_name |
The supported renderers are as follows:
|
String |
代码示例
以下脚本会遍历每个要素图层并使用 hasattr 函数测试其 symbology 是否支持 renderer 属性。 接下来,如果渲染器 type 是 SimpleRenderer ,则脚本将会使用 updateRenderer 方法将其更改为 GraduatedColorsRenderer ,然后将其 breakCount 值设置为 6。最后,它会将符号系统重新应用于图层,然后再保存结果。
import arcpy, os, sys
relpath = os.path.dirname(sys.argv[0])
p = arcpy.mp.ArcGISProject(relpath + r'\\Symbol.aprx')
m = p.listMaps('Map')[0]
for lyr in m.listLayers():
if lyr.isFeatureLayer:
sym = lyr.symbology
if hasattr(sym, 'renderer'):
if sym.renderer.type == 'SimpleRenderer':
sym.updateRenderer('GraduatedColorsRenderer')
sym.renderer.breakCount = 6
lyr.symbology = sym
p.saveACopy(relpath + r"\\SavedOutput.aprx")
以下脚本首先测试图层的符号系统是否支持 colorizer 属性,然后确认渲染器是否为 RasterClassifyColorizer 。 接下来,将更改 classificationField 和 breakCount 。 最后,将 ColorRamp 更改为名为 青色到紫色 的色带。
import arcpy
import os
import sys
relpath = os.path.dirname(sys.argv[0])
p = arcpy.mp.ArcGISProject(relpath + r'\\RasterClassify.aprx')
m = p.listMaps('Map')[0]
l = m.listLayers('Raster1')[0]
sym = l.symbology
if hasattr(sym, 'colorizer'):
if sym.colorizer.type == 'RasterClassifyColorizer':
sym.colorizer.classificationField = 'Value'
sym.colorizer.breakCount = 7
sym.colorizer.colorRamp = p.listColorRamps('Cyan to Purple')[0]
l.symbology = sym
p.saveACopy(relpath + r'\\SavedOutput.aprx')
以下脚本演示了如何使用 Python CIM 访问来修改未在 arcpy.mp API 中显示的其他符号系统设置。 该脚本将为面符号的轮廓符号图层添加虚线效果。 该脚本先获取图层的 CIM 定义。 随后,获取该图层的第一个符号图层,即轮廓符号。 如果不存在图层效果,该脚本将创建一个效果,然后修改虚线效果。 最后,将 CIM 更改内容推送回该图层。 有关 CIM 的详细信息,请参阅 Python CIM 访问 帮助主题。
p = arcpy.mp.ArcGISProject('current')
m = p.listMaps('Symbology')[0]
l = m.listLayers('States_SingleSymbol')[0]
l_cim = l.getDefinition('V2') #Get the Layer's CIM definition
#Symbol Level 1 (Solid Stroke)
symLvl1 = l_cim.renderer.symbol.symbol.symbolLayers[0]
#If a dashed effect does not exist, create one
if len(symLvl1.effects) == 0:
newDash = arcpy.cim.CreateCIMObjectFromClassName('CIMGeometricEffectDashes', 'V2')
newDash.dashTemplate = [5, 5]
symLvl1.effects = [newDash]
#If a dashed effects does exist, modify it
else:
dash = symLvl1.effects[0]
dash.dashTemplate = [10, 10]
l.setDefinition(l_cim) #Set the Layer's CIM definition
以下脚本演示了如何使用 Python CIM 访问 应用不受支持的渲染器。 图层文件中的饼图渲染器将通过 getSymbologyDefinition 和 setSymbologyDefinition 方法应用于地图中的单一符号渲染器。
import os
p = arcpy.mp.ArcGISProject('current')
m = p.listMaps('Renderers')[0]
relpath = p.homeFolder
#Reference the two layers
l1 = m.listLayers('Counties_SingleSymbol')[0]
l2 = arcpy.mp.LayerFile(os.path.join(relpath, "LYRXs", "Counties_PieChart_MalesFemales.lyrx")).listLayers()[0]
#Set single symbol to Pie chart (from LYRX)
l1.setSymbologyDefinition(l2.getSymbologyDefinition('V3'))