#r #ggplot2 #dplyr
#r #ggplot2 #dplyr
Вопрос:
Прошу прощения за заголовок, я не был уверен, как спросить об этом. У меня есть фрейм данных, который выглядит следующим образом.
Sample=c("A","A", "A", "B","B","B","A","A", "A", "B","B","B","A","A", "A", "B","B","B","A","A", "A", "B","B","B")
Treatment=c("twiter","twiter","twiter","twiter","twiter","twiter","facebook","facebook","facebook","facebook","facebook","facebook",
"twiter","twiter","twiter","twiter","twiter","twiter","facebook","facebook","facebook","facebook","facebook","facebook")
replicate=c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3)
time=c( 10,10,10,10,10,10,10,10,10,10,10,10,20,20,20,20,20,20,20,20,20,20,20,20)
points=c(20,40,80,20,60,120, 30,100,55, 28, 45,90, 80,20,100, 40,90,56,20,30,12,3,5,8)
length(points)
Sample Treatment replicate time points
1 A twiter 1 10 20
2 A twiter 2 10 40
3 A twiter 3 10 80
4 B twiter 1 10 20
5 B twiter 2 10 60
6 B twiter 3 10 120
7 A facebook 1 10 30
8 A facebook 2 10 100
9 A facebook 3 10 55
10 B facebook 1 10 28
11 B facebook 2 10 45
12 B facebook 3 10 90
13 A twiter 1 20 80
14 A twiter 2 20 20
15 A twiter 3 20 100
16 B twiter 1 20 40
17 B twiter 2 20 90
18 B twiter 3 20 56
19 A facebook 1 20 20
20 A facebook 2 20 30
21 A facebook 3 20 12
22 B facebook 1 20 3
23 B facebook 2 20 5
24 B facebook 3 20 8
Я хотел бы отображать свои данные с использованием графиков в каждый момент времени.
Я хотел бы иметь один график, который показывает образец A с помощью «twiter», Образец A с помощью «facebook»
Образец «B» с «twiter» и образец B с «facebook» в момент времени 10 и то же самое в момент времени 20.
Пока я могу сделать что-то вроде этого.
ggplot(data,aes(x=time, y=points,color=Sample, fill=Sample, group=interaction(Sample,Treatment)), alpha=0.1)
geom_boxplot(alpha=0.1)
geom_point(position = position_dodge(width=0.75), alpha=0.2)
theme_bw()
Но это неправильно, я хотел бы иметь образцы A и B из двух разных обработок рядом друг с другом в каждый момент времени, чтобы взглянуть на различия. Я не хочу использовать facet_wrap. Для меня это вызов. Спасибо за ваше время
Комментарии:
1. Вы
group = interaction(Sample,Treatment)
time
также переопределяете группировку по. Вы можете получить то, что вы описываете, изменив наgroup = interaction(Sample,Treatment, time)
, но это не дает вам возможности отличить, какой блок идет с какой обработкой — возможно, метки также в порядке.2. Спасибо, приятель, это было круто. Мне потребовалось некоторое время. Спасибо, что посмотрели на это
Ответ №1:
Превращение моего комментария в ответ: ваша проблема заключается в том, что group=interaction(Sample,Treatment)
переопределяет группировку по оси x (времени), которая обычно выполняется. Чтобы включить time
в группировку, добавьте ее в interaction
:
ggplot(data,
aes(
x = time,
y = points,
color = Sample,
fill = Sample,
group = interaction(Sample, Treatment, time)
),
alpha = 0.1)
geom_boxplot(alpha = 0.1)
geom_point(position = position_dodge(width = 0.75), alpha = 0.2)
theme_bw()
Конечно, остается проблема в том, что нет способа определить, какой блок идет с какой обработкой, но я оставлю это на ваше усмотрение.
Ответ №2:
Попробуйте это:
library(dplyr)
library(ggplot2)
#Plot
data %>%
arrange(Sample) %>%
mutate(Var=paste(Sample,Treatment),
Var=factor(Var,levels = unique(Var),ordered = T)) %>%
ggplot(aes(x=time,
y=points,
color=Var, fill=Var,
group=Var), alpha=0.1)
geom_boxplot(alpha=0.1)
geom_point(position = position_dodge(width=0.75), alpha=0.2)
theme_bw()
scale_color_manual(values=c('tomato','tomato','cyan3','cyan3'))
scale_fill_manual(values=c('tomato','tomato','cyan3','cyan3'))
Вывод:
Ответ №3:
Если вы не возражаете против того, чтобы время играло важную роль, вы можете сделать следующее. Обратите внимание, что я превратил ваши данные во фрейм данных с именем ‘dat’.
dat <- data.frame(Sample=c("A","A", "A", "B","B","B","A","A", "A", "B","B","B","A","A", "A", "B","B","B","A","A", "A", "B","B","B"),
Treatment=c("twiter","twiter","twiter","twiter","twiter","twiter","facebook","facebook","facebook","facebook","facebook","facebook",
"twiter","twiter","twiter","twiter","twiter","twiter","facebook","facebook","facebook","facebook","facebook","facebook"),
replicate=c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3),
time=c( 10,10,10,10,10,10,10,10,10,10,10,10,20,20,20,20,20,20,20,20,20,20,20,20),
points=c(20,40,80,20,60,120, 30,100,55, 28, 45,90, 80,20,100, 40,90,56,20,30,12,3,5,8))
dat %>%
mutate(time = factor(time)) %>%
ggplot(aes(x=time, y=points, color=Sample, fill=Sample), alpha=0.1)
geom_boxplot(alpha=0.1)
geom_point(position = position_dodge(width=0.75), alpha=0.2)
theme_bw()