r - GGplot - 输入数据框列表
问题描述
我有一个数据框列表 df_list = (df1,df2,df3),所有相同的维度但不同的列名。我在 for 循环中调用 ggplot:
for(i in 1:3){
p = ggplot(df_list[[i]], aes(x=df_list[[i]][1], y=df_list[[i]][3], fill=df_list[[i]][2])) +
geom_bar(stat='identity', position='dodge')
}
但是,R 不允许我这样做:我必须实际使用变量名,这意味着我不能使用循环。有什么解决办法吗?
这是示例数据:
df1<-data.frame(order=c(1:3,4:6), gender=c('f','f','f','m','m','m'), count= c(10,20,30,20,25,30))
df2<-data.frame(order11=c(2:4,2:4), gender11=c('f','f','f','m','m','m'), count= c(11,21,30,21,25,30))
df3<-data.frame(order22=c(1:3,4:6), gender22=c('f','f','f','m','m','m'), count= c(10,20,31,21,25,30))
> df1
order gender count
1 1 f 10
2 2 f 20
3 3 f 30
4 4 m 20
5 5 m 25
6 6 m 30
>
解决方案
您的数据框中可能有不同的列名,但列的角色似乎是由它们在数据框中的索引定义的。例如,您希望 thr 数据框中的第一列在图中定义 x 值,依此类推。这意味着您可以使用names()
并aes_string()
获得您想要的东西。
首先定义一些测试数据,因为你没有给我们任何。
library(tidyverse)
df1 <- tibble(x1=rnorm(10), y1=rnorm(10), z1=rep(c("A", "B"), each=5))
df2 <- tibble(x2=rnorm(10), y2=rnorm(10), z2=rep(c("A", "B"), each=5))
df3 <- tibble(x3=rnorm(10), y3=rnorm(10), z3=rep(c("A", "B"), each=5))
dfList <- list(df1, df2, df3)
现在解决问题
lapply(
dfList,
function(df) {
names <- names(df)
df %>% ggplot(aes_string(x=names[1], y=names[2], colour=names[3])) + geom_point()
}
)
给予
我使用了geom_point()
andcolour
而不是geom_bar()
andfill
但同样的原则也适用。
推荐阅读
- python - 数据框嵌套字典到多索引数据框
- javascript - 如何使用 JavaScript 替换 span 标签内的属性?
- python - 而将sql查询转换为json得到错误的输出
- python - Scrapy/Selenium - driver.get_cookies() 返回错误的 cookie(对于与 start_urls 不同的 url)
- flutter - 为什么缺少 awsconfiguration.json 文件?
- python - 如何运行具有特定持续时间的函数?
- javascript - 同一页面中两个元素之间的链接不起作用
- python - 连接到 Python websockets 时出现 Ktor MalformedInputException
- python - 从 Google 云存储桶运行 Eleuther AI GPT 模型
- smooth-scrolling - 加载巨大列表时 Flutter ListView.separated 帧丢失