如果变动描述的是一个变量内部的行为,那么相关变动描述的就是多个变量之间的行为。相关变动是两个或多个变量以相关的方式共同变化所表现出的趋势。查看相关变动的最好 方式是将两个或多个变量间的关系以可视化的方式表现出来。如何进行这种可视化表示同 样取决于相关变量的类型。
我们经常需要探索连续变量的分布,按分类变量的分组显示连续变量分布的常用的两种方式是:
data = diamonds,
mapping = aes(x = price, y = ..density..)
) +
geom_freqpoly(mapping = aes(color = cut), binwidth = 500)
ggplot(data = mpg, mapping = aes(x = class, y = hwy)) +
geom_boxplot()
cut 是一个有序因子:“一般”不如“较好”、“较好”不如“很好”,以此类推。因为很多分 类变量并没有这种内在的顺序,所以有时需要对其重新排序来绘制信息更丰富的图形。重新排序的其中一种方法是使用 reorder() 函数。 例如,我们看一下 mpg 数据集中的 class 变量。你可能很想知道公路里程因汽车类别的不同会有怎样的变化,可以基于 hwy 值的中位数对 class 进行重新排序:
ggplot(data = mpg, mapping = aes(x = class, y = hwy)) +
geom_boxplot(mapping = aes(
x = reorder(class, hwy, FUN = median),
y = hwy
))
如果变量名很长,那么将图形旋转 90 度效果会更好一些。你可以通过coord_flip()
函数:
ggplot(data = mpg) +
geom_boxplot(
mapping = aes(
x = reorder(class, hwy, FUN = median),
y = hwy
)
) +
coord_flip()
nycflights13::flights %>%
mutate(
cancelled = is.na(dep_time),
sched_hour = sched_dep_time %/% 100,
sched_min = sched_dep_time %% 100,
sched_dep_time = sched_hour + sched_min / 60
) %>%
ggplot(mapping = aes(sched_dep_time)) +
geom_freqpoly(
mapping = aes(color = cancelled),
binwidth = 1/4
)