请考虑以下示例
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)? (即这种格式(没有引号的票价)在技术上称为什么?)
答案 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
。