Как нарисовать несколько ECDF на одном графике разными цветами в R

Я пытаюсь построить 4 функции ecdf на одном графике, но не могу понять правильный синтаксис.

Если у меня есть 4 функции "A, B, C, D", какой будет правильный синтаксис в R, чтобы их можно было наносить на одну и ту же диаграмму разными цветами. Спасибо!

4 ответа

Решение

Посылка latticeExtra обеспечивает функцию ecdfplot,

library(lattice)
library(latticeExtra)

set.seed(42)
vals <- data.frame(r1=rnorm(100)*0.5,
                   r2=rnorm(100),
                   r3=rnorm(100)*2)

ecdfplot(~ r1 + r2 + r3, data=vals, auto.key=list(space='right')

ecdfplot с легендой

Вот один из способов (для трех из них работает для четырех одинаково):

set.seed(42)
ecdf1 <- ecdf(rnorm(100)*0.5)
ecdf2 <- ecdf(rnorm(100)*1.0)
ecdf3 <- ecdf(rnorm(100)*2.0)
plot(ecdf3, verticals=TRUE, do.points=FALSE)
plot(ecdf2, verticals=TRUE, do.points=FALSE, add=TRUE, col='brown')
plot(ecdf1, verticals=TRUE, do.points=FALSE, add=TRUE, col='orange')

Обратите внимание, что я использую тот факт, что третий имеет самый широкий диапазон, и использую его для инициализации холста. Остальное тебе нужно ylim=c(...),

Вот подход с использованием ggplot2 (с использованием объектов ecdf из [ответа Дирка]) ( /questions/10138344/kak-narisovat-neskolko-ecdf-na-odnom-grafike-raznyimi-tsvetami-v-r/10138352#10138352)

library(ggplot2)
# create a data set containing the range you wish to use
d <- data.frame(x = c(-6,6))
# create a list of calls to `stat_function` with the colours you wish to use

ll <- Map(f  = stat_function, colour = c('red', 'green', 'blue'),
          fun = list(ecdf1, ecdf2, ecdf3), geom = 'step')


ggplot(data = d, aes(x = x)) + ll

Более простой способ - использовать ggplot и иметь переменную, которую вы хотите отобразить в качестве фактора. В приведенном ниже примере у меня есть портфель в качестве фактора и построен график распределения процентных ставок по портфелю.

      # select a palette
myPal <- c( 'royalblue4', 'lightsteelblue1', 'sienna1')

# plot the Interest Rate distribution of each portfolio
# make an ecdf of each category in Portfolio which is a factor
g2 <- ggplot(mortgage, aes(x = Interest_Rate, color = Portfolio)) + 
      scale_color_manual(values = myPal) +
      stat_ecdf(lwd = 1.25, geom = "line")
      
g2

Вы также можете установить geom = "step", geom = "point"и настроить ширину линии lwdв stat_ecdf()функция. Это дает вам хороший сюжет с легендой.

Другие вопросы по тегам