2015-07-19 182 views
0

我想用不同顏色的多條線繪製折線圖,​​但沒有多少運氣。我的數據集包括10個州和9次選舉中每個州的投票率(所以各州列在左欄中,而後續各欄是1980年至2012年的選舉年,每個州的投票率均爲10個州)。我想在X軸上有一年的圖表和Y軸上的投票投票率,每個狀態都有一條線。用多條線繪製折線圖

我發現這個以前的答案(Plotting multiple lines from a data frame in R)類似的問題,但似乎無法複製它使用我的數據。任何想法/建議將非常感激!

回答

0

使用tidyr::gatherreshape::melt將數據轉換爲長格式。

## Simulate data 
d <- data.frame(state=letters[1:10], 
       '1980'=runif(10,0,100), 
       '1981'=runif(10,0,100), 
       '1982'=runif(10,0,100)) 

library(dplyr) 
library(tidyr) 
library(ggplot2) 

## Transform to a long df 
e <- d %>% gather(., key, value, -state) %>% 
    mutate(year = as.numeric(substr(as.character(key), 2, 5))) %>% 
    select(-key) 

## Plot 
ggplot(data=e,aes(x=year,y=value,color=state)) + 
    geom_point() + 
    geom_line() 

+0

謝謝!一切工作正常,直到我到e $ key命令: d < - data.frame(state = letters [1:10], +'1980'= runif(10,0,100), +'1984' = runif(10,0,100), +'1988'= runif(10,0,100), +'1992'= runif(10,0,100), +'1996'= runif(10,0,100), +'' ''= runif(10,0,100), +'2012'= runif(10,0,100)) 庫(tidyr) 庫(ggplot2) e < - gather(d,key,value,-state) e $ key < - as.numeric(sub(「^ X」,「」,as.character(e $ key))) '$ < - 。data.frame'('* tmp *',「key」,value = numeric(0)): 替換有0行,數據有90 – klynn

+0

任何想法我做錯了什麼?作爲變量名具有數字的 – klynn

+0

是棘手的。你可以發佈'name(d)'的輸出,其中d是實際數據框的名稱(不是我爲答案所做的那個)? – scoa

0

請附上您的數據或樣本數據,在你的問題,這樣我們就可以直接回答你的問題,並幫助您找到問題的根源。通過使用dput()來簡化粘貼數據。

這裏的另一種解決問題的方法,而是使用了tidyr包SCOA的樣本數據和reshape2包:

# Sample data 
d <- data.frame(state = letters[1:10], 
       '1980' = runif(10,0,100), 
       '1981' = runif(10,0,100), 
       '1982' = runif(10,0,100)) 

library(reshape2) 
library(ggplot2) 

# Melt data and remove X introduced into year name 
melt.d <- melt(d, id = "state") 
melt.d[["variable"]] <- gsub("X", "", melt.td[["variable"]]) 

# Plot melted data 
ggplot(data = melt.d, 
     aes(x = variable, 
      y = value, 
      group = state, 
      color = state)) + 
    geom_point() + 
    geom_line()       

產地: sample plot

注意,我離開了as.numeric()轉換爲一年從scoa的例子來看,這就是爲什麼上面的圖表沒有包含scoa's額外的x軸ticks。