我遇到了问题。以下是我的数据框d
:
size Type
1 28.63 complete
2 24.44 complete
3 31.45 complete
4 23.12 complete
5 20.86 complete
6 15.70 incomplete
7 12.77 complete
8 29.51 complete
9 28.71 complete
我试图得到一个单独的频率分布曲线,表示不完整和完整,由相同图表中的单独符号表示,大小和频率分别为我的x和y轴。
情节应该是这样的。
答案 0 :(得分:1)
尝试使用ggplot2
包。
library(ggplot2)
df <- data.frame(size=c(28.63,24.44,31.45,23.12,20.86,15.70,12.77,29.51,28.71),Type=c('complete','complete','complete','complete','complete','incomplete','complete','complete','complete'))
ggplot(df, aes(linetype = Type)) + geom_density(aes(size))
答案 1 :(得分:1)
(我之前的评论)请问您的
size
列是否离散?如果是,则列联表是有意义的,否则我们需要先将binsize
放入单元格中(可能使用hist
,因为它也会返回计数)。我问这个是因为你的size
是十进制的,并且怀疑它是一个连续值。
(您的回复)是size
是离散的。频率由相同大小重复的次数定义,因为它给出了观察频率。
考虑一个玩具示例:
set.seed(0)
x <- data.frame(size = c(rpois(50,3),rpois(50,5)),
Type = gl(2, 50, labels = c("complete","incomplete")))
我们可能会使用tapply
为每种类型使用table()
获取列联表:
y <- with(x, tapply(size, Type, table))
#$complete
# 0 1 2 3 4 5 6 8
# 2 5 12 10 12 6 2 1
#$incomplete
# 2 3 4 5 6 7 8 9
# 5 6 13 6 7 8 4 1
然后我们想将此列表重组为数据框:
z <- do.call(rbind.data.frame,
lapply(y,
function (u) data.frame(size = c(as.numeric(names(u)),NA),
freq = c(unname(u),NA))))
# size freq
#complete.1 0 2
#complete.2 1 5
#complete.3 2 12
#complete.4 3 10
#complete.5 4 12
#complete.6 5 6
#complete.7 6 2
#complete.8 8 1
#complete.9 NA NA
#incomplete.1 2 5
#incomplete.2 3 6
#incomplete.3 4 13
#incomplete.4 5 6
#incomplete.5 6 7
#incomplete.6 7 8
#incomplete.7 8 4
#incomplete.8 9 1
#incomplete.9 NA NA
然后我们可以制作你想要的情节:
# `lty = 1` for "complete", `lty = 2` for "incomplete"
with(z, plot(size, freq, lty = rep(1:2, lengths(y) + 1L), type = "l"))
#with(z, plot(size, freq, pch = "."))
#with(z, lines(size, freq, lty = rep(1:2, lengths(y) + 1L)))
?????我不太明白的事情发生在这里。虽然我设置了plot
,但k <- cumsum(lengths(y))
with(z, plot(size, freq, pch = "."))
with(z, lines(size[1:k[1]], freq[1:k[1]], lty = 1))
with(z, lines(size[(k[1]+1):k[2]], freq[(k[1]+1):k[2]], lty = 2))
没有生成正确的线型。因此,我必须以无聊的方式做到这一点:
EntityProperty