ggplot аннотировать греческим символом и (1) апострофом или (2) между текстом

невозможно добавить греческие буквы в аннотацию ggplot, когда либо: он зажат между другим текстом, либо рассматриваемый текст содержит апостроф.

Например, следующее работает нормально:

df <- data.frame(x =  rnorm(10), y = rnorm(10))
temp<-paste("rho == 0.34")
ggplot(df, aes(x = x, y = y)) + geom_point() +
    annotate("text", x = mean(df$x), y = mean(df$y), parse=T,label = temp)

Однако ggplot взрывается, когда я это делаю:

df <- data.frame(x =  rnorm(10), y = rnorm(10))
temp<-paste("Spearman's rho == 0.34")
ggplot(df, aes(x = x, y = y)) + geom_point() +
    annotate("text", x = mean(df$x), y = mean(df$y), parse=T,label = temp)

ggplot крайне чувствителен к этим специальным символам. Другие сообщения, похоже, не решают эту проблему (извините, если нет). Заранее спасибо.


person treetopdewdrop    schedule 04.12.2014    source источник


Ответы (2)


Я почувствовал твое разочарование. Хитрость, помимо использования expression для метки, как прокомментировал @baptiste, заключается в том, чтобы передать метку as.character на ggplot.

df <- data.frame(x =  rnorm(10), y = rnorm(10))
temp <- expression("Spearman's"~rho == 0.34)
ggplot(df, aes(x = x, y = y)) + 
  geom_point() + 
  annotate("text", x = mean(df$x), y = mean(df$y), 
           parse = T, label = as.character(temp))

введите здесь описание изображения

person Scott    schedule 05.12.2014

Если кто-то пытается применить это для динамического сценария, где переменная корреляции заранее не известна, вы также можете создать экранированную версию выражения в виде строки, используя:

df <- data.frame(x =  rnorm(10), y = rnorm(10))

spearmans_rho <- cor(df$x, df$y, method='spearman')
plot_label <- sprintf("\"Spearman's\" ~ rho == %0.2f", spearmans_rho)

ggplot(df, aes(x = x, y = y)) + 
  geom_point() + 
  annotate("text", x = mean(df$x), y = mean(df$y), parse = T, label=plot_label)
person Keith Hughitt    schedule 31.01.2017