在R语言中如何将PCH标记形状转换为字符串形式
在R语言中获取pch标记的字符串形式
嘿,我明白你想要做什么了——你已经能用plotly通过symbol和symbols参数指定pch编号绘制不同形状的标记点,现在希望把这些pch编号对应的符号转换成字符串形式,方便直接输出展示对吧?
其实R里的pch标记分两类:一类是特殊的几何图形符号(比如pch 0-14),这类对应特定的Unicode字符;另一类是ASCII字符(比如pch 32是空格,pch 65是大写字母A),这类可以直接通过编码转换获取。我们可以自定义一个getMarker函数来实现你的需求:
步骤1:建立pch到字符的映射表
首先我们先给常用的几何图形类pch编号建立对应的Unicode字符映射,你可以根据自己的需求扩展这个表:
# 建立pch编号到对应字符的映射表 pch_map <- c( "0" = "\u25A1", # 空心正方形 "1" = "\u25CB", # 空心圆形 "2" = "\u25B2", # 空心向上三角形 "3" = "\u25C6", # 空心菱形 "4" = "\u2716", # 叉号 "5" = "\u2714", # 对勾 "6" = "\u25BC", # 空心向下三角形 "7" = "\u25CF", # 实心圆形(和pch=19一致) "8" = "\u25C7", # 空心八角形 "9" = "\u25BA", # 空心向右三角形 "10" = "\u25C0", # 空心向左三角形 # 可以继续添加更多你需要的pch编号映射 "20" = "\u2022" # 小实心圆点 )
步骤2:定义getMarker函数
这个函数会先检查输入的pch编号是否在我们的映射表里,如果在就返回对应的Unicode字符;如果不在,就尝试将其转换为对应的ASCII字符:
getMarker <- function(pch) { pch_str <- as.character(pch) # 优先使用自定义映射表 if (pch_str %in% names(pch_map)) { return(pch_map[pch_str]) } else { # 处理ASCII类pch编号 return(intToUtf8(pch)) } }
步骤3:测试使用
现在你就可以像你想要的那样调用这个函数了:
firstMarkerString <- paste( "Marker number zero is ", getMarker(pch = 0)) secondMarkerString <- paste( "Marker number one is ", getMarker(pch = 1)) # 输出结果 cat(firstMarkerString, "\n") # 输出:Marker number zero is □ cat(secondMarkerString, "\n") # 输出:Marker number one is ○
补充说明
- 如果你需要更多pch编号的对应字符,可以参考R官方的pch字符对照表,把对应的Unicode字符添加到
pch_map里即可。 - 对于plotly中使用的
symbols参数,其支持的pch编号和R base绘图是一致的,所以这个函数完全适配你的场景。
内容的提问来源于stack exchange,提问作者KillaKem
相关产品推荐
相关产品推荐

