2015-12-12 3 views
9

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

данных я использую можно получить здесь

str(ggdata) 
'data.frame': 72 obs. of 8 variables: 
$ Season : Factor w/ 3 levels "Autumn","Spring",..: 2 2 2 2 2 2 2 2 2 2 ... 
$ Site : Factor w/ 27 levels "Afon Cadnant",..: 13 13 13 13 13 13 13 13 13 13 ... 
$ Isotope: Factor w/ 4 levels "14CAA","14CGlu",..: 1 1 1 1 1 1 2 2 2 2 ... 
$ Time : int 0 2 5 24 48 72 0 2 5 24 ... 
$ n  : int 3 3 3 3 3 3 3 3 3 3 ... 
$ mean : num 100 88.4 80.7 40.5 27.6 ... 
$ sd  : num 0 1.74 2.85 2.58 2.55 ... 
$ se  : num 0 1 1.65 1.49 1.47 ... 

я написал следующую функцию для создания ggplot, которая использует уровни фактора Изотоп для обозначения граней:

plot_func <- function(T) {site_plots <- ggplot(data = T) + geom_point(aes(Time, mean, colour = Season, shape = Season)) + 
    geom_line(aes(Time, mean, colour = Season, linetype = Season)) + 
    geom_errorbar(aes(Time, mean, ymax = (mean + se), ymin = (mean - se)), width = 2) + 
    labs(title = T$Site[1], y = "Percentage of isotope remaining in solution", x = "Time (h)") + 
    scale_x_continuous(breaks=c(0, 24, 48, 72)) + 
    scale_y_continuous(limits=c(0,115), breaks = c(0,25,50,75,100)) + 
    theme(axis.title.y = element_text(vjust = 5)) + 
    theme(axis.title.x = element_text(vjust = -5)) + theme(plot.title = element_text(vjust = -10)) + 
    theme_bw() + facet_wrap(~Isotope, ncol =2) 
    print(site_plots) 
    ggsave(plot = site_plots, filename = paste(T$Site[1], ".pdf"), 
    path = "C:/Users/afs61d/Dropbox/Academic/R/Practice datasets/Helens_data/Site_Isotope_Season_plots/", 
    width = 9, height = 7, dpi = 300)} 

в РЕЗУЛЬТАТЕ в этой прекрасной графике:

enter image description here

Что приятно, но я хочу, чтобы изменить фасеты этикетки теперь ... Проделав некоторые ковыряться гугле я думал, что я мог бы быть в состоянии использовать функцию labeller в качестве аргумента для передачи facet_wrap. После расстроенного часа я обнаружил, что это работает только с facet_grid !!! ??? Таким образом, альтернативный способ заключается в изменении имен уровня фактора, так дайте мне фасетов метки, которые я хочу ::

gdata$Isotope <- revalue(x = ggdata$Isotope, 
c("14CAA" = " 14C Amino Acids", "14CGlu" = "14C Glucose", 
    "14cGlu6P" = "14C Glucose-6-phosphate", "33P" = "33P Phosphate")) 

Это работает, но проблема у меня сейчас является то, что я хочу цифры в ярлыках к быть супер-сценарием. Может ли кто-нибудь предложить лучший способ достичь этого?

+0

Я думаю, что «этикетировочное» доступен для facet_wrap в разрабатываемой версии ggplot: http://docs.ggplot2.org/dev/facet_wrap.html –

+0

@BenBolker Спасибо ... это было бы очень полезно - как его установить? –

+0

@ eipi10 Я не думаю, что 'labeller' может быть передан' facet_wrap' ... что является основной проблемой –

ответ

3

Управление, чтобы разобраться! Если возникла проблема с разработкой версии ggplot, но после установки curl и devtools и переустановкой scales это сработало. Я пытался @ eipi10 ответ, но не могли бы получить, чтобы работать, поэтому я изменил имена фактор меток иначе:

ggdata$Isotope <- factor(ggdata$Isotope, labels = c("NULL^14*C~Amino~Acids", 
"NULL^14*C~Glucose", "NULL^14*C~Glucose-6-phosphate", "NULL^33*P~Phosphate")) 

Я тогда скорректированной функцию ggplot передать labeller = label_parsed к facet_wrap функции:

plot_func <- function(T) {site_plots <- ggplot(data = T) + geom_point(aes(Time, mean, colour = Season, shape = Season)) + 
    geom_line(aes(Time, mean, colour = Season, linetype = Season)) + 
    geom_errorbar(aes(Time, mean, ymax = (mean + se), ymin = (mean - se)), width = 2) + 
    labs(title = T$Site[1], y = "Percentage of isotope remaining in solution", x = "Time (h)") + 
    scale_x_continuous(breaks=c(0, 24, 48, 72)) + 
    scale_y_continuous(limits=c(0,115), breaks = c(0,25,50,75,100)) + 
    theme(axis.title.y = element_text(vjust = 5)) + 
    theme(axis.title.x = element_text(vjust = -5)) + theme(plot.title = element_text(vjust = -10)) + 
    theme_bw() + facet_wrap(~Isotope, ncol =2, labeller = label_parsed) 
    print(site_plots) 
    ggsave(plot = site_plots, filename = paste(T$Site[1], ".pdf"), 
    path = "C:/Users/afs61d/Dropbox/Academic/R/Practice datasets/Helens_data/Site_Isotope_Season_plots/", 
    width = 9, height = 7, dpi = 300)} 

Передача ggdata на plot_func дает мне приведенные ниже графики с соответствующими метками граней.

enter image description here

6

Установите метки фасет на соответствующие выражения, затем используйте функцию labellerlabel_parsed, чтобы убедиться, что они отображаются правильно. Вот пример, используя встроенную в рамку iris данных:

data(iris) 
iris$Species = as.character(iris$Species) 
iris$Species[iris$Species == "virginica"] = "NULL^14*C~Amino~Acids" 

ggplot(iris, aes(Sepal.Width, Sepal.Length)) + 
    geom_point() + 
    facet_wrap(~ Species, labeller=label_parsed) 

Вы должны добавить NULL перед тем ^14*C или вы получите сообщение об ошибке из-за наличия ^ в качестве начального символа. * и ~ обозначают границы каждой части выражения, в зависимости от того, хотите ли вы или нет пробел между каждой частью.

На момент написания этой статьи (12 декабря 2015 г.) вам необходимо использовать версию разработки ggplot2, чтобы она работала с facet_wrap. Однако эта функция, вероятно, вскоре будет включена в регулярный выпуск пакета.

enter image description here

+1

аккуратный трюк с «NULL», чтобы включить начальный надстрочный индекс. Но вопрос OP был о 'facet_wrap', а не' facet_grid'. – Matt74

+0

@ eipi10 спасибо, но это не работает с 'facet_wrap' ... полезно видеть' label_parsed' в действии, хотя –

+2

Я обновил для использования 'facet_wrap', который также работает. Я использую версию ggplot для разработки ('ggplot2_1.0.1.9003'). Может быть, он не работает в последнем выпуске CRAN? – eipi10

Смежные вопросы