You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 17:52:33