【问题标题】:how to automatize ggplot plots in a function? - R如何在函数中自动化 ggplot 图? -R
【发布时间】:2017-02-03 13:10:14
【问题描述】:

ggplot 如何自动化(在一个函数中?)以便可以选择要绘制的列。 IE。: 给出以下数据:

DT <- data.frame(y=seq(0,10,1),x=seq(0,20,2),z=seq(0,30,3))

我想例如:首先绘制 Y 对 X,然后 Y 对 Z 我尝试了下面的(简单)代码,但没有成功:

fun<- function (y,x){
    Yaxis=paste(y)
    Xaxis=paste(x)

    Plot <- ggplot() + geom_point(data = DT,
                            aes(x=Yaxis, y=Xaxis))
return(Plot)
}
fun("y","x")
fun("y","z")

【问题讨论】:

  • 查看 ggplot2 的非标准评估, ?aes_string 也应该有所帮助。

标签: r function ggplot2 automation


【解决方案1】:

你的意思是这样的吗?

# create the dataset
DT <- data.frame(y=seq(0,10,1),x=seq(0,20,2),z=seq(0,30,3))

# plot data as categorical
fun<- function (df, xaxis, yaxis){
  # convert numeric to character
  Yaxis=paste(df[, yaxis])
  Xaxis=paste(df[, xaxis])
  # create the plot object
  Plot <- ggplot() + geom_point(data = df,
                                aes(x=Yaxis, y=Xaxis))
  # plot it
  return(Plot)
}
# plot y on horizontal, x on vertical
fun(DT,"y","x")
fun(DT,"y","z")

# plot data as numeric
fun2 <- function (df, xaxis, yaxis){
  Yaxis=df[, yaxis]
  Xaxis=df[, xaxis]

  Plot <- ggplot() + geom_point(data = df,
                                aes(x=Yaxis, y=Xaxis))
  return(Plot)
}
# plot y on horizontal, x on vertical
fun2(DT,"y","x")
# plot y on horizontal, z on vertical
fun2(DT,"y","z")

您显然可以进一步自定义绘图,创建灵活的标题、轴注释等。

【讨论】:

  • 无需创建Yaxis等新变量,只需使用aes_string即可将xaxis直接传递给ggplot2
  • 公平地说,我可能对代码中paste 的使用有点困惑,不想完全删除它。您是对的,该功能可以改进。但我认为它仍然展示了如何将 ggplot 包装到自己的函数中以使其更容易调用。
  • 亲爱的@Paul 和@Ira,非常感谢...确实aes_string 工作得很好...我错过了那个命令的欢呼声
猜你喜欢
  • 2018-08-02
  • 2021-08-09
  • 1970-01-01
  • 2011-10-24
  • 2023-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-27
相关资源
最近更新 更多