操作方法

操作方法:创建显示 ArcGIS Pro 顶部值的弹出窗口饼图图例

Last Published: May 29, 2025

描述

在 ArcGIS Pro 中,Arcade 表达式可用于在弹出窗口饼图图例中显示顶部字段值。 本文提供了一个示例和说明,使用 Arcade 表达式创建弹出窗口饼图图例,该图例显示加拿大安大略省卡利登市家庭使用频率最高的三种语言。

解决方案或解决方法

  1. 启动 ArcGIS Pro 并打开该工程。
  2. 内容窗格中,右键单击要素类,然后单击配置弹出窗口以打开要素类的“配置弹出窗口”窗格。
从“内容”窗格中打开要素类的“配置弹出窗口”工具
  1. 配置弹出窗口窗格中,单击表达式以使用 Arcade 表达式添加要在弹出窗口中使用的字段。
  2. 表达式窗格中,单击新建
  3. 表达式构建器对话框中,为 Arcade 表达式配置以下参数:
    1. 对于名称,重命名新表达式。
    2. 对于标题,为新表达式指定标题。
  4. 对于表达式部分,插入以下 Arcade 表达式。
    1. 要定义存储竞争数字字段值和字段别名属性文本的数组参数,请指定以下内容:
var <variableName1> = [
      {value: $feature.<fieldName1>, alias: " <fieldAlias1>"},
      {value: $feature.<fieldName2>, alias: " <fieldAlias2>"},
      ...
      {value: $feature.<fieldName214>, alias: " <fieldAlias214>"}
];
  1. 指定以下语句以按数组值重新索引数组。
function getValuesArray(a){
  var valuesArray = []
  for(var i in a){
    valuesArray[i] = a[i].value;
  }
  return valuesArray;
}
  1. 指定以下语句来搜索和编译与字段数组相关的字段别名。
function findAliases(topA,fullA){
  var aliases = [];
  var found = "";
  for(var i in topA){
    for(var k in fullA){
      if(topA[i] == fullA[k].value && topA[i] > 0 && Find(fullA[k].alias, found) == -1){
        found += fullA[k].alias;
        aliases[Count(aliases)] = {
          alias: fullA[k].alias,
          value: topA[i]
        };
      }
    }
  }
  return aliases;
}
  1. 指定以下语句以对数组进行从最高到最低的字段值排序,并返回字段别名和字段值。
    • 对于 <numberOfTopValuesToDisplay>,输入要显示的所需排名靠前值数。 在本例中,数字为 3。
    • 对于 <textToDisplayWhenThereIsNoValue>,输入字段值为空时要显示的文本。 在此示例中,要显示的文本是“Nobody lives here”。
function getTopGroups(groupsArray){
    
  var values = getValuesArray(groupsArray);
  var topValues = IIF(Max(values) > 0, Top(Reverse(Sort(values)),<numberOfTopValuesToDisplay>), "<textToDisplayWhenThereIsNoValue>");
  var topAliases = findAliases(topValues,groupsArray);
    
  if(TypeOf(topValues) == "String"){
    return topValues;
  } else {
    var content = "";
    for(var i in topAliases){
      content += (i+1) + "." + topAliases[i].alias + " - " + Text(topAliases[i].value, "#,###");
      content += IIF(i < Count(topAliases)-1, "<br/>", "");
    }
  }
    
  return content;
}
 
getTopGroups(<variableName1>);
Note:
The legend numbering does not directly represent the ranking when there are more than two similar reference values. For example, the third most spoken languages in the Caledon area are Italian and Tamil, which are spoken in 45 households each.

下面的代码块显示了加拿大安大略省卡利登市家庭中使用使用频率最高的三种语言的完整工作表达式。

var groups = [
      {value: $feature.MO_Arabic, alias: " Arabic"},
      {value: $feature.MO_Armenian, alias: " Armenian"},
      {value: $feature.MO_Belarusian, alias: " Belarusian"},
      {value: $feature.MO_Bengali, alias: " Bengali"},
      {value: $feature.MO_Bulgarian, alias: " Bulgarian"},
      {value: $feature.MO_Burmese, alias: " Burmese"},
      {value: $feature.MO_Catalan, alias: " Catalan"},
      {value: $feature.MO_Croatian, alias: " Croatian"},
      {value: $feature.MO_Czech, alias: " Czech"},
      {value: $feature.MO_Danish, alias: " Danish"},
      {value: $feature.MO_Dutch, alias: " Dutch"},
      {value: $feature.MO_English, alias: " English"},
      {value: $feature.MO_Finnish, alias: " Finnish"},
      {value: $feature.MO_French, alias: " French"},
      {value: $feature.MO_German, alias: " German"},
      {value: $feature.MO_Greek, alias: " Greek"},
      {value: $feature.MO_Gujarati, alias: " Gujarati"},
      {value: $feature.MO_Hakka, alias: " Hakka"},
      {value: $feature.MO_Hebrew, alias: " Hebrew"},
      {value: $feature.MO_Hindi, alias: " Hindi"},
      {value: $feature.MO_Hungarian, alias: " Hungarian"},
      {value: $feature.MO_Indonesian, alias: " Indonesian"},
      {value: $feature.MO_Iranian_Persian, alias: " IranianPersian"},
      {value: $feature.MO_Irish, alias: " Irish"},
      {value: $feature.MO_Italian, alias: " Italian"},
      {value: $feature.MO_Japanese, alias: " Japanese"},
      {value: $feature.MO_Korean, alias: " Korean"},
      {value: $feature.MO_Latvian, alias: " Latvian"},
      {value: $feature.MO_Macedonian, alias: " Macedonian"},
      {value: $feature.MO_Malay, alias: " Malay"},
      {value: $feature.MO_Mandarin, alias: " Mandarin"},
      {value: $feature.MO_Mongolian, alias: " Mongolian"},
      {value: $feature.MO_Nepali, alias: " Nepali"},
      {value: $feature.MO_Norwegian, alias: " Norwegian"},
      {value: $feature.MO_Polish, alias: " Polish"},
      {value: $feature.MO_Punjabi_Panjabi, alias: " Punjabi(Panjabi)"},
      {value: $feature.MO_Romanian, alias: " Romanian"},
      {value: $feature.MO_Russian, alias: " Russian"},
      {value: $feature.MO_Serbian, alias: " Serbian"},
      {value: $feature.MO_Sindhi, alias: " Sindhi"},
      {value: $feature.MO_Spanish, alias: " Spanish"},
      {value: $feature.MO_Swahili, alias: " Swahili"},
      {value: $feature.MO_Tamil, alias: " Tamil"},
      {value: $feature.MO_Thai, alias: " Thai"},
      {value: $feature.MO_Tibetan, alias: " Tibetan"},
      {value: $feature.MO_Turkish, alias: " Turkish"},
      {value: $feature.MO_Ukrainian, alias: " Ukrainian"},
      {value: $feature.MO_Uzbek, alias: " Uzbek"},
      {value: $feature.MO_Vietnamese, alias: " Vietnamese"},
      {value: $feature.MO_Welsh, alias: " Welsh"},
      {value: $feature.MO_Wu_Shanghainese, alias: " Wu(Shanghainese)"},
      {value: $feature.MO_Yue_Cantonese, alias: " Yue(Cantonese)"}
];

function getValuesArray(a){
  var valuesArray = []
  for(var i in a){
    valuesArray[i] = a[i].value;
  }
  return valuesArray;
}

function findAliases(topA,fullA){
  var aliases = [];
  var found = "";
  for(var i in topA){
    for(var k in fullA){
      if(topA[i] == fullA[k].value && topA[i] > 0 && Find(fullA[k].alias, found) == -1){
        found += fullA[k].alias;
        aliases[Count(aliases)] = {
          alias: fullA[k].alias,
          value: topA[i]
        };
      }
    }
  }
  return aliases;
}
 
function getTopGroups(groupsArray){
    
  var values = getValuesArray(groupsArray);
  var topValues = IIF(Max(values) > 0, Top(Reverse(Sort(values)),3), "Nobody lives here");
  var topAliases = findAliases(topValues,groupsArray);
    
  if(TypeOf(topValues) == "String"){
    return topValues;
  } else {
    var content = "";
    for(var i in topAliases){
      content += (i+1) + "." + topAliases[i].alias + " - " + Text(topAliases[i].value, "#,###");
      content += IIF(i < Count(topAliases)-1, "<br/>", "");
    }
  }
    
  return content;
}
 
getTopGroups(groups);
  1. 单击验证以运行表达式测试。 如果表达式有效,请单击确定
包含 Arcade 表达式示例的表达式构建器对话框
  1. 表达式窗格中,单击返回 返回图标
“表达式”窗格
  1. 单击文本以添加文本弹出元素,然后单击文本元素上的编辑弹出元素 编辑弹出窗口元素
“配置弹出窗口”窗格
  1. 文本选项窗格中,指定图例和新创建的表达式的标题。 在此示例中,新创建的表达式是 {expression/expression3}。 单击返回 返回图标 以应用文本弹出元素配置。
文本选项窗格

下图显示了新配置的弹出窗口饼图图例,其中包含加拿大安大略省卡利登市使用频率最高的三种语言。

ArcGIS Pro 中新配置的弹出窗口饼图图例

文章 ID: 000031637

接收通知并查找新问题或常见问题的解决方案

从我们全新的 AI 聊天机器人中获得简明答案和视频解决方案。

下载 Esri 支持应用程序

相关信息

发现关于本主题的更多内容

获取来自 ArcGIS 专家的帮助

联系技术支持部门

下载 Esri 支持应用程序

转至下载选项