我试图绘制观察频率随时间变化的情况。我有一个数据集,其中数百个法则编码为0-3。我想知道结果2-3是否随着时间的推移更频繁地发生。以下是模拟数据的示例:
Data <- data.frame(
year = sample(1998:2004, 200, replace = TRUE),
score = sample(1:4, 200, replace = TRUE)
)
如果我情节
plot(Data$year, Data$score)
我得到一个方格矩阵,其中每个点填充,但我不知道哪些数字更频繁出现。有没有办法根据给定行/年的观察数量来着色或改变每个点的大小?
一些注释可能有助于回答这个问题:
1)。我不知道如何对某些数字出现频率高于其他数字的数据进行抽样。我的样本程序从所有数字中均等地采样。如果有更好的方法我应该创建可重现的数据以反映后来的更多观察结果,我想知道如何。
2)。这似乎最好是在散点图中可视化,但我可能是错的。我对其他可视化开放。
谢谢!
答案 0 :(得分:5)
这是我如何处理这个问题(希望这是你需要的)
创建数据(注意:在问题中使用sample
时,请始终使用set.seed
以便它可以重现)
set.seed(123)
Data <- data.frame(
year = sample(1998:2004, 200, replace = TRUE),
score = sample(1:4, 200, replace = TRUE)
)
使用score
year
table
的常见问题
Data2 <- as.data.frame.matrix(table(Data))
Data2$year <- row.names(Data2)
使用melt
将其转换回长格式
library(reshape2)
Data2 <- melt(Data2, "year")
绘制数据,同时显示每组不同的颜色和前置频率的相对大小
library(ggplot2)
ggplot(Data2, aes(year, variable, size = value, color = variable)) +
geom_point()
或者,您可以同时使用fill
和size
来描述频率,例如
ggplot(Data2, aes(year, variable, size = value, fill = value)) +
geom_point(shape = 21)
答案 1 :(得分:4)
这是另一种方法:
ggplot(Data, aes(year)) + geom_histogram(aes(fill = ..count..)) + facet_wrap(~ score)
每个方面代表一个“得分”值,如每个方面的标题中所述。通过查看条形图的高度和颜色(浅蓝色表示更多计数),您可以轻松获得计数的感觉。
当然,如果您不希望得分1和4,您也可以仅为score %in% 2:3
执行此操作。在这种情况下,您可以这样做:
ggplot(Data[Data$score %in% 2:3,], aes(year)) +
geom_histogram(aes(fill = ..count..)) + facet_wrap(~ score)
答案 2 :(得分:4)
这么多答案......你似乎想知道结果2-3的频率是否随着时间的推移而增加,所以为什么不直接绘制:
set.seed(1)
Data <- data.frame(
year = sample(1998:2004, 200, replace = TRUE),
score = sample(0:3, 200, replace = TRUE))
library(ggplot2)
ggplot(Data, aes(x=factor(year),y=score, group=(score>1)))+
stat_summary(aes(color=(score>1)),fun.y=length, geom="line")+
scale_color_discrete("score",labels=c("0 - 1","2 - 3"))+
labs(x="",y="Frequency")
答案 3 :(得分:3)
> with(Data, round( prop.table(table(year,score), 1), 3) )
score
year 1 2 3 4
1998 0.308 0.231 0.231 0.231
1999 0.136 0.273 0.227 0.364
2000 0.281 0.250 0.219 0.250
2001 0.129 0.290 0.226 0.355
2002 0.217 0.174 0.261 0.348
2003 0.286 0.286 0.200 0.229
2004 0.387 0.129 0.194 0.290
png(); plot(jitter(Data$year), jitter(Data$score) );dev.off()
如果数量可以使用其他方法
点数太大,以至于抖动不会让你用眼睛来确定计数。您可以使用透明颜色来确定点的密度。 8位十六进制数字中的最后2个十六进制数字位于oc ocothothorpe之前是颜色的alpha透明度。请参阅?rgb
和?col2rgb
。将这两个图与新数据进行比较,这些数据允许您在比例上有所不同:
Data <- data.frame(
year = rep(1998:2004, length=49000),
score = sample(1:7, 49000, prob=(1:7)/5, replace = TRUE)
)
png(); plot(jitter(Data$year), jitter(Data$score) );dev.off()
png(); plot(jitter(Data$year), jitter(Data$score) ,
col="#bbbbbb11" );dev.off()
答案 4 :(得分:1)
另一种选择:
df<-aggregate(Data$score,by= list(Data$year),table)
matplot(df$Group.1,(df[,2]))
希望有所帮助