我对函数 ggsave() 有疑问,我将非常感谢任何帮助和/或建议/解决方案。我正在创建四个图并将它们全部放在一个大图中,并且由于我想使用数据框中的所有列循环整个函数,因此我想将创建的图保存在指定的文件夹中(最好使用标识名称)。
plotting_fun3 <- function(Q){
plot1 <- plot_likert(
t(Q),
title = "Total population",
legend.labels = c("strongly disagree","disagree", "neither nor", "agree", "strongly agree"),
grid.range = c(1.6, 1.1),
expand.grid = FALSE,
axis.labels = c(" "),
values = "sum.outside",
show.prc.sign = TRUE,
catcount = 4,
cat.neutral = 3,
)
plot2 <- plot_likert(
t(Q[survey$animal=="Dogs"]),
title = "Female",
legend.labels = c("strongly disagree","disagree", "neither nor", "agree", "strongly agree"),
grid.range = c(1.6, 1.1),
expand.grid = FALSE,
axis.labels = c(" "),
values = "sum.outside",
show.prc.sign = TRUE,
catcount = 4,
cat.neutral = 3,
)
plot3 <- plot_likert(
t(Q[survey$animal=="Cats"]),
title = "Male",
legend.labels = c("strongly disagree","disagree", "neither nor", "agree", "strongly agree"),
grid.range = c(1.6, 1.1),
expand.grid = FALSE,
axis.labels = c(" "),
values = "sum.outside",
show.prc.sign = TRUE,
catcount = 4,
cat.neutral = 3,
)
plot4 <- plot_likert(
t(Q[survey$animal=="Turtle"]),
title = "Others",
legend.labels = c("strongly disagree","disagree", "neither nor", "agree", "strongly agree"),
grid.range = c(1.6, 1.1),
expand.grid = FALSE,
axis.labels = c(" "),
values = "sum.outside",
show.prc.sign = TRUE,
catcount = 4,
cat.neutral = 3,
)
theplot <- ggarrange(plot1, plot2, plot3, plot4,
labels = NULL,
common.legend = TRUE,
legend = "bottom",
ncol = 1, nrow = 4)
#ggsave(filename=paste(Q,".png",sep=""), plot=theplot, device = "png")
#ggsave(filename=paste("animal_plot", ID, ".jpeg"), plot=plots[[x]])
#ggsave(path = "/myDirectory",
# device = "png", filename = "animal_plot", plot = theplot)
#save_plot(filename = "hello", plot = theplot,
# "/myDirectory",
# device = "png")
#ggsave(sprintf("%s.pdf", Q), device = "pdf")
return(theplot)
}
注释行显示了我尝试将绘图保存在我的目录中的各种方式。我遇到了两个不同的问题:
要么:我在堆栈溢出中发现的大多数 ggsave 建议。其中有几行不包括在内device = "png"
。如果我省略这行代码,我总是会得到这样的结果:
Fehler: `device` must be NULL, a string or a function.
Run `rlang::last_error()` to see where the error occurred.
如果我遵循该命令,我会得到:
<error/rlang_error>
`device` must be NULL, a string or a function.
Backtrace:
1. global::plotting_fun3(survey[, 9])
2. ggplot2::ggsave(sprintf("%s.pdf", Q))
3. ggplot2:::plot_dev(device, filename, dpi = dpi)
Run `rlang::last_trace()` to see the full context.
> rlang::last_trace()
<error/rlang_error>
`device` must be NULL, a string or a function.
Backtrace:
█
1. └─global::plotting_fun3(survey[, 9])
2. └─ggplot2::ggsave(sprintf("%s.pdf", Q))
3. └─ggplot2:::plot_dev(device, filename, dpi = dpi)
所以在网上找了有相同或类似问题的人,建议一直是使用device = "png"
或类似的。
现在,如果我这样做,我会遇到一个不同的问题:绘图保存在正确的目录中,但名称错误。通常名称是“3.png”或“3.pdf”或取决于我创建的内容。如果“3.png”已经存在,它会给文件另一个编号。
三个月前我在一个较旧的项目中遇到了这个问题,无法解决,现在我又遇到了。
值得一提的是,我使用的是 macOS Mojave 10.14.6,我的 R 版本是 1.3.1093 版
提前感谢您的任何想法、建议或其他意见。
[编辑]
以下是一些示例数据:
> str(myDF[,c(2,9:10)])
data.frame': 123 obs. of 3 variables:
$ animal: chr "Cats" "Cats" "Turtles" "Cats" ...
$ q8 : int 3 5 5 3 4 4 2 5 3 5 ...
$ q9.1 : int 4 5 5 4 3 4 2 4 2 4 ...
所有观察值都保持在 1 到 5 之间。它们实际上代表了诸如“非常同意”、“同意”、“既不同意也不反对”等答案。
或者,如果您更喜欢另一个:
> myDF[,c(2,9:10)]
animal q8 q9.1
1 Cats 3 4
2 Cats 5 5
3 Turtles 5 5
4 Cats 3 4
5 Turtles 4 3
6 Turtles 4 4
7 Turtles 2 2
8 Cats 5 4
9 Cats 3 2
10 Turtles 5 4
11 Turtles 4 3
12 Turtles 3 3
13 Dogs 3 3
14 Cats 3 3
15 Dogs 1 1
16 Dogs 1 3