это должен быть FAQ, но я не могу найти точно такой же пример в других ответах (не стесняйтесь закрыть это, если вы можете указать аналогичный Q & A). Я все еще новичок с ggplot2 и, похоже, не могу так легко обмануть голову.ggplot2 plot два набора данных в одно изображение
У меня есть 2 data.frames (которые исходят из отдельных смешанных моделей), и я пытаюсь построить их оба на один и тот же график. В data.frames являются:
newdat
id Type pred SE
1 1 15.11285 0.6966029
2 1 13.68750 0.9756909
3 1 13.87565 0.6140860
4 1 14.61304 0.6187750
5 1 16.33315 0.6140860
6 1 16.19740 0.6140860
1 2 14.88805 0.6966029
2 2 13.46270 0.9756909
3 2 13.65085 0.6140860
4 2 14.38824 0.6187750
5 2 16.10835 0.6140860
6 2 15.97260 0.6140860
и
newdat2
id pred SE
1 14.98300 0.6960460
2 13.25893 0.9872502
3 13.67650 0.6150701
4 14.39590 0.6178266
5 16.37662 0.6171588
6 16.08426 0.6152017
Как вы можете видеть, второй data.frame не Type
, в то время как первый делает, и, следовательно, имеет 2 значения для каждого id
,
Что я могу сделать с ggplot, является участок либо один, как это:
fig1
fig2
Как вы можете видеть, на рис 1 ids
уложены на Type
по оси x, чтобы сформировать две группы из 6 ids
. Однако на рис. 2 нет Type
, но вместо этого только 6 ids
.
То, что я хотел бы сделать, - это построить рис. 2 слева/справа от fig1 с аналогичной группировкой. Таким образом, полученный график будет выглядеть как рис. 1, но с 3 группами из 6 ids
.
Проблема также в том, что мне нужно маркировать и упорядочивать полученную фигуру так, чтобы для newdat
ось x включала метку для «model1» и для newdat2
метку для «model2» или какой-либо аналогичный индикатор, который они из разных моделей. И чтобы еще хуже, мне нужны метки для Type
в newdat
.
My (надеюсь) воспроизводимые (но, очевидно, очень плохо) код для рис 1:
library(ggplot2)
pd <- position_dodge(width=0.6)
ggplot(newdat,aes(x=Type,y=newdat$pred,colour=id))+
geom_point(position=pd, size=5)
geom_linerange(aes(ymin=newdat$pred-1.96*SE,ymax=newdat$pred+1.96*SE), position=pd, size=1.5, linetype=1) +
theme_bw() +
scale_colour_grey(start = 0, end = .8, name="id") +
coord_cartesian(ylim=c(11, 18)) +
scale_y_continuous(breaks=seq(10, 20, 1)) +
scale_x_discrete(name="Type", limits=c("1","2"))
кода для рис 2 одинаков, но без limits
в последней строке и id
определена для оси х в ggplot(aes())
Как я понимаю, определяя материал в ggplot()
делает этот материал «стандарт» по всей графике, и я попытался удалить общий материал и отдельно определяют geom_point
и geom_linerange
для обоих newdat
и newdat2
, но пока не повезло ... Любая помощь очень ценится, так как я полностью застрял.
Мы можем объединить данные и назначить тип 3, и сюжет как один ggplot, или мы можем использовать 'cowplot' пакет, чтобы построить 2 ggplots бок о бок, yaxis выровнены. – zx8754