在ggplot中绘制上标而不会丢失前导零

时间:2018-02-08 15:26:01

标签: r ggplot2

问: 如何在ggplot中绘制上标文字但不丢失前导零?

问题

目标。我正在尝试使用上标信息绘制文字标签。 上标是年份的最后两位数 观察(例如,2018年为“18”,2005年为“05”)。

问题。我几乎可以让这个情节正常工作,但ggplot 吞下前导零。例如:上标“18” 正确地绘制为“18”,但上标“05”图 错误地称为“5”。

实施例

这是一个玩具示例:

## libraries
library(dplyr)
library(ggplot2)

## example data
Dat <-
    tribble(~ state, ~ year, ~ x, ~ y,
            "MI",    2010,   1,   1,
            "CA",    2005,   2,   2,
            "NY",    2011,   3,   3,
            "AK",    2003,   4,   4,
            "IL",    2012,   5,   5)

## create the label: state with a superscripted year (e.g., MI^10, AK^03)
Dat$lab <-
    with(Dat,
         paste(state,
               "^{",
               substr(as.character(year), 3, 4),
               "}",
               sep = ""))

## plot the labels: note that the 0s in the superscripts disappear
ggplot(Dat,
       aes(x     = x,
           y     = y,
           label = lab)) +
    geom_text(parse = TRUE) +
    theme_bw()

它产生以下图:

example plot showing the problematic superscripts

请注意MINYIL正确绘制 两位数的上标,但CAAK不正确 一位数的上标。 如何保留前导零?

1 个答案:

答案 0 :(得分:1)

您需要做的就是在将表达式粘贴在一起时,在要标记的数字周围添加引号。这会将数字格式化为表达式中的字符串,以便保留前导零。您可以使用转义字符\将双引号添加到已经双引号的字符串中。编辑&#34;创建标签&#34;代码的一部分如下:

Dat$lab <-
  with(Dat,
       paste(state,
             "^{\"",
             substr(as.character(year), 3, 4),
             "\"}",
             sep = ""))

我刚才用ggplot2 2.2.1对它进行了测试,结果正常。