作者:浅笑那段情2502918773 | 来源:互联网 | 2023-09-18 10:49
Ivehitastumblingblockinwritingaggplotfunction.Imtryingtochangethefacetlabelsina
I've hit a stumbling block in writing a ggplot function. I'm trying to change the facet labels in a ggplot facet_wrap plot.... but its proving trickier than I though it would be....
在编写ggplot函数时,我遇到了绊脚石。我正在尝试更改ggplot facet_wrap图中的facet标签....但它证明比我更棘手但是它会......
The data I am using can be accessed here
我正在使用的数据可以在这里访问
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 ...
I have written the following function to create the ggplot which uses the Isotope factor levels to label the facets:
我编写了以下函数来创建ggplot,它使用Isotope因子级别来标注facet:
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)}
Resulting in this lovely graph:
导致这个可爱的图表:
Which is nice but I want to change the facet labels now... Having done some poking around google I thought I might be able to use the labeller
function as an argument to pass to facet_wrap
. After a frustrating hour I discovered that this only works with facet_grid
!!!??? So, an alternative method was to change the Factor level names so give me the facet labels that I want::
哪个好,但我想现在改变facet标签...做了一些pogle周围的谷歌我认为我可能能够使用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"))
This works, but the problem I have now is that I want the numbers in the labels to be super-scripted. Can anyone suggest the best way to achieve this? Thanks
这有效,但我现在遇到的问题是我希望标签中的数字是超级脚本的。谁能建议最好的方法来达到这个目的?谢谢
2 个解决方案
3
Manage to sort it out! Had trouble installing the development version of ggplot
but after installing curl
and devtools
and reinstalling scales
it worked. I tried @eipi10 answer but couldn't get that to work so I changed the factor label names in a different way:
管理以解决它!在安装ggplot的开发版本但安装curl和devtools并重新安装scaleit之后遇到了麻烦。我试过@ 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"))
I then adjusted the ggplot function to pass labeller = label_parsed
to the facet_wrap
function:
然后我调整了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)}
Passing the ggdata
to the plot_func
gives me the below graphs with the correct facet labels.
将ggdata传递给plot_func会给出下面带有正确facet标签的图表。