从 R 中的 Facet_wrap ggplot2 中删除一个 level/group
Removing one level/group from Facet_wrap ggplot2 in R
我的tbl_df:
> str(p2p_dt_SKILL_A)
Classes ‘tbl_dt’, ‘tbl’, ‘data.table’ and 'data.frame': 693 obs. of 35 variables:
$ Patch : Factor w/ 7 levels "BVG1","BVG11",..: 1 2 3 4 5 6 7 1 2 3 ...
$ Skill : Factor w/ 15 levels "A","BROADBAND",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Date : Date, format: "2015-12-04" "2015-12-04" "2015-12-04" "2015-12-04" ...
$ SOD_FWIH_A : num 1.09 1.14 1.09 1.1 1.09 1.07 1.09 1.07 1.12 1.07 ...
$ Prod_MWF : num 5.06 5.06 5.44 5.34 4.22 4.72 4.89 4.68 4.68 5.22 ...
$ Prod_MA : num 4.41 4.41 4.81 4.41 4.68 4.15 4.26 4.44 4.44 4.63 ...
$ Prod_DL : num 3.43 3.49 3.45 3.57 3.43 3.47 3.28 3.44 3.42 3.72 ...
使用 ggplot2 创建了以下线图:
ggplot(p2p_dt_SKILL_A,aes(x=Date,y=Prod_DL)) +
geom_line(data = p2p_dt_SKILL_A[p2p_dt_SKILL_A$Patch %in% c("BVG1"),],aes(colour="red"),lwd=1.3) +
geom_smooth() +
scale_x_date(labels=date_format("%b-%y"),breaks ="1 month")+
geom_vline(xintercept = as.numeric(p2p_dt_SKILL_A$Date[p2p_dt_SKILL_A$Date=="2015-09-18"]))+
geom_vline(xintercept = as.numeric(p2p_dt_SKILL_A$Date[p2p_dt_SKILL_A$Date=="2015-10-02"]))+
geom_vline(xintercept = as.numeric(p2p_dt_SKILL_A$Date[p2p_dt_SKILL_A$Date=="2015-10-23"]))+
theme(axis.title.y = element_text(size = 15,face="bold",color="red"),
plot.title = element_text(size = 15,lineheight = .8,face="bold",color="red"),
axis.title.x = element_blank(),
legend.position="none")
现在我正在尝试使用 facet_wrap
但没有 "BVG1" Patch
。但是 facet_wrap 也选择了 BVG1 补丁:
ggplot(p2p_dt_SKILL_A,aes(x=Date,y=Prod_DL)) +
geom_line(data = p2p_dt_SKILL_A[p2p_dt_SKILL_A$Patch != "BVG1",],aes(colour="red"),lwd=1.3) +
scale_colour_discrete(drop = FALSE)+
geom_smooth() +
geom_line(stat = "hline", yintercept = "mean")+
scale_x_date(labels=date_format("%b-%y"),breaks ="2 month")+
geom_vline(xintercept = as.numeric(p2p_dt_SKILL_A$Date[p2p_dt_SKILL_A$Date=="2015-09-18"]))+
geom_vline(xintercept = as.numeric(p2p_dt_SKILL_A$Date[p2p_dt_SKILL_A$Date=="2015-10-02"]))+
geom_vline(xintercept = as.numeric(p2p_dt_SKILL_A$Date[p2p_dt_SKILL_A$Date=="2015-10-23"]))+
ylab("DL Prod for All Skills")+
ggtitle("BVG1 DL Prod for All Skills 2014-2015")+
theme(axis.title.y = element_text(size = 15,face="bold",color="red"),
plot.title = element_text(size = 15,lineheight = .8,face="bold",color="red"),
axis.title.x = element_blank(),
legend.position="none")+
facet_wrap(~Patch, ncol = 3)
如何让 facet_wrap
只打印从 BVG11
到 BVG16
并排除 BVG1
组?
我尝试使用除 BVG1 之外的新数据框,但它打印效果不佳,到处都是线条,例如:
som_data <- p2p_dt %>%
filter(Patch != "BVG1" & Skill %in% c("A"))
> str(som_data)
Classes ‘tbl_dt’, ‘tbl’, ‘data.table’ and 'data.frame': 594 obs. of 39 variables:
$ Patch : Factor w/ 6 levels "BVG11","BVG12",..: 1 2 3 4 5 6 1 2 3 4 ...
$ Skill : Factor w/ 1 level "A": 1 1 1 1 1 1 1 1 1 1 ...
$ Date : Date, format: "2015-12-04" "2015-11-27" "2015-11-20" "2015-11-13" ...
$ SOD_FWIH_A : num 1.14 1.12 1.15 1.09 1.13 1.14 1.15 1.16 1.14 1.11 ...
$ Prod_MWF : num 5.06 4.68 4.69 4.76 4.63 4.98 4.45 5.12 4.44 4.54 ...
$ Prod_MA : num 4.41 4.44 4.14 5.63 4.86 4.97 4.65 4.99 4.52 4.9 ...
$ Prod_DL : num 3.49 3.42 3.6 3.29 3.19 3.1 3.18 3.28 3.26 3.21 ...
使用上面新创建的数据框,它创建了以下图表,并且方法也不正确
ggplot(som_data,aes(x=Date,y=Prod_DL)) +
geom_line(aes(colour="red"),lwd=1.3) +
geom_smooth() +
geom_line(stat = "hline", yintercept = "mean")+
scale_x_date(labels=date_format("%b-%y"),breaks ="2 month")+
geom_vline(xintercept = as.numeric(som_data$Date[som_data$Date=="2015-09-18"]))+
geom_vline(xintercept = as.numeric(som_data$Date[som_data$Date=="2015-10-02"]))+
geom_vline(xintercept = as.numeric(som_data$Date[som_data$Date=="2015-10-23"]))+
ylab("DL Prod for All Skills")+
ggtitle("BVG1 SOMs DL Prod for All Skills 2014-2015")+
theme(axis.title.y = element_text(size = 15,face="bold",color="red"),
plot.title = element_text(size = 15,lineheight = .8,face="bold",color="red"),
axis.title.x = element_blank(),
legend.position="none")+
facet_wrap(~Patch)
有什么想法吗???
我看不出问题出在哪里。这是您提供的数据的最小示例。
library(dplyr)
# I first need to get rid of the data.table
sample_data <- as.data.frame(sample_data)
# I don't want all those other variables you gave me either..
sample_data <- select(sample_data, Date, Prod_DL, Patch)
# Now filter out the Patch that we don't want
sample_data2 <- filter(sample_data, Patch != "BVG1")
# Create a minimal plot
ggplot(sample_data2, aes(x = Date, y = Prod_DL)) +
geom_line(colour="red", lwd = 1.3) +
geom_smooth() +
facet_wrap(~Patch, ncol = 3)
不是很好的情节(数据有限)但只有六个面板。
我的tbl_df:
> str(p2p_dt_SKILL_A)
Classes ‘tbl_dt’, ‘tbl’, ‘data.table’ and 'data.frame': 693 obs. of 35 variables:
$ Patch : Factor w/ 7 levels "BVG1","BVG11",..: 1 2 3 4 5 6 7 1 2 3 ...
$ Skill : Factor w/ 15 levels "A","BROADBAND",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Date : Date, format: "2015-12-04" "2015-12-04" "2015-12-04" "2015-12-04" ...
$ SOD_FWIH_A : num 1.09 1.14 1.09 1.1 1.09 1.07 1.09 1.07 1.12 1.07 ...
$ Prod_MWF : num 5.06 5.06 5.44 5.34 4.22 4.72 4.89 4.68 4.68 5.22 ...
$ Prod_MA : num 4.41 4.41 4.81 4.41 4.68 4.15 4.26 4.44 4.44 4.63 ...
$ Prod_DL : num 3.43 3.49 3.45 3.57 3.43 3.47 3.28 3.44 3.42 3.72 ...
使用 ggplot2 创建了以下线图:
ggplot(p2p_dt_SKILL_A,aes(x=Date,y=Prod_DL)) +
geom_line(data = p2p_dt_SKILL_A[p2p_dt_SKILL_A$Patch %in% c("BVG1"),],aes(colour="red"),lwd=1.3) +
geom_smooth() +
scale_x_date(labels=date_format("%b-%y"),breaks ="1 month")+
geom_vline(xintercept = as.numeric(p2p_dt_SKILL_A$Date[p2p_dt_SKILL_A$Date=="2015-09-18"]))+
geom_vline(xintercept = as.numeric(p2p_dt_SKILL_A$Date[p2p_dt_SKILL_A$Date=="2015-10-02"]))+
geom_vline(xintercept = as.numeric(p2p_dt_SKILL_A$Date[p2p_dt_SKILL_A$Date=="2015-10-23"]))+
theme(axis.title.y = element_text(size = 15,face="bold",color="red"),
plot.title = element_text(size = 15,lineheight = .8,face="bold",color="red"),
axis.title.x = element_blank(),
legend.position="none")
现在我正在尝试使用 facet_wrap
但没有 "BVG1" Patch
。但是 facet_wrap 也选择了 BVG1 补丁:
ggplot(p2p_dt_SKILL_A,aes(x=Date,y=Prod_DL)) +
geom_line(data = p2p_dt_SKILL_A[p2p_dt_SKILL_A$Patch != "BVG1",],aes(colour="red"),lwd=1.3) +
scale_colour_discrete(drop = FALSE)+
geom_smooth() +
geom_line(stat = "hline", yintercept = "mean")+
scale_x_date(labels=date_format("%b-%y"),breaks ="2 month")+
geom_vline(xintercept = as.numeric(p2p_dt_SKILL_A$Date[p2p_dt_SKILL_A$Date=="2015-09-18"]))+
geom_vline(xintercept = as.numeric(p2p_dt_SKILL_A$Date[p2p_dt_SKILL_A$Date=="2015-10-02"]))+
geom_vline(xintercept = as.numeric(p2p_dt_SKILL_A$Date[p2p_dt_SKILL_A$Date=="2015-10-23"]))+
ylab("DL Prod for All Skills")+
ggtitle("BVG1 DL Prod for All Skills 2014-2015")+
theme(axis.title.y = element_text(size = 15,face="bold",color="red"),
plot.title = element_text(size = 15,lineheight = .8,face="bold",color="red"),
axis.title.x = element_blank(),
legend.position="none")+
facet_wrap(~Patch, ncol = 3)
如何让 facet_wrap
只打印从 BVG11
到 BVG16
并排除 BVG1
组?
我尝试使用除 BVG1 之外的新数据框,但它打印效果不佳,到处都是线条,例如:
som_data <- p2p_dt %>%
filter(Patch != "BVG1" & Skill %in% c("A"))
> str(som_data)
Classes ‘tbl_dt’, ‘tbl’, ‘data.table’ and 'data.frame': 594 obs. of 39 variables:
$ Patch : Factor w/ 6 levels "BVG11","BVG12",..: 1 2 3 4 5 6 1 2 3 4 ...
$ Skill : Factor w/ 1 level "A": 1 1 1 1 1 1 1 1 1 1 ...
$ Date : Date, format: "2015-12-04" "2015-11-27" "2015-11-20" "2015-11-13" ...
$ SOD_FWIH_A : num 1.14 1.12 1.15 1.09 1.13 1.14 1.15 1.16 1.14 1.11 ...
$ Prod_MWF : num 5.06 4.68 4.69 4.76 4.63 4.98 4.45 5.12 4.44 4.54 ...
$ Prod_MA : num 4.41 4.44 4.14 5.63 4.86 4.97 4.65 4.99 4.52 4.9 ...
$ Prod_DL : num 3.49 3.42 3.6 3.29 3.19 3.1 3.18 3.28 3.26 3.21 ...
使用上面新创建的数据框,它创建了以下图表,并且方法也不正确
ggplot(som_data,aes(x=Date,y=Prod_DL)) +
geom_line(aes(colour="red"),lwd=1.3) +
geom_smooth() +
geom_line(stat = "hline", yintercept = "mean")+
scale_x_date(labels=date_format("%b-%y"),breaks ="2 month")+
geom_vline(xintercept = as.numeric(som_data$Date[som_data$Date=="2015-09-18"]))+
geom_vline(xintercept = as.numeric(som_data$Date[som_data$Date=="2015-10-02"]))+
geom_vline(xintercept = as.numeric(som_data$Date[som_data$Date=="2015-10-23"]))+
ylab("DL Prod for All Skills")+
ggtitle("BVG1 SOMs DL Prod for All Skills 2014-2015")+
theme(axis.title.y = element_text(size = 15,face="bold",color="red"),
plot.title = element_text(size = 15,lineheight = .8,face="bold",color="red"),
axis.title.x = element_blank(),
legend.position="none")+
facet_wrap(~Patch)
有什么想法吗???
我看不出问题出在哪里。这是您提供的数据的最小示例。
library(dplyr)
# I first need to get rid of the data.table
sample_data <- as.data.frame(sample_data)
# I don't want all those other variables you gave me either..
sample_data <- select(sample_data, Date, Prod_DL, Patch)
# Now filter out the Patch that we don't want
sample_data2 <- filter(sample_data, Patch != "BVG1")
# Create a minimal plot
ggplot(sample_data2, aes(x = Date, y = Prod_DL)) +
geom_line(colour="red", lwd = 1.3) +
geom_smooth() +
facet_wrap(~Patch, ncol = 3)
不是很好的情节(数据有限)但只有六个面板。