我试图用不同颜色的多条线绘制线图,但没有太多运气。我的数据集包括10个州和9个选举中每个州的投票率(所以各州列在左栏,每个后续栏是从1980年到2012年的选举年,每个州的投票率都是10个州)。我想有一个图表,其中X轴上的年份和Y轴上的投票率,每个州都有一条线。
我发现之前的答案(Plotting multiple lines from a data frame in R)是一个类似的问题,但似乎无法使用我的数据复制它。任何想法/建议将非常感谢!
答案 0 :(得分:0)
使用tidyr::gather
或reshape::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()
答案 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()
产地:
请注意,我从scoa的示例中省略了as.numeric()
年份的转换,这就是为什么上面的图表不包含scoa的额外x轴刻度。