如何在R中使用美学中的字符串动态创建图表

时间:2018-04-09 09:58:48

标签: r ggplot2 histogram

请考虑以下示例

ggplot(data = titanic, aes(x = Fare)) + 
  geom_histogram()

这里我创建一个包含来自泰坦数据帧的数据的直方图,x轴是Fare。票价不作为字符串传递。因此,当我尝试循环所有属性以创建多个图表时,请使用names(dataset),我得到strings的向量,我的循环看起来像这样

for (attr in names(dataset)) {
    ggplot(data = dataset, aes(x = attr)) + 
      geom_histogram()
}

每个循环中都有attr is a string,但这不是ggplot所期望的。在最初的示例中,Fare没有作为字符串传递(没有引号),并且在for循环中,它将作为" Fare"传递。

所以我想知道如何动态地为所有列动态创建图形,或者我应该将我的字符串转换为(" Fare"到Fare)? (即这种格式(没有引号的票价)在技术上称为什么?)

1 个答案:

答案 0 :(得分:1)

我创建了以下示例,因为我似乎无法找到正确的titanic数据集。在这个例子中,我有两个变量,x和y(和一个简单的二次模型)。

dat <- data.frame(x=rnorm(100))
dat$y <- - 3 * (dat$x)^2 + 1 + rnorm(100)

如果我使用常规函数aes,则以下命令可以正常工作。

ggplot(data=dat, aes(x=x, y=y)) + 
  geom_point() + geom_smooth()

使用aes_string,您只需要用字符串替换变量的名称。在这里,我把它们放在一个向量中。

obj <- c("x", "y")
ggplot(data=dat, aes_string(x=obj[1], y=obj[2])) + 
  geom_point() + geom_smooth() +
  theme_bw()

我正在使用R版本3.4.4和ggplot2_2.2.1.9000