R语言 如何用ggplot2在多重密度图中按变量添加垂直线
在这篇文章中,我们将讨论如何使用R编程语言中的ggplot2包在多个密度图中按变量添加垂直线。
要做到这一点,首先我们将创建按组着色的多个密度图,然后将线作为一个单独的元素添加。
基本多密度图
为了在R语言中用ggplot2制作按变量着色的多重密度图,我们首先制作一个包含数值和类别的数据框。然后我们使用geom_desnity()函数绘制ggplot2密度图。为了根据变量进行着色,我们在ggplot()函数中添加填充属性作为类别。
语法 。
ggplot(dataFrame, aes( x, color, fill)) + geom_density()
例子 。
我们在ggplot中得到多个密度图,其中两种颜色对应于第二个分类变量的两级/值。如果我们的分类变量有n个级别,那么ggplot2将以n个密度/颜色绘制多个密度图。
# load library
library(tidyverse)
set.seed(1234)
# create the dataframe
df <- data.frame(
category=factor(rep(c("category1", "category2","category3"),
each=1000)),
value=round(c(rnorm(1000, mean=65, sd=5),
rnorm(1000, mean=85, sd=5),
rnorm(1000, mean=105, sd=5))))
# Basic density plot with custom color
# color property to determine the color of plot
# fill property to determine the color beneath plot
ggplot(df, aes(x=value, color=category, fill=category)) +
geom_density(alpha=0.3)
输出 。
按变量添加线
要添加一条按变量绘制的线,要创建一个新的数据框架中位数,该数据框架存储按类别分组的数值的中位数。然后使用geom_vline函数在该点上画一条按数据类别着色的线。
语法 。
plot + geom_vline( dataframe, aes( xintercept, color ), size)
例子 。
在这里,我们计算了按类别分组的数值的中位数,并将其存储在一个名为中位数的数据框中。然后用geom_vline()函数在该点上画一条直线,并根据数据的类别进行着色。
为了创建一个中位数数据框,我们使用。
median <- df %>%
group_by(category) %>%
summarize(median=median(value))
由group_by和summaryize函数制成的中位数数据框看起来像。
# A tibble: 3 x 2
category median
<fct> <dbl>
1 category1 65
2 category2 85
3 category3 105
# load library
library(tidyverse)
set.seed(1234)
df <- data.frame(
category=factor(rep(c("category1", "category2","category3"),
each=1000)),
value=round(c(rnorm(1000, mean=65, sd=5),
rnorm(1000, mean=85, sd=5),
rnorm(1000, mean=105, sd=5))))
# create median data using above dataframe
# group_by function groups the data of same category
# summarize function with median
# argument calculates the median of value column
median <- df %>%
group_by(category) %>%
summarize(median=median(value))
# Basic density plot with custom color
# color property to determine the color of plot
# fill property to determine the color beneath plot
# geom_vline function draws the line across median
# of each group
ggplot(df, aes(x=value, color=category, fill=category)) +
geom_density(alpha=0.3)+
geom_vline(data = median, aes(xintercept = median,
color = category), size=0.5)
输出 。