ggplot自定义表情/形状无法渲染,显示为矩形
解决ggplot中自定义心形图标显示为矩形的问题
问题核心:geom_point的shape参数仅支持标准PCH图形编码(0-25及部分扩展编码),没法直接识别Unicode emoji字符(比如\u2764),所以会显示成矩形占位符。
方案1:用geom_text直接渲染emoji
直接替换geom_point为geom_text,把心形emoji作为文本内容,就能正常显示:
library(ggplot2) df <- read.table(text="x y 1 3 2 4 3 6 4 7", header=TRUE) ggplot(data = df, aes(x =x, y=y)) + geom_text(label = "\u2764", colour = "red", size = 8)
要是需要带填充效果的心形,可以换成\u1F493这个带白色填充的红心形emoji。
方案2:用ggtext包实现样式控制
如果要单独设置轮廓、填充这类细节,用ggtext的geom_richtext,通过HTML样式来渲染:
library(ggplot2) library(ggtext) df <- read.table(text="x y 1 3 2 4 3 6 4 7", header=TRUE) ggplot(data = df, aes(x =x, y=y)) + geom_richtext( label = "<span style='color:red; font-size:20pt;'>❤️</span>", fill = NA, label.color = NA )
这里设置fill=NA和label.color=NA是为了去掉文本框的背景和边框,只留emoji。
方案3:用emojifont包扩展图标库
如果需要更多自定义图标,emojifont包可以调用系统emoji字体:
library(ggplot2) library(emojifont) df <- read.table(text="x y 1 3 2 4 3 6 4 7", header=TRUE) # 首次使用可能需要加载字体 load.emojifont() ggplot(data = df, aes(x =x, y=y)) + geom_text(family="EmojiOne", label = emoji("heart"), size=8, color="red")
注意要确保系统安装了对应的emoji字体,不然可能显示异常。
内容的提问来源于stack exchange,提问作者Em Reit
相关产品推荐
相关产品推荐

