簡體   English   中英

R - 在較小值范圍內隨時間觀察的圖形頻率

[英]R - graph frequency of observations over time with small value range

我試圖繪制觀察頻率隨時間變化的情況。 我有一個數據集,其中數百個法則編碼為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)。 這似乎最好是在散點圖中可視化,但我可能是錯的。 我對其他可視化開放。

謝謝!

這是我如何接近這個(希望這是你需要的)

創建數據(注意:在問題中使用sample時,總是使用set.seed以便它可以重現)

set.seed(123)
Data <- data.frame(
  year = sample(1998:2004, 200, replace = TRUE),
  score = sample(1:4, 200, replace = TRUE)
)

找到frequncies scoreyear使用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()

在此輸入圖像描述

或者,您可以使用fillsize來描述頻率,例如

ggplot(Data2, aes(year, variable, size = value, fill = value)) +
  geom_point(shape = 21)

在此輸入圖像描述

這是另一種方法:

ggplot(Data, aes(year)) + geom_histogram(aes(fill = ..count..)) + facet_wrap(~ score)

PIC

每個方面代表一個“得分”值,如每個方面的標題中所述。 您可以通過查看條形圖的高度+顏色(淺藍色表示更多計數)輕松獲得計數。


當然,如果您不希望得分1和4,您也可以僅對score %in% 2:3score %in% 2:3執行此操作。 在這種情況下,你可以這樣做:

ggplot(Data[Data$score %in% 2:3,], aes(year)) + 
     geom_histogram(aes(fill = ..count..)) + facet_wrap(~ score)

如此多的答案......您似乎想知道結果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")

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

alpha透明度示例

 png(); plot(jitter(Data$year), jitter(Data$score) ,
        col="#bbbbbb11" );dev.off()

在此輸入圖像描述

另一種選擇:

df<-aggregate(Data$score,by= list(Data$year),table)
matplot(df$Group.1,(df[,2]))

希望能幫助到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM