基于具有相同变量的两组创建图
Create a plot based on two groups with the same variables
我有以下数据:
structure(list(Month = c("2018-08", "2018-09", "2018-10", "2018-11",
"2018-12", "2019-01", "2019-02", "2019-03", "2019-04", "2019-05",
"2019-06", "2019-07", "2019-08", "2019-09", "2019-10", "2019-11",
"2019-12", "2020-01", "2020-02", "2020-03", "2020-04", "2020-05"
), `Member 1` = c("Yes", "Yes", "Yes", "No", "No", "No", "Yes",
"Yes", "Yes", "Yes", "No", "No", "No", "Yes", "Yes", "No", "Yes",
"Yes", "No", "Yes", "No", "Yes"), `Rating 1` = c(1L, 1L, 4L,
5L, 3L, 2L, 3L, 1L, 4L, 1L, 4L, 5L, 6L, 1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 2L), `Member 2` = c("No", "Yes", "No", "Yes", "Yes",
"No", "Yes", "Yes", "Yes", "No", "Yes", "No", "No", "Yes", "No",
"Yes", "No", "Yes", "No", "Yes", "No", "Yes"), `Rating 2` = c(1L,
4L, 1L, 4L, 1L, 4L, 1L, 4L, 1L, 4L, 2L, 2L, 2L, 3L, 4L, 5L, 5L,
1L, 2L, 5L, 3L, 2L)), class = "data.frame", row.names = c(NA,
-22L))
我的目标是在 R 中通过 ggplot 创建一个图,其中我在 x-axis 上有“月份”,在 y-axis 上有“评级”。我的数据包含两列评级(称为评级 1 和评级 2)。但是,它们具有相同的比例,因此我可以将 y-axis 称为评级。但后来我想在情节中总共有四行。您可以将其视为具有“成员 1”和“评级 1”以及“成员 2”和“评级 2”。所以我想在情节中有四行:
- 会员 1 和是的一行
- 成员 1 和 No 一行
- 成员 2 和是的一行
- 成员 2 和 No 一行
应该有一个包含两个子组的图例,每个子组都包含一个标题(标题分别为评级 1 和评级 2):
评分 1:
- 是
- 没有
评分 2:
- 是
- 没有
我是 ggplot 的新手,非常感谢任何帮助。
到目前为止我尝试过的:
- 我创建了两个不同的数据框,一个用于会员 1 及其评级,一个用于会员 2 及其评级。然后我更改了列名,使它们在两个数据框中都相同。
Data1 <- subset(Data, select=c(Month, `Member 1`, `Rating 1`))
Data2 <- subset(Data, select=c(Month, `Member 1`, `Rating 1`))
colnames(Data1) <- c("Month", "Member", "Rating")
colnames(Data2) <- c("Month", "Member", "Rating")
- 我按以下方式使用了 ggplot:
ggplot() +
geom_line(data = Data1, aes(x = Month, y = Rating, group=`Member`, fill=`Member`, color=`Member`, linetype=`Member`), color = "red") +
geom_line(data = Data2, aes(x = Month, y = Rating, group=`Member`, fill=`Member`, color=`Member`, linetype=`Member`), color = "blue") +
xlab('Month') +
ylab('Rating')
当我 运行 ggplot 代码时,我得到了一个具有所需 x-axis 和 y-axis 的图。但是,我想在右边有一个图例,如上所述。现在,我只有蓝色的传说。此外,如果我可以为一个成员使用 geom_point
,这会使其更加可视化,那就太好了。
你还没有说你想要什么类型的情节。在任何情况下,最好将数据转换为长格式以创建绘图:
library(tidyverse)
df %>%
pivot_longer(-1, names_to = c(".value", "PersonNum"),
names_pattern = "^(.*) (\d)$") %>%
mutate(Month = as.Date(paste0(Month, "-01"))) %>%
ggplot(aes(Month, Rating, color = Member)) +
geom_line() +
geom_point() +
facet_grid(PersonNum~.) +
scale_color_manual(values = c('orange2', 'deepskyblue4')) +
theme_bw(base_size = 16)
更新
如果您不需要分面,可以将所有行放在一个面板中。我认为这是一个更难阅读的情节,并且不如带有刻面的情节那么吸引人/信息丰富,但为了完整性而在这里。
df %>%
pivot_longer(-1, names_to = c(".value", "PersonNum"),
names_pattern = "^(.*) (\d)$") %>%
mutate(Month = as.Date(paste0(Month, "-01")),
Group = paste0('Rating: ', PersonNum, ', Member: ', Member)) %>%
ggplot(aes(Month, Rating, color = Group)) +
geom_line() +
geom_point() +
scale_color_brewer(palette = 'Set1') +
theme_bw(base_size = 16)
我有以下数据:
structure(list(Month = c("2018-08", "2018-09", "2018-10", "2018-11",
"2018-12", "2019-01", "2019-02", "2019-03", "2019-04", "2019-05",
"2019-06", "2019-07", "2019-08", "2019-09", "2019-10", "2019-11",
"2019-12", "2020-01", "2020-02", "2020-03", "2020-04", "2020-05"
), `Member 1` = c("Yes", "Yes", "Yes", "No", "No", "No", "Yes",
"Yes", "Yes", "Yes", "No", "No", "No", "Yes", "Yes", "No", "Yes",
"Yes", "No", "Yes", "No", "Yes"), `Rating 1` = c(1L, 1L, 4L,
5L, 3L, 2L, 3L, 1L, 4L, 1L, 4L, 5L, 6L, 1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 2L), `Member 2` = c("No", "Yes", "No", "Yes", "Yes",
"No", "Yes", "Yes", "Yes", "No", "Yes", "No", "No", "Yes", "No",
"Yes", "No", "Yes", "No", "Yes", "No", "Yes"), `Rating 2` = c(1L,
4L, 1L, 4L, 1L, 4L, 1L, 4L, 1L, 4L, 2L, 2L, 2L, 3L, 4L, 5L, 5L,
1L, 2L, 5L, 3L, 2L)), class = "data.frame", row.names = c(NA,
-22L))
我的目标是在 R 中通过 ggplot 创建一个图,其中我在 x-axis 上有“月份”,在 y-axis 上有“评级”。我的数据包含两列评级(称为评级 1 和评级 2)。但是,它们具有相同的比例,因此我可以将 y-axis 称为评级。但后来我想在情节中总共有四行。您可以将其视为具有“成员 1”和“评级 1”以及“成员 2”和“评级 2”。所以我想在情节中有四行:
- 会员 1 和是的一行
- 成员 1 和 No 一行
- 成员 2 和是的一行
- 成员 2 和 No 一行
应该有一个包含两个子组的图例,每个子组都包含一个标题(标题分别为评级 1 和评级 2):
评分 1:
- 是
- 没有
评分 2:
- 是
- 没有
我是 ggplot 的新手,非常感谢任何帮助。
到目前为止我尝试过的:
- 我创建了两个不同的数据框,一个用于会员 1 及其评级,一个用于会员 2 及其评级。然后我更改了列名,使它们在两个数据框中都相同。
Data1 <- subset(Data, select=c(Month, `Member 1`, `Rating 1`))
Data2 <- subset(Data, select=c(Month, `Member 1`, `Rating 1`))
colnames(Data1) <- c("Month", "Member", "Rating")
colnames(Data2) <- c("Month", "Member", "Rating")
- 我按以下方式使用了 ggplot:
ggplot() +
geom_line(data = Data1, aes(x = Month, y = Rating, group=`Member`, fill=`Member`, color=`Member`, linetype=`Member`), color = "red") +
geom_line(data = Data2, aes(x = Month, y = Rating, group=`Member`, fill=`Member`, color=`Member`, linetype=`Member`), color = "blue") +
xlab('Month') +
ylab('Rating')
当我 运行 ggplot 代码时,我得到了一个具有所需 x-axis 和 y-axis 的图。但是,我想在右边有一个图例,如上所述。现在,我只有蓝色的传说。此外,如果我可以为一个成员使用 geom_point
,这会使其更加可视化,那就太好了。
你还没有说你想要什么类型的情节。在任何情况下,最好将数据转换为长格式以创建绘图:
library(tidyverse)
df %>%
pivot_longer(-1, names_to = c(".value", "PersonNum"),
names_pattern = "^(.*) (\d)$") %>%
mutate(Month = as.Date(paste0(Month, "-01"))) %>%
ggplot(aes(Month, Rating, color = Member)) +
geom_line() +
geom_point() +
facet_grid(PersonNum~.) +
scale_color_manual(values = c('orange2', 'deepskyblue4')) +
theme_bw(base_size = 16)
更新
如果您不需要分面,可以将所有行放在一个面板中。我认为这是一个更难阅读的情节,并且不如带有刻面的情节那么吸引人/信息丰富,但为了完整性而在这里。
df %>%
pivot_longer(-1, names_to = c(".value", "PersonNum"),
names_pattern = "^(.*) (\d)$") %>%
mutate(Month = as.Date(paste0(Month, "-01")),
Group = paste0('Rating: ', PersonNum, ', Member: ', Member)) %>%
ggplot(aes(Month, Rating, color = Group)) +
geom_line() +
geom_point() +
scale_color_brewer(palette = 'Set1') +
theme_bw(base_size = 16)