如何分别绘制男女连续图?

时间:2019-01-20 17:00:38

标签: r ggplot2 graph shiny

我正在使用WHO的自杀统计数据,可以在以下网址找到:https://www.kaggle.com/szamil/who-suicide-statistics。我要做的是绘制一条线图,该图在x轴上有年,在y轴上有自杀率。正如您将在数据中看到的那样,它具有针对每个国家,年龄段和性别的自杀统计数据。我要做的是绘制一个特定国家/地区的图表,总结各个年龄段的自杀人数,但男女有两条不同的线。在我的代码中,我根据用户输入创建了WHO数据的子集(我也在创建一个Web应用程序):

who_subset <- who[country, ] 

其中country是反应变量。 我想得到的是:

1

我当前使用的代码是这样:

library(ggplot2)

ggplot(data = who, aes(x = year, y = suicides_no)) + 
  geom_point() + 
  geom_line(aes(weights = suicides_no), stat = "identity")

我无法上传运行此图时得到的图形图片,但它不是连续的,每年都有数个点。它看起来像是直方图,因为它垂直连接点(一年),而不是每年连接一个点,然后水平连接这些点。谁能指导我绘制所需的图形,使其看起来像第二张图片吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

# For lack of a better source:
who <- read.csv("https://github.com/anudeike/who-suicide-stats/raw/master/data/who_suicide_statistics.csv", stringsAsFactors = FALSE)
who_uk <- subset(who, country == "United Kingdom")

让我们看一下数据:

> str(who_uk)
    'data.frame':   456 obs. of  6 variables:
 $ country    : chr  "United Kingdom" "United Kingdom" "United Kingdom" "United Kingdom" ...
 $ year       : int  1979 1979 1979 1979 1979 1979 1979 1979 1979 1979 ...
 $ sex        : chr  "female" "female" "female" "female" ...
 $ age        : chr  "15-24 years" "25-34 years" "35-54 years" "5-14 years" ...
 $ suicides_no: int  119 203 617 3 742 171 304 522 970 9 ...
 $ population : int  4189200 3917300 6438700 4212200 6191200 2083600 4387000 3991400 6459700 4449000 ...

由于数据被分为yearsexage,因此我们需要首先对其进行转换/汇总。在ggplot2中的运行时中这样做并不是最佳选择。那么,我们该怎么做呢?周围有更快的工具,但是用dplyr处理数据可能是最容易实现的方法之一。让我们刺一击:

library(dplyr)

# All suicides
who_uk_all <- who_uk %>% 
group_by(year) %>% 
summarize(suicides_no = sum(suicides_no),
          population = sum(population)) %>%
mutate(rate = 100000 * suicides_no/population)

# By sex
who_uk_sex <- who_uk %>% 
    group_by(year, sex) %>% 
    summarize(suicides_no = sum(suicides_no),
              population = sum(population)) %>%
    mutate(rate = 100000 * suicides_no / population)

让我们来绘制它:

ggplot() + 
    geom_line(data = who_uk_all, aes(year, rate)) +
    geom_line(data = who_uk_sex, aes(year, rate, color = sex))

1

注意事项:您图像中数据的来源和转换方式可能与WHO数据有所不同,因此我们的绘图也略有不同(同样是英格兰,不是英国)。此外,所有人的自杀率似乎很奇怪 高于男性和女性自杀率。绝对有必要进一步探索。