如何在R中用不同颜色绘制多个ECDF图形到一个图中

8

我正在尝试在一个图表上绘制4个ecdf函数,但似乎无法找出正确的语法。

如果我有4个函数"A,B,C,D",在R中如何使用正确的语法将它们绘制在同一张图上并具有不同的颜色。谢谢!

4个回答

15

这里有一种方法(对于其中的三个,对于四个同样有效):

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(...)

输入图像描述


4
如果你的记忆没有错,2.5年前你已经回答过这个问题两次了:https://dev59.com/aFjUa4cB1Zd3GeqPPTqX?rq=1。现在是第三次回答该问题。 - IRTFM
==:-) 你真是让我开心。也许我需要一个关于在这里搜索的教程,因为我找了一个旧答案,但没有立即找到。要知道,2年半前我只是说我知道我以前做过,而不是回答过。而今天的答案完全基于R语言,没有Hmisc,所以就这样吧。;-) - Dirk Eddelbuettel
1
在搜索中输入:user:143305 ecdf ....,你会发现之前的一些其他结果,尽管我想到的那个是使用Hmisc :: Ecdf进行的。(有时重新做一遍会更容易些。) - IRTFM
德克,有些奇怪,看起来好像剪辑功能被关闭了,因为你生成的图形出现了这种情况。 - Gavin Simpson
据我所知,这是R中一个相当古老的错误。 - Dirk Eddelbuettel

8

软件包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 with legend


是否有可能获取数据框中所有列的ECDF并避免在代码中使用“+”符号。 - Syed Ahmed

6

下面是使用ggplot2的一种方法(使用[Dirk的答案](https://dev59.com/NnrZa4cB1Zd3GeqP0kmz#20601807)中的ecdf对象)

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

enter image description here


1
你知道如何添加图例吗? - Code42

0
更简单的方法是使用ggplot,将要绘制的变量作为因子。在下面的示例中,我将Portfolio作为一个因子,并绘制Interest Rates按Portfolio分布的图表。
# 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

您还可以在stat_ecdf()函数中设置geom = "step",geom = "point"并调整线宽lwd。这将为您提供一个带有图例的漂亮图表。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接