2014-06-28 30 views
0

我想在大學申請的年齡趨勢圖從各種數據庫我用數據來構建以下數據框:意外數字常量:「ggplot(

> AgeGroup <- c("Year", "17","18","19","20", "21", "22", "23", "24", "25to29", "30to39", "40plus"); AgeGroup 
[1] "Year" "17"  "18"  "19"  "20"  "21"  "22"  "23"  "24"  
[10] "25to29" "30to39" "40plus" 

> AGEgroups <- as.data.frame(cbind(a,h,i,j, k, l, m, n, o, p, q, r)); AGEgroups 
    a h  i  j  k  l  m  n o  p  q  r 
1 2004 1053 160450 74600 25778 14317 9761 6995 5589 15902 17171 8351 
2 2005 1115 175406 77751 28368 15191 10551 7778 6107 18153 18695 9686 
... 
9 2012 743 199213 93669 37214 21240 14651 10962 8781 26387 27246 15308 
10 2013 702 201821 103356 39185 21557 15242 11226 8707 27326 26887 15442 

> colnames(AGEgroups) <- AgeGroup 
> AGEgroups 

    Year 17  18  19 20 21 22 23 24 25to29 30to39 40plus 
1 2004 1053 160450 74600 25778 14317 9761 6995 5589 15902 17171 8351 
... 

10 2013 702 201821 103356 39185 21557 15242 11226 8707 27326 26887 15442 

然後,我用繪製圖在GGPLOT2庫:

> ggplot(AGEgroups,aes(x=Year, y=NumerOfApplicants, fill=Age.Range)) + 
+ geom_area(data = AGEgroups, aes(x=Year, y=h, fill="17 yrs"))+ 
+ geom_area(data = AGEgroups, aes(x=Year, y=i, fill="18 yrs"))+ 
+ geom_area(data = AGEgroups, aes(x=Year, y=j, fill="19 yrs"))+ 

...

和接收的圖形,一般看起來不錯(雖然我試圖以自定義顏色和失敗,但你不能看到它,因爲我做的ñ OT有足夠的信譽分),但...只有5歲組被繪製,而不是11 ...

當我試圖分開他們陰謀利用:

ggplot(AGEgroups,aes(x=Year, y=NumerOfApplicants, fill=Age.Range)) + 
    geom_area(data = AGEgroups, aes(x=Year, y=l, fill="21 yrs")) 

大部分做工精細,但隨後當我繪製:

ggplot(AGEgroups,aes(x=Year, y=NumerOfApplicants, fill=Age.Range)) + 
    geom_area(data = AGEgroups, aes(x=Year, y=m, fill="22 yrs")) 

這是丟失的組,我得到錯誤信息:

Error: unexpected numeric constant in: 
"ggplot(AGEgroups,aes(x=Year, y=NumerOfApplicants, fill=Age.Range)) + 
    geom_area(data = AGEgroups, aes(x=Year, y=m, fill="22" 

我一直在看兩個代碼行,並且在語法上看不到任何區別。 'm'向量顯示在命令上。任何想法爲什麼它可能會發生?

我今天沒有得到意外數字常數錯誤重新啓動計算機,這意味着技術舊的「通/斷開關」後解決了問題中的至少50%;)

儘管如此,圖顯示5代替的11個變量。建議dput(頭(AGEgroups))產生以下的輸出:

structure(list(Year = 2004:2009, `17` = c(1053L, 1115L, 937L, 
1023L, 1273L, 1236L), `18` = c(160450L, 175406L, 173806L, 176306L, 
187802L, 197090L), `19` = c(74600L, 77751L, 71285L, 83706L, 89462L, 
97544L), `20` = c(25778L, 28368L, 27003L, 29955L, 36255L, 38451L 
), `21` = c(14317L, 15191L, 15464L, 16550L, 19745L, 22110L), 
`22` = c(9761L, 10551L, 10287L, 11498L, 13384L, 15132L), 
`23` = c(6995L, 7778L, 7664L, 8054L, 9801L, 11080L), `24` = c(5589L, 
6107L, 5948L, 6150L, 7470L, 8810L), `25to29` = c(15902L, 
18153L, 18001L, 18833L, 23578L, 27299L), `30to39` = c(17171L, 
18695L, 17818L, 17861L, 22643L, 26781L), `40plus` = c(8351L, 
9686L, 9854L, 10141L, 13183L, 15888L)), .Names = c("Year", 
"17", "18", "19", "20", "21", "22", "23", "24", "25to29", "30to39", 
"40plus"), row.names = c(NA, 6L), class = "data.frame") 
+0

很多這個沒有任何意義。就像爲什麼你指定'y = NumerOfApplicants'和'fill = Age.Range'時,這些變量似乎沒有被分配到任何地方。什麼時候爲什麼你在geom_area命令中使用'y = m',即使你重命名了所有的列。那麼你到底在做什麼「填充=」22年「才能做到,這不是一個可變的名字。但是我想你只看到5的原因是他們互相覆蓋,因爲你將他們作爲單獨的圖層來繪製。你真的需要融化你的數據。也許有人(頭(AGEgroups))''使這個例子可以重現。 – MrFlick

+0

關於變量相互覆蓋的建議似乎是合理的。將調查。我在帖子中包含了dput結果。 – Asiack

+0

無意義的東西沒有意義,但它們對我有用:1.不知何故y = NumberOfApplicants將標題賦予y軸。我現在將它改爲「申請人數」。它的標準公式被我的RStudio忽略,如果我不包含它,「h」字母就會顯示在那裏。 2.如果我寫入y = 22,它是變量名稱,它將被視爲一個數字,您可以在y軸上看到22。用「米」它工作正常。 3. f =「22年」爲每個顏色在圖例欄上給出了名稱。 – Asiack

回答

1

我仍然不能得到上面的代碼運行,因爲它是丟失了所有的單字母變量,我不想定義這些手動,所以我不能重現錯誤。

但是更好的繪製數據的方法是首先將其融化。

library(reshape2) 
mm<-melt(AGEgroups, id.vars="Year") 

然後用

ggplot(mm,aes(x=Year, y=value, fill=variable)) + 
    geom_area() + ylab("Number of Applicants") + 
    scale_fill_hue(name = "Age Range", 
    labels=c(paste(17:24, "yrs"),"25 to 29", "30 to 39", "40+")) 

產生

enter image description here

在這裏,我們清楚地使用更標準的任務,而不是依賴於使用虛變量的副作用標記情節繪製在美學上。這使得代碼的意圖更清晰。

+0

謝謝!它現在有效。只要我有15點聲望點,我會投票你的答案! – Asiack