ggplot重命名facet_wrap中的构面标签
Posted
技术标签:
【中文标题】ggplot重命名facet_wrap中的构面标签【英文标题】:ggplot renaming facet labels in facet_wrap 【发布时间】:2016-03-18 10:47:27 【问题描述】:我在编写 ggplot 函数时遇到了一个绊脚石。我正在尝试更改 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)
得到这个可爱的图表:
这很好,但我现在想更改构面标签...
在谷歌上做了一些探索之后,我想我可以使用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"))
这可行,但我现在遇到的问题是我希望标签中的数字是超级脚本。谁能建议实现这一目标的最佳方法? 谢谢
【问题讨论】:
我认为“labeller”在ggplot的开发版本中可用于facet_wrap:docs.ggplot2.org/dev/facet_wrap.html @BenBolker 谢谢...这将非常有用 - 我该如何安装它? @eipi10 我不认为labeller
可以传递给facet_wrap
...这是问题的症结
我已经更新了我的答案以使用facet_wrap
,它有效,但我使用的是ggplot的开发版本。
相关热门问题但针对facet_grid
***.com/questions/3472980/…
【参考方案1】:
设法解决它!
安装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
会得到下面带有正确构面标签的图表。
【讨论】:
【参考方案2】:将构面标签设置为适当的表达式,然后使用labeller
函数label_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)
您需要在^14*C
之前添加NULL
,否则由于将^
作为初始字符,您会收到错误消息。 *
和 ~
标记表达式每个部分的边界,具体取决于您是否希望在每个部分之间留出空格。
在撰写本文时(2015 年 12 月 12 日),您需要使用 ggplot2
的开发版本才能使用 facet_wrap
。但是,此功能可能很快会合并到软件包的常规版本中。
【讨论】:
巧妙地使用“NULL”来启用初始上标。但是OP的问题是关于facet_wrap
,而不是facet_grid
。
@eipi10 谢谢,但这不适用于facet_wrap
...虽然可以看到label_parsed
的实际效果
我已经更新为使用facet_wrap
,它也可以使用。我正在使用 ggplot (ggplot2_1.0.1.9003
) 的开发版本。也许它在最新的 CRAN 版本中不起作用?
@eipi10 太好了...我怎样才能获得开发版本?
如果您没有devtools
包,请安装并加载它。然后install_github("hadley/ggplot2")
.以上是关于ggplot重命名facet_wrap中的构面标签的主要内容,如果未能解决你的问题,请参考以下文章