用多条线绘制折线图

时间:2015-07-19 13:16:50

标签: r plot ggplot2

我试图用不同颜色的多条线绘制线图,但没有太多运气。我的数据集包括10个州和9个选举中每个州的投票率(所以各州列在左栏,每个后续栏是从1980年到2012年的选举年,每个州的投票率都是10个州)。我想有一个图表,其中X轴上的年份和Y轴上的投票率,每个州都有一条线。

我发现之前的答案(Plotting multiple lines from a data frame in R)是一个类似的问题,但似乎无法使用我的数据复制它。任何想法/建议将非常感谢!

2 个答案:

答案 0 :(得分: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()

enter image description here

答案 1 :(得分:0)

请在您的问题中包含您的数据或示例数据,以便我们可以直接回答您的问题并帮助您找到问题的根源。使用dput()简化了粘贴数据。

以下是您的问题的另一种解决方案,使用sca的示例数据和reshape2包而不是tidyr包:

# 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

请注意,我从scoa的示例中省略了as.numeric()年份的转换,这就是为什么上面的图表不包含scoa的额外x轴刻度。