rm(list = ls())
###############################input data
## Data
Grade <- 1 : 10
Case <- rep(paste('case' , 1:5,sep = ''), 2)
Number <- paste('n', 1:10 , sep = '')
Class <- c(rep('Class1',5) , rep('Class2',5))
se <- 0.2
df <- data.frame(Grade,Case ,Number, Class , se)
df
## Grade Case Number Class se
## 1 1 case1 n1 Class1 0.2
## 2 2 case2 n2 Class1 0.2
## 3 3 case3 n3 Class1 0.2
## 4 4 case4 n4 Class1 0.2
## 5 5 case5 n5 Class1 0.2
## 6 6 case1 n6 Class2 0.2
## 7 7 case2 n7 Class2 0.2
## 8 8 case3 n8 Class2 0.2
## 9 9 case4 n9 Class2 0.2
## 10 10 case5 n10 Class2 0.2
library(patchwork)
## Warning: 程辑包'patchwork'是用R版本4.2.2 来建造的
library(ggplot2)
## Warning: 程辑包'ggplot2'是用R版本4.2.3 来建造的
library(tidyr)
library(dplyr)
##
## 载入程辑包:'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## plot
p1 <- ggplot(df, aes(x= factor(Case , levels =c('case1','case2' , 'case3' , 'case4','case5')) , y=Grade ,
fill= Grade)) +
geom_bar(position="dodge", stat="identity",
colour="black",
size=.4) +
geom_errorbar(aes(ymin=Grade +se, ymax=Grade +se),
size=.3,
width=.2,
position=position_dodge(.9))+
geom_linerange(aes(ymin = Grade , ymax = Grade +se),position=position_dodge(.9))+
geom_text(aes(label=Number , y = Grade + se + 1),data=df, position=position_dodge(0.9), size= 4) +
ggtitle('Place a table below x axis')+
facet_grid(~Class) +
xlab(NULL) +
ylab('Case Num') +
theme_gray()+
theme(axis.text.x = element_blank())
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## i Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
p1

p1 <- p1 +theme(legend.position = "top",
#legend.direction = "vertical",
legend.spacing.x = unit(0.1, 'cm'),
#legend.spacing.y = unit(0.2, 'cm'),
legend.title.align = 0.1,
legend.key.size = unit(.3, "cm"),
legend.text = element_text(colour="black", size=10,
face="plain"),
legend.title = element_text(colour="black", size=10,
face="plain"),
legend.background = element_blank(),
legend.key = element_rect(colour = NA, fill = NA),
#legend.key.height=unit(0.5,"line"),
#legend.key.width=unit(0.7,"line"),
#legend.margin=margin(5,5,5,5),
legend.justification = c(0.5, 0.7),
legend.box.margin=margin(0,0,0,0),
panel.background = element_blank(),
panel.border = element_rect(colour = NA, fill=NA, size=1),
axis.line = element_line(size = 0.5, color = "black"),
panel.grid = element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_text(size= 12, color = "black",family = "sans",vjust = 0.5,hjust = 0.5),
axis.title = element_text(size=12, color = "black",family = "sans"),
axis.ticks = element_line(size= 0.5),
axis.ticks.length = unit(3, "pt")) +
scale_y_continuous(expand = c(0,0), limits = c(0, 12))
## Warning: The `size` argument of `element_line()` is deprecated as of ggplot2 3.4.0.
## i Please use the `linewidth` argument instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: The `size` argument of `element_rect()` is deprecated as of ggplot2 3.4.0.
## i Please use the `linewidth` argument instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
p1

df_table <- df %>%
mutate(First = as.integer(stringr::str_extract(Case, "\\d")),
Second = First + 9,
Third = Second + 9) %>%
pivot_longer(c(First, Second, Third), names_to = "layer", values_to = "label")
df_table
## # A tibble: 30 x 7
## Grade Case Number Class se layer label
## <int> <chr> <chr> <chr> <dbl> <chr> <dbl>
## 1 1 case1 n1 Class1 0.2 First 1
## 2 1 case1 n1 Class1 0.2 Second 10
## 3 1 case1 n1 Class1 0.2 Third 19
## 4 2 case2 n2 Class1 0.2 First 2
## 5 2 case2 n2 Class1 0.2 Second 11
## 6 2 case2 n2 Class1 0.2 Third 20
## 7 3 case3 n3 Class1 0.2 First 3
## 8 3 case3 n3 Class1 0.2 Second 12
## 9 3 case3 n3 Class1 0.2 Third 21
## 10 4 case4 n4 Class1 0.2 First 4
## # i 20 more rows
head(df_table)
## # A tibble: 6 x 7
## Grade Case Number Class se layer label
## <int> <chr> <chr> <chr> <dbl> <chr> <dbl>
## 1 1 case1 n1 Class1 0.2 First 1
## 2 1 case1 n1 Class1 0.2 Second 10
## 3 1 case1 n1 Class1 0.2 Third 19
## 4 2 case2 n2 Class1 0.2 First 2
## 5 2 case2 n2 Class1 0.2 Second 11
## 6 2 case2 n2 Class1 0.2 Third 20
p2 <- ggplot(df_table, aes(x = Case)) +
geom_text(aes(y = factor(layer, c("Third", "Second", "First")), label = label)) +
labs(y = "", x = NULL) +
#scale_y_discrete(expand = c(0.1,0)) +
theme(axis.text.x = element_blank(),
axis.title = element_blank(),
axis.ticks = element_blank(),
panel.background = element_blank(),
axis.text.y = element_text(size= 12, color = "black",family = "sans",vjust = 0.5,hjust = 0.5),
panel.border = element_rect(colour = NA, fill=NA, size=1),
axis.line = element_line(size = 0, color = "white"),
axis.ticks.length.y = unit(1, "mm"),
plot.margin = unit(c(0,0,0,0), "cm")) +
theme(axis.line = element_blank(), axis.ticks = element_blank(), axis.text.x = element_blank(),
panel.grid = element_blank(), strip.text = element_blank()) +
facet_grid(~Class)
p2

p3 <- p2 + annotate("rect", xmin = -Inf, xmax = Inf, ymin = 0.5, ymax =1.5,
fill = c("yellow"), alpha = 0.3) +
annotate("rect", xmin = -Inf, xmax = Inf, ymin = 1.5, ymax = 2.5,
fill = c("green"), alpha = 0.3) +
annotate("rect", xmin = -Inf, xmax = Inf, ymin = 2.5, ymax = 3.5,
fill = c("blue"), alpha = 0.3)
p3

p1 / p3 + plot_layout(heights = c(8, 1))

###################################################
ggsave(paste0(Sys.Date(),"-model_3.tiff"),
plot = last_plot(), device = NULL,
#path = dir_path,
scale = 1, width = 15, height = 20, units ="cm",dpi = 300,
limitsize = TRUE,compression = "lzw")
#setwd("C:\\Users\\liyix\\OneDrive\\Desktop\\")
#https://stackoverflow.com/questions/61977439/table-below-x-axis-in-ggplot