我想从函数中绘制数据。例如:
制作数据和加载库:
# Load ggplot2
library(ggplot2)
# Create Data
data <- data.frame(
group=LETTERS[1:5],
value=c(13,7,9,21,2)
)
此绘图可按预期工作:
# Basic piechart
ggplot(data, aes(x="", y=value, fill=group)) +
geom_bar(stat="identity", width=1, color="white") +
coord_polar("y", start=0) +
theme_void() # remove background, grid, numeric labels
但是,如果我尝试从函数内部进行绘图:
a <- function(data)
{
# Basic piechart
ggplot(data, aes(x="", y=value, fill=group)) +
geom_bar(stat="identity", width=1, color="white") +
coord_polar("y", start=0) +
theme_void() # remove background, grid, numeric labels
return()
}
a(data)
它只是给我输出:
NULL
不绘制任何情节。
问题:在我的示例中如何通过函数绘制绘图?
答案 0 :(得分:2)
使功能正常运行的选项。
删除行return ()
,该行在函数完成时基本上返回NULL
(您的绘图位于函数a
的本地,并且在函数外部无法访问该绘图,并且没有参数传递返回)。
a <- function(data)
{
# Basic piechart
ggplot(data, aes(x="", y=value, fill=group)) +
geom_bar(stat="identity", width=1, color="white") +
coord_polar("y", start=0) +
theme_void() # remove background, grid, numeric labels
}
将绘图保存在函数的局部变量上,并在完成后返回。
a <- function(data)
{
# Basic piechart
p <- ggplot(data, aes(x="", y=value, fill=group)) +
geom_bar(stat="identity", width=1, color="white") +
coord_polar("y", start=0) +
theme_void() # remove background, grid, numeric labels
return(p)
}
使用environment = environment()
可以在调用ggplot
时将环境变量显式设置为当前环境。您可以在Use of ggplot() within another function in R了解更多信息。
a <- function(data)
{
# Basic piechart
p <- ggplot(data, aes(x="", y=value, fill=group), environment = environment())
p + geom_bar(stat="identity", width=1, color="white") +
coord_polar("y", start=0) +
theme_void() # remove background, grid, numeric labels
}
现在,您可以使用a(data)
打印输出。