本博客介绍几种利用R语言绘制棒棒糖图(火柴杆图)的方法。
2. 使用原生ggplot方法
最容易也是最简单想到的方法是直接使用ggplot2包进行更新,这里需要使用ggplot本身的特性,通过图层叠加的方式,进行最终棒棒糖图的展现。(宽度极窄的柱状图配合散点图即可呈现)
1)生成数据
下面我们的展示均以此份数据为例:
library
(ggplot2
)
data
("mtcars")
dfm
<- mtcars
dfm
$cyl
<- as.factor
(dfm
$cyl
)
dfm
$name
<- rownames
(dfm
)
dfm
$mpg_z
<- (dfm
$mpg
-mean
(dfm
$mpg
))/sd
(dfm
$mpg
)
dfm
$mpg_grp
<- factor
(ifelse
(dfm
$mpg_z
< 0, "low", "high"),
levels
= c
("low", "high"))
head
(dfm
[, c
("name", "wt", "mpg", "mpg_z", "mpg_grp", "cyl")])
2)绘制棒棒糖图
ggplot
(dfm
, aes
(x
= name
, y
= mpg
)) +
geom_hline
(yintercept
= 0, color
= "grey", size
= 1) +
geom_point
(aes
(color
= cyl
), size
= 2) +
geom_bar
(aes
(fill
= cyl
), stat
= "identity", width
= 0.2) +
theme_bw
(base_family
= "Times") +
theme
(panel.grid.minor
= element_blank
(),
panel.grid.major.x
= element_blank
(),
axis.text.x
= element_text
(angle
= 90),
legend.position
= "None",
panel.border
= element_blank
(),
plot.title
= element_text
(hjust
= 0.5)) +
labs
(x
= "name", y
= "mpg",
colour
= "", linetype
= "", fill
= "")
结果如下:
下面我们介绍一种更简便且高级的棒棒糖图绘制方法:使用ggpubr包中的ggdotchart()函数。
3. 使用ggpubr包中的ggdotchart()
这里我们直接看官方介绍的几个例子,来理解函数的使用方式,首先载入依赖包:
library
(ggpubr
)
1)
ggdotchart
(dfm
, x
= "name", y
= "mpg",
color
= "cyl",
palette
= c
("#00AFBB", "#E7B800", "#FC4E07"),
sorting
= "ascending",
add
= "segments",
ggtheme
= theme_pubr
()
)
2)
ggdotchart
(dfm
, x
= "name", y
= "mpg",
color
= "cyl",
palette
= c
("#00AFBB", "#E7B800", "#FC4E07"),
sorting
= "asc", sort.by.groups
= TRUE,
add
= "segments",
add.params
= list
(color
= "lightgray", size
= 2),
group
= "cyl",
dot.size
= 4,
ggtheme
= theme_pubclean
()
) + font
("x.text", size
= 8, vjust
= 0.5)
3)
ggdotchart
(dfm
, x
= "name", y
= "mpg",
color
= "cyl",
palette
= c
("#00AFBB", "#E7B800", "#FC4E07"),
sorting
= "descending",
add
= "segments",
rotate
= TRUE,
group
= "cyl",
dot.size
= 6,
label
= round
(dfm
$mpg
),
font.label
= list
(color
= "white", size
= 9,
vjust
= 0.5),
ggtheme
= theme_pubr
()
)
4)
ggdotchart
(dfm
, x
= "name", y
= "mpg_z",
color
= "cyl",
palette
= c
("#00AFBB", "#E7B800", "#FC4E07"),
sorting
= "descending",
add
= "segments",
add.params
= list
(color
= "lightgray", size
= 2),
group
= "cyl",
dot.size
= 6,
label
= round
(dfm
$mpg_z
,1),
font.label
= list
(color
= "white", size
= 9,
vjust
= 0.5),
ggtheme
= theme_pubr
()
) + geom_hline
(yintercept
= 0, linetype
= 2, color
= "lightgray")
参考
Articles - ggpubr: Publication Ready PlotsArticles - R Graphics Essentialsggpubr: ‘ggplot2’ Based Publication Ready Plots