Используя следующий код, я попытался нарисовать четыре графика на графике R
. Я не доволен этой цифрой, потому что между графиками много места, поэтому ширина графиков недостаточна для анализа графиков.
Может ли кто-нибудь помочь мне создать хороший график с четырьмя графиками?
Как сохранить метки оси X от 1 до 10 вместо стандартных 5?
Данные:
a1: 11,013 13,814 13,831 13,714 13,787 13,734 13,778 13,771 13,823 13,659
a2: 5,181 7,747 8,314 8,061 7,920 8,153 8,540 8,845 7,881 8,301
Я использовал данные a1 для b1, c1 и d1; a2 данные для b2, c2 и d2 только здесь.
Рисунок:
Код:
op=par(mfrow=c(4,1), mar=c(5.5,5.1,4.1,2.1))
plot(a1, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="A")
lines(a2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
par(xpd=T)
legend(1,26.5,c("X","Y"),bty="n",horiz=T,cex=1.5,col=c("red1","darkblue"),text.col=c("red1","darkblue"),pch=c(1,3),lty=c(2,3),x.intersp=0.4,adj=0.2)
plot(b1, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="B")
lines(b2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
plot(c1, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="C")
lines(c2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
plot(d1/1000, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="D")
lines(d2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
> mtext("Price", side=2, at=100,line=3,cex=1.1)
r
data-visualization
samarasa
источник
источник
Ответы:
Если вы хотите придерживаться чего-то похожего на метод, который вы использовали, то вы можете изучить команду layout (). Несколько других изменений деталей, и вы можете получить графики гораздо ближе друг к другу. Вы также можете поместить уникальные вещи, которые меняются между графиками в списке (например, данные и поля), а затем пройти через цикл. Также вы заметите, что я создал нижнюю ось с помощью команды direct axis (), чтобы вы могли контролировать, куда идут элементы.
Я должен отметить, что я действительно не приложил усилий к тому, чтобы сделать это настолько хорошо, как мог, и вместо того, чтобы сделать этот первый фиктивный граф, я мог бы просто установить достаточно места в первом кадре. К сожалению, настройка mar () пытается заполнить фрейм, и верхнее поле влияет на расстояние, на котором находится метка над графиком, поэтому мне придется пойти и сделать все метки с помощью mtext () или text (), а не просто использовать основной настрой в пределах сюжета, и я не хотел делать это
источник
Я бы порекомендовал изучить пакет решетки графики. Я могу приблизиться к тому, что вы хотите, с помощью нескольких строк. Во-первых, упакуйте ваши данные во фрейм данных, примерно так:
который дает:
Затем используйте решетку
xyplot
:который дает хороший график, как:
РЕДАКТИРОВАТЬ:
Если вы хотите иметь разные символы и линии и отображать их в своей легенде, это становится сложным, потому что вы буквально строите легенду самостоятельно, и вы должны знать, как получить цвета решетки по умолчанию, если вы сами не переопределяете их. :
РЕДАКТИРОВАТЬ 2:
Вы можете упростить код и график, если две категории действительно такие простые, как «X» и «Y»:
который будет использовать «X» и «Y» в качестве символов точки. Вам вообще не нужна легенда, и вы можете выделить еще больше места для самих графиков. (С другой стороны, вам может не понравиться внешний вид, или вам будет сложнее определить точный центр точки, хотя это не такая большая проблема, как могло бы быть, поскольку линия проходит через каждую точку.)
РЕДАКТИРОВАТЬ 3:
На самом деле, вы должны добавить
strip=F, strip.left=T,
к графику, чтобы расположить метки A, B, C, D слева от графиков, что дает вам больше места на длинном графике, как это:источник
grid
вещь: решетка и ggplot2 строятся на сетке) ,Вот версия решения @ Brandon,
ggplot2
которая включает в себя желаемое поведение легенды:Я считаю, что легенды гораздо проще
ggplot2
, но YMMV.РЕДАКТИРОВАТЬ
Обращаясь к нескольким вопросам в комментариях. Чтобы указать конкретные типы точек или линий, вы должны использовать
scale_aesthetic_manual
гдеaesthetic
либоshape
,linetype
и т. Д. Например:Изменение размера меток различных осей выполняется путем изменения настроек в теме, обычно с использованием
opts()
. Например:Вы должны действительно погрузиться в веб-сайт и его книгу для получения дополнительной информации.
источник
Аналогично ответу Уэйна, я бы также использовал другой пакет, а именно
ggplot2
Что дает нам диаграмму как:
источник
+ opts(panel.background=theme_blank())
theme_get()
чтобы увидеть, что вы можете изменить. Затем следуйте той же схеме, что и мой последний комментарий, устанавливая их=theme_blank()
melt()