如何在 r 中创建棒棒糖图表
与条形图类似,棒棒糖图对于比较分类变量的定量值非常有用。棒棒糖图表不使用条形图,而是使用末尾带有圆圈的线来表示定量值。
棒棒糖图表是比较多个类别的好方法,同时最大限度地减少图表上的颜色数量,并将读者的注意力集中在图表上的实际值上,而不是图表上的线条或其他图形上。许多人还认为棒棒糖板美观。
在本教程中,我们将完成创建以下棒棒糖图表所需的步骤:
示例:R 中的棒棒糖图表
对于本示例,我们将使用mtcars内置 R 数据集:
#view first six rows of mtcars
head(mtcars)
基本棒棒糖图表
下面的代码说明了如何 创建一个棒棒糖图表来比较数据集中 32 辆汽车每辆的mpg (英里/加仑)。
汽车名称在数据集的行名称中定义,因此我们首先在数据集中创建一个包含这些行名称的新列。
接下来,我们加载ggplot2库,我们将使用它来创建棒棒糖图表。
在 ggplot2 中,我们使用geom_segment在绘图上创建线条。我们将开始和结束 x 值分别设置为0和mpg 。我们将开始和结束 y 值设置为char :
#create new column for car names mtcars$car <- row.names(mtcars) #load ggplot2 library library(ggplot2) #create lollipop chart ggplot(mtcars, aes(x = mpg, y = car)) + geom_segment(aes(x = 0, y = car, xend = mpg, yend = car)) + geom_point()
添加标签
我们还可以使用label和geom_text参数向图表添加标签:
ggplot(mtcars, aes(x = mpg, y = car, label = mpg )) + geom_segment(aes(x = 0, y = car, xend = mpg, yend = car)) + geom_point() + geom_text(nudge_x = 1.5)
或者,我们可以将标签放在圆圈内,而不是将标签放在每行的末尾,方法是增大圆圈并将标签的字体颜色更改为白色:
ggplot(mtcars, aes(x = mpg, y = car, label = mpg)) + geom_segment(aes(x = 0, y = car, xend = mpg, yend = car)) + geom_point( size = 7 ) + geom_text( color = 'white', size = 2 )
将值与平均值进行比较
我们还可以使用棒棒糖图表将值与特定数字进行比较。例如,我们可以在数据集中找到平均mpg值,然后将每辆车的mpg与平均值进行比较。
以下代码使用dplyr库查找平均mpg值,然后按 mpg升序排列汽车:
#load library dplyr library(dplyr) #find mean value of mpg and arrange cars in order by mpg descending mtcars_new <- mtcars %>% arrange(mpg) %>% mutate(mean_mpg = mean(mpg), flag = ifelse(mpg - mean_mpg > 0, TRUE, FALSE), car = factor(car, levels = .$car)) #view first six rows of mtcars_new head(mtcars_new)
然后,以下代码通过将圆圈的颜色设置为等于标志值(在本例中为 TRUE 或 FALSE)并将每辆车的起始 x 值设置为等于平均mpg值来创建棒棒糖图表。
ggplot(mtcars_new, aes(x = mpg, y = car, color = flag )) + geom_segment(aes( x = mean_mpg , y = car, xend = mpg, yend = car)) + geom_point()
使用这种类型的调色板,我们可以轻松确定哪些汽车的每加仑英里数低于和高于数据集平均值。
默认情况下,R 使用蓝色和红色作为其图表颜色。但是,我们可以使用scale_color_manual参数来使用任何我们想要的颜色:
ggplot(mtcars_new, aes(x = mpg, y = car, color = flag)) +
geom_segment(aes(x = mean_mpg, y = car, xend = mpg, yend = car)) +
geom_point() +
scale_color_manual(values = c("purple", "blue"))
改变图表美观
最后,我们可以使用ggplot2的广泛功能来进一步修改图表的美观并创建具有专业外观的最终产品:
ggplot(mtcars_new, aes(x = mpg, y = car, color = flag)) + geom_segment(aes(x = mean_mpg, y = car, xend = mpg, yend = car), color = "grey") + geom_point() + annotate("text", x = 27, y = 20, label = "Above Average", color = "#00BFC4", size = 3, hjust = -0.1, vjust = .75) + annotate("text", x = 27, y = 17, label = "Below Average", color = "#F8766D", size = 3, hjust = -0.1, vjust = -.1) + geom_segment(aes(x = 26.5, xend = 26.5, y = 19, yend = 23), arrow = arrow(length = unit(0.2,"cm")), color = "#00BFC4") + geom_segment(aes(x = 26.5, xend = 26.5, y = 18, yend = 14), arrow = arrow(length = unit(0.2,"cm")), color = "#F8766D") + labs(title = "Miles per Gallon by Car") + theme_minimal() + theme(axis.title = element_blank(), panel.grid.minor = element_blank(), legend.position = "none", text = element_text(family = "Georgia"), axis.text.y = element_text(size = 8), plot.title = element_text(size = 20, margin = margin(b = 10), hjust = 0), plot.subtitle = element_text(size = 12, color = "darkslategrey", margin = margin(b = 25, l = -25)), plot.caption = element_text(size = 8, margin = margin(t = 10), color = "grey70", hjust = 0))