如何使用 R 中的 ggplot2 在多密度图中通过变量添加垂直线
在本文中,我们将讨论如何使用 R 编程语言中的 ggplot2 包在多密度图中通过变量添加垂直线。
为此,首先我们将创建多个按组着色的密度图,然后将线添加为单独的元素。
基本多密度图:
为了使用 ggplot2 在 R 中按变量着色制作多个密度图,我们首先制作一个带有值和类别的数据框。然后我们使用 geom_desnity()函数绘制 ggplot2 密度图。为了根据变量为它们着色,我们将 fill 属性添加为 ggplot()函数中的一个类别。
句法:
ggplot(dataFrame, aes( x, color, fill)) + geom_density()
例子:
我们在 ggplot 中得到多个密度图,两种颜色对应于第二个分类变量的两个级别/值。如果我们的分类变量有 n 个级别,那么 ggplot2 将制作具有 n 个密度/颜色的多个密度图。
R
# 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)
R
# 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)
输出:
通过变量添加行
要按变量添加一条线以进行绘图,请为存储按类别分组的值的中值的数据框创建一个新的数据框中值。然后使用 geom_vline函数在按数据类别着色的那个点上画一条线。
句法:
plot + geom_vline( dataframe, aes( xintercept, color ), size)
例子:
在这里,我们计算了按类别分组的值的中值,并将其存储在名为中值的数据框中。然后使用 geom_vline()函数在该点绘制一条线,根据数据类别着色。
要创建我们使用的中值数据框,
median <- df %>%
group_by(category) %>%
summarize(median=median(value))
由 group_by 和 summarise函数组成的中值数据框如下所示:
# A tibble: 3 x 2
category median
1 category1 65
2 category2 85
3 category3 105
R
# 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)
输出: