ggplot2 - 发散图

在前面的章节中,我们了解了使用"ggplot2"包可以创建的各种图表类型。现在我们将重点介绍发散条形图、棒棒糖图等各种图表。首先,我们将从创建发散条形图开始,下面提到了要遵循的步骤 −

了解数据集

加载所需的包并在 mpg 数据集中创建一个名为"汽车名称"的新列。

#Load ggplot
> library(ggplot2)
> # 为汽车名称创建新列
> mtcars$`car name` <- rownames(mtcars)
> # 计算标准化的 mpg
> mtcars$mpg_z <- round((mtcars$mpg - mean(mtcars$mpg))/sd(mtcars$mpg), 2)
> # 高于/低于平均值标志
> mtcars$mpg_type <- ifelse(mtcars$mpg_z < 0, "below", "above")
> # sort
> mtcars <- mtcars[order(mtcars$mpg_z), ]

上述计算涉及为汽车名称创建一个新列,在 round 函数的帮助下计算归一化数据集。我们还可以使用高于和低于平均值标志来获取"type"功能的值。稍后,我们对值进行排序以创建所需的数据集。

收到的输出如下 −

Diverging Charts

将值转换为因子以保留特定图中的排序顺序,如下所述 −

> # 转换为因子以保留图中的排序顺序。
> mtcars$`car name` <- factor(mtcars$`car name`, levels = mtcars$`car name`)

获得的输出如下所述−

分歧图表

发散条形图

现在创建一个具有上述属性的发散条形图,该属性被视为所需的坐标。

> # 发散的条形图
> ggplot(mtcars, aes(x=`car name`, y=mpg_z, label=mpg_z)) +
+ geom_bar(stat='identity', aes(fill=mpg_type), width=.5) +
+ scale_fill_manual(name="Mileage",
+    labels = c("Above Average", "Below Average"),
+    values = c("above"="#00ba38", "below"="#f8766d")) +
+ labs(subtitle="Normalised mileage from 'mtcars'",
+    title= "Diverging Bars") +
+ coord_flip()

注意 − 发散条形图标记了一些维度成员相对于所述值指向向上或向下的方向。

发散条形图的输出如下所示,我们使用函数 geom_bar 来创建条形图 −

发散条形图

发散棒棒糖图

创建具有相同属性和坐标的发散棒棒糖图,只需更改要使用的函数,即 geom_segment(),它有助于创建棒棒糖图。

> ggplot(mtcars, aes(x=`car name`, y=mpg_z, label=mpg_z)) +
+ geom_point(stat='identity', fill="black", size=6) +
+ geom_segment(aes(y = 0,
+    x = `car name`,
+    yend = mpg_z,
+    xend = `car name`),
+       color = "black") +
+ geom_text(color="white", size=2) +
+ labs(title="Diverging Lollipop Chart",
+    subtitle="Normalized mileage from 'mtcars': Lollipop") +
+ ylim(-2.5, 2.5) +
+ coord_flip()
发散棒棒糖图表

发散点图

以类似的方式创建发散点图,其中点代表更大维度的分散图中的点。

> ggplot(mtcars, aes(x=`car name`, y=mpg_z, label=mpg_z)) +
+  geom_point(stat='identity', aes(col=mpg_type), size=6) +
+  scale_color_manual(name="Mileage",
+     labels = c("Above Average", "Below Average"),
+     values = c("above"="#00ba38", "below"="#f8766d")) +
+ geom_text(color="white", size=2) +
+ labs(title="Diverging Dot Plot",
+     subtitle="Normalized mileage from 'mtcars': Dotplot") +
+ ylim(-2.5, 2.5) +
+ coord_flip()
发散点图

此处,图例用绿色和红色的不同颜色表示"高于平均水平"和"低于平均水平"的值。点图传达静态信息。其原理与发散条形图相同,只是仅使用点。