ggplot2:使用带有零件数据的选定面创建绘图
ggplot2: create a plot using selected facets with part data
我想用
创建一个情节
- 使用部分数据创建具有
facet_grid
两列的基图。
- 使用剩余的数据部分并在现有构面之上绘制,但仅使用一列。
示例代码:
library(ggplot2)
library(gridExtra)
df2 <- data.frame(Class=rep(c('A','B','C'),each=20),
Type=rep(rep(c('T1','T2'),each=10), 3),
X=rep(rep(1:10,each=2), 3),
Y=c(rep(seq(3,-3, length.out = 10),2),
rep(seq(1,-4, length.out = 10),2),
rep(seq(-2,-8, length.out = 10),2)))
g2 <- ggplot() + geom_line(data = df2 %>% filter(Class %in% c('B','C')),
aes(X,Y,color=Class, linetype=Type)) +
facet_grid(Type~Class)
g3 <- ggplot() + geom_line(data = df2 %>% filter(Class == 'A'),
aes(X,Y,color=Class, linetype=Type)) +
facet_wrap(~Type)
grid.arrange(g2, g3)
输出图:
如何在 g2
情节上包含 g3
情节?生成的图应在两个面上两次包含 g3
两条线。
我假设下面的情节就是您要找的。
library(dplyr)
library(ggplot2)
df_1 <- filter(df2, Class %in% c('B','C')) %>%
dplyr::rename(Class_1 = Class)
df_2 <- filter(df2, Class == 'A')
g2 <- ggplot() +
geom_line(data = df_1,
aes(X, Y, color = Class_1, linetype = Type)) +
geom_line(data = df_2,
aes(X, Y, color = Class, linetype = Type)) +
facet_grid(Type ~ Class_1)
g2
说明
对于这样的任务,我发现最好使用两个数据集。由于变量 df2$class
具有三个唯一值:A
、B
和 C
,分面 Class~Type
不会为您提供所需的图,因为您需要的数据df2$Class == "A"
显示在各个方面。
这就是我将 df_1
中的变量 Class
重命名为 Class_1
的原因,因为这个变量只包含两个唯一值:B
和 C
。
分面 Class_1 ~ Type
允许您在顶部绘制 df2$Class == "A"
的数据,而不会被 Class
.
分面
编辑
根据下面的评论,这是一个仅使用一个数据集的解决方案
g2 + geom_line(data = filter(df2, Class == 'A')[, -1],
aes(X, Y, linetype = Type, col = "A"))
类似/相同的问题:
我想用
创建一个情节- 使用部分数据创建具有
facet_grid
两列的基图。 - 使用剩余的数据部分并在现有构面之上绘制,但仅使用一列。
示例代码:
library(ggplot2)
library(gridExtra)
df2 <- data.frame(Class=rep(c('A','B','C'),each=20),
Type=rep(rep(c('T1','T2'),each=10), 3),
X=rep(rep(1:10,each=2), 3),
Y=c(rep(seq(3,-3, length.out = 10),2),
rep(seq(1,-4, length.out = 10),2),
rep(seq(-2,-8, length.out = 10),2)))
g2 <- ggplot() + geom_line(data = df2 %>% filter(Class %in% c('B','C')),
aes(X,Y,color=Class, linetype=Type)) +
facet_grid(Type~Class)
g3 <- ggplot() + geom_line(data = df2 %>% filter(Class == 'A'),
aes(X,Y,color=Class, linetype=Type)) +
facet_wrap(~Type)
grid.arrange(g2, g3)
输出图:
如何在 g2
情节上包含 g3
情节?生成的图应在两个面上两次包含 g3
两条线。
我假设下面的情节就是您要找的。
library(dplyr)
library(ggplot2)
df_1 <- filter(df2, Class %in% c('B','C')) %>%
dplyr::rename(Class_1 = Class)
df_2 <- filter(df2, Class == 'A')
g2 <- ggplot() +
geom_line(data = df_1,
aes(X, Y, color = Class_1, linetype = Type)) +
geom_line(data = df_2,
aes(X, Y, color = Class, linetype = Type)) +
facet_grid(Type ~ Class_1)
g2
说明
对于这样的任务,我发现最好使用两个数据集。由于变量 df2$class
具有三个唯一值:A
、B
和 C
,分面 Class~Type
不会为您提供所需的图,因为您需要的数据df2$Class == "A"
显示在各个方面。
这就是我将 df_1
中的变量 Class
重命名为 Class_1
的原因,因为这个变量只包含两个唯一值:B
和 C
。
分面 Class_1 ~ Type
允许您在顶部绘制 df2$Class == "A"
的数据,而不会被 Class
.
编辑
根据下面的评论,这是一个仅使用一个数据集的解决方案
g2 + geom_line(data = filter(df2, Class == 'A')[, -1],
aes(X, Y, linetype = Type, col = "A"))
类似/相同的问题: