addItem
汇总
通过 LegendElement 类可以访问用于管理布局上的图例元素的属性和方法。
讨论
LegendElement 是一种特定类型的 MapSurroundElement 布局元素。 该元素还具有与 MapFrame 对象的关联,包含特定于图例的附加属性,包括对 LegendItem 对象的访问。 Layout 对象上的 listElements 方法将返回页面布局元素对象的 Python 列表。 如要仅返回 LegendElement 对象的列表,请为 element_type 参数使用 LEGEND_ELEMENT 常量。 还可以使用 wildcard 值,基于元素的 name 值对搜索进行进一步优化。 为每个页面布局元素提供唯一名称,以便轻松地引用元素。
您可以使用 Layout 对象的 createMapSurroundElement 方法,将 map_surround_type 设置为 LEGEND 以创建图例。可以在创建期间指定现有的 StyleItem 值以控制元素在布局中的显示方式。
默认情况下,添加到 Map 对象的图层将自动添加到 LegendElement 对象。 这样便可以使用空地图和图例创建布局,但在将新图层添加到地图时动态更新这些项目。 有多个以 'sync' 为开头的属性可用于控制如何将项目添加到图例。 您也可以使用 fittingStrategy 和 columnCount 属性控制图例的外观。
elementPositionX 和 elementPositionY 值取决于元素的锚点位置,该位置在 格式 选项卡上进行设置。 如果希望在添加图层时 LegendElement 对象向下延伸,请将锚点位置设置为左上角。 您可以使用 setAnchor 方法更改位置。
items 属性将返回 LegendItem 类列表。您可以单独对这些类进行修改,以进一步自定义图例的内容。 LegendElement 类还提供 AddItem 、 MoveItem 和 RemoveItem 方法,以便您管理图例中的项目。 LegendElement 和 LegendItem 类仅提供对常用属性的访问权限。 可以使用 Python CIM 访问 对内容进行细化访问。
语法
addItem()
属性
| 名称 | 说明 | 数据类型 |
|---|---|---|
|
anchor (只读) |
返回表示当前锚点位置的以下字符串值之一。 要更改值,请使用
|
String |
|
columnCount (读取和写入) |
图例中指定列的数量。 此属性仅在将 |
Long |
|
elementHeight (读取和写入) |
元素的高度(以页面单位计)。 |
Double |
|
elementPositionX (读取和写入) |
元素的锚点位置的 x 位置。 分配或报告的单位为页面单位。 |
Double |
|
elementPositionY (读取和写入) |
元素的锚点位置的 y 位置。 分配或报告的单位为页面单位。 |
Double |
|
elementRotation (读取和写入) |
相对于锚点位置旋转元素。 正值表示顺时针旋转,负值表示逆时针旋转。 |
Double |
|
elementWidth (读取和写入) |
元素的宽度(以页面单位计)。 |
Double |
|
fittingStrategy (读取和写入) |
表示有效自适应策略方法的字符串。 有效值如下:
|
String |
|
items (只读) |
返回相关 LegendItem 类列表。 您不能直接设置此属性,但是,可以遍历图例项并修改其属性。 |
List |
|
isOverflowing (只读) |
如果图例中的所有内容均不在所提供几何的边界内,则返回 |
Boolean |
|
locked (读取和写入) |
设置为 |
Boolean |
|
longName (只读) |
元素的全名,包括组信息(如果存在)。 例如,在一个名称为 |
String |
|
mapFrame (读取和写入) |
对关联 MapFrame 的引用。 |
MapFrame |
|
name (读取和写入) |
元素的名称。 有必要确保所有元素均具有唯一名称,因为这样可以轻松对其进行引用。 |
String |
|
parentGroupElement (只读) |
如果元素在组中,则返回的值为 |
GroupElement |
|
showTitle (读取和写入) |
一个布尔值,用于控制标题是否显示在图例中。 |
Boolean |
|
syncLayerOrder (读取和写入) |
一个布尔值,用于控制图例中的项目是否与地图中图层的顺序相同。 |
Boolean |
|
syncLayerVisibility (读取和写入) |
一个布尔值,用于控制项目是否应自动出现在图例中(如果图例在地图中可见)。 |
Boolean |
|
syncNewLayer (读取和写入) |
一个布尔值,用于控制当项目被添加到地图中时是否应自动将该项目添加到图例中。 |
Boolean |
|
syncReferenceScale (读取和写入) |
一个布尔值,用于控制图例中的符号是否与地图中符号的比例相匹配(如果设置了参考比例)。 |
Boolean |
|
title (读取和写入) |
表示图例标题的文本字符串。 |
String |
|
type (只读) |
返回值 |
String |
|
visible (读取和写入) |
如果元素在布局上可见,则返回 |
Boolean |
方法
addItem(layer, {add_position})
您可以使用基本放置选项将 图层 添加到图例中。
| 名称 | 说明 | 数据类型 |
|---|---|---|
|
layer |
对 Layer 对象(将要添加到图例中的图层表示为 LegendItem )的引用。 |
Layer |
|
add_position (可选) |
此常数用于确定在图例内添加的图层的放置位置。
(默认值为 TOP) |
String |
返回值
| 数据类型 | 说明 |
|---|---|
|
LegendItem |
LegendItem 对象。 |
applyStyleItem(style_item)
将 StyleItem 应用于 LegendElement 。
| 名称 | 说明 | 数据类型 |
|---|---|---|
|
style_item |
A reference to a |
StyleItem |
getDefinition(cim_version)
返回图例元素的 CIM 定义。
| 名称 | 说明 | 数据类型 |
|---|---|---|
|
cim_version |
A string that represents the major version of the CIM that will be used.
|
String |
返回值
| 数据类型 | 说明 |
|---|---|
|
Object |
返回 |
moveItem(reference_item, move_item, {move_position})
您可以将图例项移动到图例中的特定位置。
| 名称 | 说明 | 数据类型 |
|---|---|---|
|
reference_item |
LegendItem 对象表示现有图例项,该项目用于确定移动 |
LegendItem |
|
move_item |
对 LegendItem 对象(表示要移动的图层)的引用。 |
Layer |
|
move_position (可选) |
此常数用于确定移动的图层相对于参考图层的放置位置。
(默认值为 BEFORE) |
String |
removeItem(remove_item)
允许您从图例中移除图例项。
| 名称 | 说明 | 数据类型 |
|---|---|---|
|
remove_item |
对 LegendItem 对象(表示要移除的项目)的引用。 |
LegendItem |
setAnchor(anchor)
setAnchor 方法可控制 LegendElement 的锚点位置。
| 名称 | 说明 | 数据类型 |
|---|---|---|
|
anchor |
A string that specifies the location of the anchor position.
|
String |
setDefinition(definition_object)
设置图例元素的 CIM 定义。
| 名称 | 说明 | 数据类型 |
|---|---|---|
|
definition_object |
A modified CIM definition object originally retrieved using |
Object |
代码示例
以下脚本可向布局添加新图例并更新多个属性。 在添加图层文件之前,该脚本会关闭图层同步,以使地形色彩映射表不显示。 添加图层后,图层同步将再次打开。
import arcpy
p = arcpy.mp.ArcGISProject(r'C:\Projects\YosemiteNP\Yosemite_Trails.aprx')
#Create a new legend and set legend properties
lyt = p.listLayouts('Main Attractions')[0]
mf = lyt.listElements('MapFrame_Element', 'Yose*')[0]
legSi = p.listStyleItems('ArcGIS 2D', 'LEGEND', key='*Legend 3*' )[0]
leg = lyt.createMapSurroundElement(arcpy.Point(0.75,3.5), 'LEGEND', mf, legSi, 'New Legend Element')
leg.elementWidth = 7
leg.elementHeight = 3
leg.fittingStrategy = 'AdjustFontSize'
leg.columnCount = 5
leg.title = 'Yosemite National Park'
#Add a layer file but first turn of legend layer synchronization
leg.syncNewLayer = False
lyr = arcpy.mp.LayerFile(r'C:\Projects\YosemiteNP\LayerFiles\Terrain.lyrx')
m = p.listMaps('Yosemite National Park')[0]
m.addLayer(lyr, 'BOTTOM')
leg.syncNewLayer = True
p.saveACopy(r"C:\Projects\YosemiteNP\Yosemite_Trails_OUT.aprx")
以下脚本可将 fittingStrategy 设置为 ManualColumns ,然后将 columnCount 设置为 4 。 接下来,脚本会构建一个字典,其中包含图例项名称和用于放置图例项的列。 最后,脚本会遍历每个图例项,并基于字典值将其放置在适当的列中。
import arcpy, os, sys
relpath = os.path.dirname(sys.argv[0])
p = arcpy.mp.ArcGISProject(os.path.join(relpath, 'NewMexicoGeology', 'NewMexicoGeology.aprx'))
lyt = p.listLayouts('Layout')[0]
leg = lyt.listElements('LEGEND_ELEMENT')[0]
#Change Title and fitting strategy to (4) Manual Columns
leg.fittingStrategy = 'ManualColumns'
leg.columnCount = 4
#Dictionary of item name and column pairs
legDict = {'Cretaceous' : 1,
'Mississippian' : 1,
'Tertiary' : 2,
'Silurian' : 2,
'Ordovician' : 2,
'Quaternary' : 3,
'Jurassic' : 3,
'Devonian' : 3,
'Permian': 4,
'Proterozoic' : 4,
'Other' : 4 }
#Place each legend item into the appropriate column based on name
for legItm in leg.items:
legItm.column = legDict[legItm.name]
p.saveACopy(os.path.join(relpath, 'NewMexicoGeology', 'NewMexicoGeology_OUT.aprx'))
以下脚本使用 Python CIM 访问修改图例的标题符号系统和图面宽度。 该脚本还使用 CIM 修改唯一值渲染器中每个类的图面形状。
p = arcpy.mp.ArcGISProject('current')
lyt = p.listLayouts('Layout')[0]
leg = lyt.listElements('LEGEND_ELEMENT')[0]
#Use Legend poperties to display and modify title text
leg.showTitle = True
leg.title = "Legend CIM Changes"
#CIM modifications to Title font properties and patch width
lyt_cim = lyt.getDefinition('V3')
for elm in lyt_cim.elements:
if elm.name == "Legend":
leg_cim = lyt_cim.elements[1]
leg_cim.titleSymbol.symbol.height = 30
leg_cim.titleSymbol.symbol.horizontalAlignment = 'Center'
leg_cim.titleSymbol.symbol.fontStyleName = 'Bold'
leg_cim.titleSymbol.symbol.symbol.symbolLayers[0].color.values = [255,0,0,100]
for itm in reversed(elm.items): #Done in reversed order
itm.patchWidth = 50
lyt.setDefinition(lyt_cim)
#CIM modification to layer patch shape (it affects legend items)
m = p.listMaps('Overview Map')[0]
for itm in leg.items:
lyr = m.listLayers(itm.name)[0]
if lyr.symbology.renderer.type == 'UniqueValueRenderer':
lyr_cim = lyr.getDefinition('V3')
for grp in lyr_cim.renderer.groups: #Iterate through each group
for cls in grp.classes: #Iterate through each class
cls.patch = "AreaNaturalPoly" #Called Natural area in app
lyr.setDefinition(lyr_cim)