从函数绘制数据

时间:2019-10-21 04:38:16

标签: r function ggplot2 functional-programming

我想从函数中绘制数据。例如:

制作数据和加载库:

# 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

不绘制任何情节。

问题:在我的示例中如何通过函数绘制绘图?

示例取自:https://www.r-graph-gallery.com/piechart-ggplot2.html

1 个答案:

答案 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
}

Option-II

将绘图保存在函数的局部变量上,并在完成后返回。

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)
}

选项-III

使用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)打印输出。

输出

ego_function