我正在使用WHO的自杀统计数据,可以在以下网址找到:https://www.kaggle.com/szamil/who-suicide-statistics。我要做的是绘制一条线图,该图在x轴上有年,在y轴上有自杀率。正如您将在数据中看到的那样,它具有针对每个国家,年龄段和性别的自杀统计数据。我要做的是绘制一个特定国家/地区的图表,总结各个年龄段的自杀人数,但男女有两条不同的线。在我的代码中,我根据用户输入创建了WHO数据的子集(我也在创建一个Web应用程序):
who_subset <- who[country, ]
其中country是反应变量。 我想得到的是:
我当前使用的代码是这样:
library(ggplot2)
ggplot(data = who, aes(x = year, y = suicides_no)) +
geom_point() +
geom_line(aes(weights = suicides_no), stat = "identity")
我无法上传运行此图时得到的图形图片,但它不是连续的,每年都有数个点。它看起来像是直方图,因为它垂直连接点(一年),而不是每年连接一个点,然后水平连接这些点。谁能指导我绘制所需的图形,使其看起来像第二张图片吗?任何帮助将不胜感激。
答案 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 ...
由于数据被分为year
,sex
和age
,因此我们需要首先对其进行转换/汇总。在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))
注意事项:您图像中数据的来源和转换方式可能与WHO数据有所不同,因此我们的绘图也略有不同(同样是英格兰,不是英国)。此外,所有人的自杀率似乎很奇怪 高于男性和女性自杀率。绝对有必要进一步探索。