Как я могу отрегулировать оси для начала нулевого начала в r-графике
Чтобы построить эмпирическую кумулятивную плотность трех переменных x1, x2 и x3, я использовал следующее в r:
plot.ecdf(x1, col="blue",
main="Distribution XYZ",
xlab="x_i", ylab="Prob(x_i<=y)")
lines(ecdf(x2), col="red") # adds a line
lines(ecdf(x3), col="green") # adds line
legend(600,0.6, # places a legend from (x,y)=(600,0.6) on
c("x1","x2","x3"), # puts text in the legend
lty=c(1,1,1), # gives the legend appropriate symbols (lines)
lwd=c(1,1,1),col=c("blue","red","green")) # gives the legend lines the correct color and width
Получаемый сюжет имеет две горизонтальные линии (ломаные линии), равные 0 и 1, кроме поля. И, начало поля имеет пространство ниже нуля на вертикальной оси и пробел слева от нуля на горизонтальной оси. Можете ли вы предложить, как удалить это пространство и дополнительные строки. Я хотел, но не мог опубликовать сюжет.
Редакция:
Образцовые данные могут быть сгенерированы следующим образом:
данные образца
n <- 1000; u <- runif(n)
a <- -4.46; b <- 1.6; c <- -4.63
d <- ( a * u ) + (b * ( ( 1.5 * ( u ** 2 )) - 0.5 )) + (c * ( (2.5 * (u ** 3)) - (1.5 * u )))
x1 <- -126/d; x2 <- -131/d; x3 <- -187/d
Ответы
Ответ 1
Похоже, вы просите стиль, предоставляемый различными настройками для "xaxs" и "yaxs", и, возможно, "xlim":
Try:
plot.ecdf(x1, col="blue",
main="Distribution XYZ",
xlab="x_i", ylab="Prob(x_i<=y)",
xaxs="i",yaxs="i", xlim=c(0,1000) )
lines(ecdf(x2), col="red")
lines(ecdf(x3), col="green")
legend(600,0.6,
c("x1","x2","x3"),
lty=c(1,1,1),
lwd=c(1,1,1),col=c("blue","red","green"))
![enter image description here]()
Ответ 2
используйте аргумент yaxs = "i"
:
plot.ecdf(x1, col="blue",
main="Distribution XYZ",
xlab="x_i", ylab="Prob(x_i<=y)", yaxs = "i")
Это приведет к выравниванию оси в точках ylim
(которые предположительно равны 0 и 1 для plot.ecdf
).
Если вы также хотите удалить пунктирную линию в 0 и 1, просто вызовите box()
:
box()
Ответ 3
Вы можете использовать аргументы xlim
, ylim
и col.01line
:
x1 = runif(100)
x2 = runif(100)
x3 = runif(100)
plot.ecdf(x1, col="blue", main="Distribution XYZ",xlab="x_i", ylab="Prob(x_i<=y)", ylim=c(0, 1), xlim=c(0,1), col.01line="white", verticals=FALSE)
lines(ecdf(x2), col="red", col.01line="white")
lines(ecdf(x3), col="green", col.01line="white")
legend(600,0.6,c("x1","x2","x3"), lty=c(1,1,1), lwd=c(1,1,1),col=c("blue","red","green"))
![enter image description here]()
В качестве альтернативы вы можете просто использовать общий plot
:
f1 = ecdf(x1)
f2 = ecdf(x2)
f3 = ecdf(x3)
pts = seq(0, 1, 0.01)
plot(pts, f1(pts), col="blue", type="b", xlab="x_i", ylab="Prob(x_i<=y)", pch=16, main="Distribution XYZ")
lines(pts, f2(pts), col="red", type="b", pch=16)
lines(pts, f3(pts), col="green", type="b", pch=16)
legend("topleft", c("x1","x2","x3"), fill=c("blue","red","green"))
![enter image description here]()