2015-07-19 185 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。