2014-12-08 5 views
1

У меня есть два пуассоновский процессы:Plotting два Пуассон процессов на одном участке

n <- 100 
x <- seq(0, 10, length = 1000) 
y1 <- cumsum(rpois(1000, 1/n)) 
y2 <- -cumsum(rpois(1000, 1/n)) 

Я хотел бы построить их на одном графике и ожидают, что y1 лежит выше оси х и y2 лежит ниже оси х. Я пробовал использовать следующий код:

plot(x, y1) 
par(new = TRUE) 
plot(x, y2, col = "red", 
axes = FALSE, 
xlab = '', ylab = '', 
xlim = c(0, 10), ylim = c(min(y2), max(y1))) 

но это не сработало. Может кто-нибудь, пожалуйста, скажите мне, как это исправить? (Я работаю с R для моего кода)

Большого спасибо заранее

+0

Если только вы сначала используете 'plot', затем' lines' или фиксируете ylimits, ваши два графика не будут иметь одинаковые пределы y. –

ответ

6

Как насчет

plot(x,y1, ylim=range(y1,y2), type="l") 
lines(x, y2, col="red") 

enter image description here

Я хотел бы предложить, пытаясь избежать несколько вызовов участка с par(new=TRUE). Это обычно очень грязно. Здесь мы используем lines(), чтобы добавить к существующему сюжету. Единственный улов в том, что пределы x и y не будут меняться в зависимости от новых данных, поэтому мы используем ylim в первом вызове plot(), чтобы установить диапазон, соответствующий всем данным.

+0

Обычно единственная причина для 'par (add = TRUE)' - это использовать базовую графику 'plot'-function со специальными функциями. –

+0

Да! это потрясающе, он отлично работает, и я могу даже добавить на него больше строк, таких как линия разницы между 'y2' и' y1'. Спасибо @MrFlick !! – Ocean

3

Или, если вы не хотите, чтобы беспокоиться о пределах (как MrFlick упоминается) или число строк, вы можете также поток вверх ваши данные и используя melt и ggplot

df <- data.frame(x, y1, y2) 
library(reshape2) 
library(ggplot2) 
mdf <- melt(df, "x") 
ggplot(mdf, aes(x, value, color = variable)) + 
    geom_line() 

enter image description here

Смежные вопросы