使用 geom_point 在 R 中绘制多列
Posted
技术标签:
【中文标题】使用 geom_point 在 R 中绘制多列【英文标题】:plotting multiple columns in R using geom_point 【发布时间】:2022-01-11 04:14:45 【问题描述】:我有一个如下所示的数据框:
总共 36 列。
数据示例代码:
df <-
structure(
list(
Bacteroidaceae = c(
0,
0.10944999,
0.104713314,
0.125727668,
0.124136247,
0.005155911,
0.005072778,
0.010231826,
0.010188139
),
Christensenellaceae = c(
0,
0.009910731,
0.010131195,
0.009679938,
0.01147601,
0.010484508,
0.008641566,
0.010017172,
0.010741488
),
treatment = c(
"Original Sample1",
"Original Sample2",
"Original Sample3",
"Original Sample4",
"treatment1_1",
"treatment1_2",
"treatment1_3",
"treatment1_4"
)
),
class = "data.frame",
row.names = c(NA,-8L)
)
我想做的是为数据中的所有列创建图,因此每列将有 2 个图:一个用于处理 1,一个用于原始样本,总共 72 个图
例如:
原始样本类型相同 我尝试使用此代码:
df %>%
tidyr::pivot_longer(!treatment, names_to = "taxa", values_to = "value") %>%
dplyr::filter(str_detect(treatment, "Treatment1")) %>%
for (i in columns(df))
)
ggplot(aes(x = treatment, y = value, color = taxa),group=treatment) +
geom_point() +
stat_summary(fun.y = mean,
geom = "line", width = 0.5)+geom_jitter(widh=0.25)
theme_bw()
但它没有用。 还有其他方法吗?
谢谢
【问题讨论】:
重塑为 'long' 后,代码中的for (i in columns(df)) )
是做什么的。是不是笔误?
错误:data
必须是一个数据框,或其他可被fortify()
强制转换的对象,而不是具有 uneval 类的 S3 对象。您是否不小心将aes()
传递给data
参数?
语法不正确,即for
循环位置似乎不正确
“for 循环放置似乎不正确”是什么意思?
df %>% tidyr::pivot_longer(!treatment, names_to = "taxa", values_to = "value") %>% dplyr::filter(str_detect(treatment, "treatment1")) %>% ggplot(aes(x = treatment, y = value, color = taxa), group = treatment) + geom_point() + stat_summary(fun.y = mean, geom = "line", width = 0.5)+geom_jitter(widh=0.25) theme_bw()
此代码似乎有效
【参考方案1】:
也许这就是你要找的东西:
library(tidyverse)
df %>%
pivot_longer(-treatment) %>%
mutate(plot = ifelse(str_detect(treatment, "Original"),
"Original Sample",
"Treatment 1"),
treatment = str_extract(treatment, "\\d+$")) %>%
group_by(name) %>%
group_split() %>%
map(~.x %>% ggplot(aes(x = factor(treatment), y = value, color = factor(name))) +
geom_point() +
facet_wrap(~plot) +
labs(x = "Treatment", y = "Value", color = "Taxa") +
theme_bw())
这会产生两个图(基于测试数据):
【讨论】:
问题是我需要在不同的图中绘制所有列,所以我总共将有 72 个图 2 为每列绘制所有 36 列在一个图中会太多 @ElizaR 更新了答案。以上是关于使用 geom_point 在 R 中绘制多列的主要内容,如果未能解决你的问题,请参考以下文章