数据和代码获取:请查看主页个人信息!!!
载入R包
rm(list=ls())
library(tidyverse)
library(ggalt) # devtools::install_github("hrbrmstr/ggalt")
library(scales)
数据载入
health <- read.csv("health.csv")
areas <- read.csv("areas.csv")
数据整理
health <-
health %>%
mutate(area_id=trunc(area_id)) %>%
arrange(area_id, pct) %>%
mutate(year=rep(c("2014", "2013"), 26),
pct=pct/100) %>%
left_join(areas, "area_id") %>%
mutate(area_name=factor(area_name, levels=unique(area_name)))
health <- setNames(bind_cols(filter(health, year==2014), filter(health, year==2013))[,c(4,1,5)],
c("area_name", "pct_2014", "pct_2013"))
将
health
数据集中的area_id
列四舍五入为整数。根据
area_id
和pct
列对数据集进行排序。在数据集中添加一个
year
列,其值分别为 "2014" 和 "2013",并将pct
列的值除以 100。将
areas
数据集与health
数据集进行左连接,连接键为area_id
列。将
area_name
列转换为因子,并按唯一值的顺序设置其水平。将
health
数据集中的year
为 2014 和 2013 的数据分别筛选出来,并将它们合并成新的数据集。最后,将列重命名为 "area_name"、"pct_2014" 和 "pct_2013"。
可视化
txt_col <- "black"
gg <- ggplot(health, aes(x=pct_2014, xend=pct_2013, y=area_name, group=area_name)) +
geom_dumbbell(colour="#a3c4dc", size=1.5, colour_xend="#0e668b",
dot_guide=TRUE, dot_guide_size=0.15) +
scale_x_continuous(label=percent) +
labs(x=NULL, y=NULL) +
theme_bw() +
theme(plot.background=element_rect(fill="#f7f7f7"),
panel.background=element_rect(fill="#f7f7f7"),
panel.grid.minor=element_blank(),
panel.grid.major.y=element_blank(),
panel.grid.major.x=element_line(),
axis.ticks=element_blank(),
legend.position="top",
panel.border=element_blank())
gg
ggsave('pic.png', width = 5, height = 5)
ggplot()
函数指定了基本图形,并设置了x
、xend
、y
和group
的美学映射。
geom_dumbbell()
函数创建了 dumbbell 图,用于表示两个时间点之间的变化。参数设置了线的颜色、粗细、点的颜色和指导线的长度。
scale_x_continuous()
函数将 x 轴标签格式化为百分比。
labs()
函数设置了 x 和 y 轴的标签为 NULL。
theme_bw()
函数设置了基本的黑白主题,并通过theme()
函数进一步调整了图的样式,包括背景颜色、网格线、轴标记和图例位置。
ggsave()
函数保存了绘制的图形到名为 "pic.png" 的文件中,指定了图形的宽度和高度。