R

时间:2017-04-04 00:57:26

标签: r plot ggplot2

我有一个过去50年按国家平均预期寿命的.csv文件。我试图按国家创建一个预期寿命图表,其中x轴为1960-2011,y轴为平均寿命。我只想绘制十大国家,每个国家都有自己的路线。 我已经研究了各种可能的方法来绘制我所拥有的数据的多线图,并且在我看来,数据的格式化是不可能的。我的问题是:

  1. 是否可以根据组织的方式使用此数据创建所需的图表?
  2. 如果必须重组数据,应该怎么做? R中是否有一个功能可以更好地组织数据?
  3. 我能够在Excel HERE中创建所需的图形,这正是我想在R中做的。

    这是lexp.csv文件的链接。 https://drive.google.com/file/d/0BwsBIUlCf0Z3QVgtVGt4ampVcmM/view?usp=sharing

2 个答案:

答案 0 :(得分:2)

您是正确的,数据将从重组中受益。这是一个“广泛到长期”的问题最好有3列:国家,年份和年龄。

您可以使用tidyr包重新格式化数据,使用dplyr包处理数据并使用ggplot2绘图。因此,假设您已将CSV读入R并拥有名为lexp的数据框,您可以尝试这样的事情:

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

lexp %>% 
  # reformat from wide to long
  gather(Year, Age, -Country, convert = TRUE) %>%
  # select most recent year 
  filter(Year == max(Year)) %>%
  # sort by decreasing age 
  arrange(desc(Age)) %>% 
  # take the top 10 countries
  slice(1:10) %>% 
  select(Country) %>% 
  # join back to the original data
  inner_join(lexp) %>% 
  # reformat again from wide to long
  gather(Year, Age, -Country, convert = TRUE) %>% 
  # and plot the graph
  ggplot(aes(Year, Age)) + geom_line(aes(color = Country, group = Country)) +
    theme_dark() + theme(axis.text.x = element_text(angle = 90)) + 
    labs(title = "Life Expectancy") +
    scale_color_brewer(palette = "Set3")

结果: enter image description here

答案 1 :(得分:0)

library("reshape2")
library("ggplot2")

test_data_long <- melt(df, id="Country")  # convert to long format
testdata<-test_data_long[complete.cases(test_data_long),]
ggplot(data=testdata,
       aes(x=variable, y=value)) +
  geom_line(aes(color = Country, group = Country))