From 64f1bc6b711df863c89e824787af3e3d72a1d6e3 Mon Sep 17 00:00:00 2001 From: lindechun Date: Sun, 23 Jul 2017 18:01:51 +0800 Subject: [PATCH 1/3] finish modify of boxplot and pheatmap --- README.md | 12 + e | 0 error.txt | 1 + example/.DS_Store | Bin 0 -> 6148 bytes example/areaplot/areaplot.data | 7 + example/barplot/barplot.melt.data | 21 + example/barplot/barplot.normal.data | 11 + .../boxplot.statistics.data | 9 + .../boxplot.statistics.melt.data | 5 + example/boxplot/.DS_Store | Bin 0 -> 6148 bytes example/boxplot/boxplot.matrix2.data | 9 + example/boxplot/boxplot.melt.data | 19 + ...ot.melt.data.Expr_Group.boxplot_jitter.pdf | Bin 0 -> 5189 bytes .../boxplot.melt.data.Expr_Group.jitter.pdf | Bin 0 -> 5009 bytes ...lot.melt.data.Expr_Group.violin_jitter.pdf | Bin 0 -> 19927 bytes ...melt.data.Expr_Group_Group.violin_jitter.r | 351 ++++++++++ ...elt.data.boxplot.Expr_Group.facet_wrap.pdf | Bin 0 -> 6245 bytes ...xplot.melt.data.boxplot.Expr_Group_Rep.pdf | Bin 0 -> 5951 bytes example/boxplot/boxplot.melt.data_temp | 127 ++++ example/boxplot/boxplot.normal.data | 10 + .../boxplot.normal.data.A_Group.violin.pdf | Bin 0 -> 19645 bytes .../boxplot/boxplot.normal.data.violin.pdf | Bin 0 -> 6437 bytes example/boxplot/example.sh | 25 + example/boxplot/modify.md | 32 + example/boxplot/sampleGroup | 19 + .../boxplot_precomputed_values/Set.boxplot.r | 126 ++++ .../boxplot_precomputed_values | 5 + .../boxplot_precomputed_values-F.boxplot.r | 126 ++++ .../boxplot_precomputed_values.boxplot.pdf | Bin 0 -> 3830 bytes .../boxplot_precomputed_values.boxplot.r | 126 ++++ ...t_precomputed_values.boxplot.value_set.pdf | Bin 0 -> 3830 bytes ...lot_precomputed_values.boxplot.value_set.r | 126 ++++ example/boxplot_precomputed_values/err | 4 + example/density2d/density2d | 7 + .../densityHistPlot/densityHistPlot.melt.data | 21 + .../densityHistPlot.normal.data | 7 + example/densityPlot/densityPlot.data | 21 + example/hcluster_gg/hcluster_gg.col_anno.data | 6 + example/hcluster_gg/hcluster_gg.data | 10 + example/heatmapM/test.2.label | 4 + example/heatmapM/test.2.overlap | 4 + example/multibar/data | 9 + example/pca/pca.normal.data | 6 + example/pca/sampleGroup | 5 + example/pheatmap/.Rhistory | 512 ++++++++++++++ example/pheatmap/example.sh | 2 + example/pheatmap/heatmap_col_anno.xls | 6 + example/pheatmap/heatmap_data.xls | 11 + .../pheatmap/heatmap_data.xls.pheatmap.pdf | Bin 0 -> 6532 bytes example/pheatmap/heatmap_data.xls.pheatmap.r | 196 ++++++ example/pheatmap/heatmap_row_anno.xls | 10 + example/scatterplot3d/pca.normal.data | 6 + example/scatterplot3d/sampleGroup | 5 + .../scatterplotColor/scatterplotColor.data | 10 + .../scatterplotDoubleVariable.data | 19 + example/upsetView/upsetView.data | 7 + example/vennDiagram/vennDiagram.data | 12 + example/volcano/volcano.data | 7 + example/volcano/volcano.data2 | 7 + p | 0 python.log | 4 - rFunction.R | 98 +++ s-plot_tutorial.md | 154 ++++ shell_test/shell_for_test.sh | 28 + sp_boxplot.sh | 661 +++++++++++------- sp_pheatmap.sh | 155 ++-- swap | 15 - swap2 | 11 - tips | 0 tutorial_markdown/2017-07-09-R-boxplot.md | 420 +++++++++++ 70 files changed, 3251 insertions(+), 376 deletions(-) delete mode 100644 e create mode 100644 error.txt create mode 100644 example/.DS_Store create mode 100644 example/areaplot/areaplot.data create mode 100644 example/barplot/barplot.melt.data create mode 100644 example/barplot/barplot.normal.data create mode 100644 example/boxplot.statistics/boxplot.statistics.data create mode 100644 example/boxplot.statistics/boxplot.statistics.melt.data create mode 100644 example/boxplot/.DS_Store create mode 100644 example/boxplot/boxplot.matrix2.data create mode 100644 example/boxplot/boxplot.melt.data create mode 100644 example/boxplot/boxplot.melt.data.Expr_Group.boxplot_jitter.pdf create mode 100644 example/boxplot/boxplot.melt.data.Expr_Group.jitter.pdf create mode 100644 example/boxplot/boxplot.melt.data.Expr_Group.violin_jitter.pdf create mode 100644 example/boxplot/boxplot.melt.data.Expr_Group_Group.violin_jitter.r create mode 100644 example/boxplot/boxplot.melt.data.boxplot.Expr_Group.facet_wrap.pdf create mode 100644 example/boxplot/boxplot.melt.data.boxplot.Expr_Group_Rep.pdf create mode 100644 example/boxplot/boxplot.melt.data_temp create mode 100644 example/boxplot/boxplot.normal.data create mode 100644 example/boxplot/boxplot.normal.data.A_Group.violin.pdf create mode 100644 example/boxplot/boxplot.normal.data.violin.pdf create mode 100755 example/boxplot/example.sh create mode 100644 example/boxplot/modify.md create mode 100644 example/boxplot/sampleGroup create mode 100644 example/boxplot_precomputed_values/Set.boxplot.r create mode 100644 example/boxplot_precomputed_values/boxplot_precomputed_values create mode 100644 example/boxplot_precomputed_values/boxplot_precomputed_values-F.boxplot.r create mode 100644 example/boxplot_precomputed_values/boxplot_precomputed_values.boxplot.pdf create mode 100644 example/boxplot_precomputed_values/boxplot_precomputed_values.boxplot.r create mode 100644 example/boxplot_precomputed_values/boxplot_precomputed_values.boxplot.value_set.pdf create mode 100644 example/boxplot_precomputed_values/boxplot_precomputed_values.boxplot.value_set.r create mode 100644 example/boxplot_precomputed_values/err create mode 100644 example/density2d/density2d create mode 100644 example/densityHistPlot/densityHistPlot.melt.data create mode 100644 example/densityHistPlot/densityHistPlot.normal.data create mode 100644 example/densityPlot/densityPlot.data create mode 100644 example/hcluster_gg/hcluster_gg.col_anno.data create mode 100644 example/hcluster_gg/hcluster_gg.data create mode 100644 example/heatmapM/test.2.label create mode 100644 example/heatmapM/test.2.overlap create mode 100644 example/multibar/data create mode 100644 example/pca/pca.normal.data create mode 100644 example/pca/sampleGroup create mode 100644 example/pheatmap/.Rhistory create mode 100755 example/pheatmap/example.sh create mode 100644 example/pheatmap/heatmap_col_anno.xls create mode 100644 example/pheatmap/heatmap_data.xls create mode 100644 example/pheatmap/heatmap_data.xls.pheatmap.pdf create mode 100644 example/pheatmap/heatmap_data.xls.pheatmap.r create mode 100644 example/pheatmap/heatmap_row_anno.xls create mode 100644 example/scatterplot3d/pca.normal.data create mode 100644 example/scatterplot3d/sampleGroup create mode 100644 example/scatterplotColor/scatterplotColor.data create mode 100644 example/scatterplotDoubleVariable/scatterplotDoubleVariable.data create mode 100644 example/upsetView/upsetView.data create mode 100644 example/vennDiagram/vennDiagram.data create mode 100644 example/volcano/volcano.data create mode 100644 example/volcano/volcano.data2 delete mode 100644 p delete mode 100644 python.log create mode 100644 rFunction.R create mode 100644 s-plot_tutorial.md create mode 100644 shell_test/shell_for_test.sh delete mode 100644 swap delete mode 100644 swap2 delete mode 100644 tips create mode 100644 tutorial_markdown/2017-07-09-R-boxplot.md diff --git a/README.md b/README.md index d9d46e2..ee832b3 100644 --- a/README.md +++ b/README.md @@ -18,11 +18,13 @@ ${filename} colorBar #### Lines ${filename} lines +${filename} lines_lm #### Dots ${filename} pca ${filename} scatterplot ${filename} scatterplot2 +${filename} scatterplot3d ${filename} scatterplotColor ${filename} scatterplotContour ${filename} scatterplotLotsData @@ -33,6 +35,7 @@ ${filename} contourPlot #### Distribution ${filename} areaplot ${filename} boxplot +${filename} density2d ${filename} densityPlot ${filename} densityHistPlot ${filename} histogram @@ -48,11 +51,20 @@ ${filename} heatmapM ${filename} heatmap.2 ${filename} pheatmap ${filename} pretteyHeatmap +${filename} areaplot.new + +### ecrichplot +${filename} enrichmentPlot #### Others ${filename} volcano ${filename} vennDiagram ${filename} upsetView + +and other tools: +${filename} png2eps +${filename} boxplot.statistics +${filename} colorLegend ``` #### Basic test data set diff --git a/e b/e deleted file mode 100644 index e69de29..0000000 diff --git a/error.txt b/error.txt new file mode 100644 index 0000000..0e50a20 --- /dev/null +++ b/error.txt @@ -0,0 +1 @@ +sp_pheatmap:参数-G 丢失 diff --git a/example/.DS_Store b/example/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..aca3baea6ee9d51c35f025c864589f7e3a799aa7 GIT binary patch literal 6148 zcmeHK%}(1u5Z(=G@d{OSB@R^TVWl3pt&4b<}muin9CS*KoKhfntuq6 zqs~ahdJws;kut@Ka5U(L=}a^^o+1OdcJnNRbvtH#c5D4q2qS;Oewqx5di|PL=Blq= z&pSdah&SS`*zu<@HKoE4U3Y0b zUj4jUlZ}Ms6A}Z&05R|k8L(TKv+xX`ogSGOAO;?m0o)%XD57VvG^n=@Xz=$D z$E%1aVB=i^QCjpYmIh%2gqu`AlgjNCgPU~lOB?4|EDf4;#`Vll$Ii^{4TbC3!7p_< z>*D#}{{Q{|ZW8r~0b<}qF~F-Wztx0SvS;he%i&ooK@UJtFs?Ls llLCf5iXj${;w4Zm;Fo9sdKOEA-~pi@0Zjun#K5C6@E0)MVwL~^ literal 0 HcmV?d00001 diff --git a/example/areaplot/areaplot.data b/example/areaplot/areaplot.data new file mode 100644 index 0000000..2cca5cd --- /dev/null +++ b/example/areaplot/areaplot.data @@ -0,0 +1,7 @@ +len known_unexpr known_expr new group +30 1 0 0 1 +42 1 0 0 1 +45 3 0 0 1 +46 1 0 0 1 +48 2 0 0 1 +49 1 0 0 1 diff --git a/example/barplot/barplot.melt.data b/example/barplot/barplot.melt.data new file mode 100644 index 0000000..549202f --- /dev/null +++ b/example/barplot/barplot.melt.data @@ -0,0 +1,21 @@ +Pos variable value Set +-5000 h3k27ac 8.71298 +-4000 h3k27ac 8.43246 +-3000 h3k27ac 8.25497 +-2000 h3k27ac 7.16265 +-1000 h3k27ac 3.55341 +0 h3k27ac 3.55030 +1000 h3k27ac 7.07502 +2000 h3k27ac 8.24328 +3000 h3k27ac 8.43869 +4000 h3k27ac 8.48877 +-5000 ctcf 10.69130 +-4000 ctcf 10.76680 +-3000 ctcf 10.54410 +-2000 ctcf 10.86350 +-1000 ctcf 8.45751 +0 ctcf 8.50316 +1000 ctcf 10.91430 +2000 ctcf 10.70220 +3000 ctcf 10.41010 +4000 ctcf 10.57570 diff --git a/example/barplot/barplot.normal.data b/example/barplot/barplot.normal.data new file mode 100644 index 0000000..6fc0b67 --- /dev/null +++ b/example/barplot/barplot.normal.data @@ -0,0 +1,11 @@ +Pos h3k27ac ctcf enhancer h3k4me3 polII +-5000 8.71298 10.69130 11.7359 10.02510 8.26866 +-4000 8.43246 10.76680 11.8442 9.76927 7.78358 +-3000 8.25497 10.54410 12.2470 9.40346 6.96859 +-2000 7.16265 10.86350 12.6889 8.35070 4.84365 +-1000 3.55341 8.45751 12.8372 4.84680 1.26110 +0 3.55030 8.50316 13.4152 5.17401 1.50022 +1000 7.07502 10.91430 12.3588 8.13909 4.88096 +2000 8.24328 10.70220 12.3888 9.47255 7.67968 +3000 8.43869 10.41010 11.9760 9.80665 7.94148 +4000 8.48877 10.57570 11.6562 9.71986 8.17849 diff --git a/example/boxplot.statistics/boxplot.statistics.data b/example/boxplot.statistics/boxplot.statistics.data new file mode 100644 index 0000000..2da9fc1 --- /dev/null +++ b/example/boxplot.statistics/boxplot.statistics.data @@ -0,0 +1,9 @@ +Gene hmC expr Set +NM_001003918_26622 0 83.1269257376101 TP16 +NM_001011535_3260 0 0 TP16 +NM_001012640_14264 0 0 TP16 +NM_001012640_30427 0 0 TP16 +NM_001003918_2662217393_30486 0 0 TP16 +NM_001017393_30504 0 0 TP16 +NM_001025241_30464 0 0 TP16 +NM_001017393_30504001025241_30513 0 0 TP16 diff --git a/example/boxplot.statistics/boxplot.statistics.melt.data b/example/boxplot.statistics/boxplot.statistics.melt.data new file mode 100644 index 0000000..1b885d9 --- /dev/null +++ b/example/boxplot.statistics/boxplot.statistics.melt.data @@ -0,0 +1,5 @@ +value variable Set +0 hmC g +1 expr g +2 hmC a +3 expr a diff --git a/example/boxplot/.DS_Store b/example/boxplot/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 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 E0fZjg>i_@% literal 0 HcmV?d00001 diff --git a/example/boxplot/boxplot.melt.data.Expr_Group.jitter.pdf b/example/boxplot/boxplot.melt.data.Expr_Group.jitter.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2eed358ca2ac63ed46a30f77f784f060669d17d4 GIT binary patch literal 5009 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 literal 0 HcmV?d00001 diff --git a/example/boxplot/boxplot.melt.data.Expr_Group_Group.violin_jitter.r b/example/boxplot/boxplot.melt.data.Expr_Group_Group.violin_jitter.r new file mode 100644 index 0000000..7a2dbb9 --- /dev/null +++ b/example/boxplot/boxplot.melt.data.Expr_Group_Group.violin_jitter.r @@ -0,0 +1,351 @@ +source('/opt/bin/s-plot/rFunction.R') + +if (FALSE){ + installp(c("ggplot2", "reshape2", "scales","ggbeeswarm","dplyr")) +} + +if(FALSE || TRUE || FALSE){ + library(ggbeeswarm) +} +# else if(FALSE){ +# library(ggbeeswarm) +# } + +library(ggplot2) +library(reshape2) +library(scales) +library(dplyr) + +##### add by lindechun + +s_boxplot_median <- function(dat, more_v=TRUE){ + + ## errorbar(replace median line of boxplot or violin) adapt to sub-xvariable + + errorbarWidth <- function(x){ + y<-mean(unique(x)) + dfd <- function(i,y){ + (i-y)*(0.75/length(unique(x))) + } + cc<-sapply(x,dfd,y) + return(cc) + } + if (more_v){ + temp1 <- mutate(dat,a1=as.integer(Group)) + temp1 <- mutate(temp1,a2=as.integer(Group)) + temp1$a3 <- temp1$a1+errorbarWidth(temp1$a2) + temp2 <- temp1 %>% group_by(a3) %>% summarise(median=median(Expr)) + + ## force boxplots from geom_boxplot to constant width + ## Ref: https://stackoverflow.com/questions/16705129/force-boxplots-from-geom-boxplot-to-constant-width + + if ("NoMeAnInGTh_I_n_G_s" != "NoMeAnInGTh_I_n_G_s") { + tab <- xtabs(~Group+Group+NoMeAnInGTh_I_n_G_s,temp1) + tmp <- temp1[c("Group","Group","Expr","NoMeAnInGTh_I_n_G_s")] + }else{ + tab <- xtabs(~Group+Group,temp1) + tmp <- temp1[c("Group","Group","Expr")] + } + + idx <- which(tab==0,arr.ind=TRUE) + + if(dim(idx)[1] != 0){ + fakeLines <- apply(idx, 1, function(x){ + + if (is.integer(dimnames(tab)[[2]])){ + fake_1 <- as.integer(dimnames(tab)[[2]][x[2]]) + }else{ + fake_1 <- dimnames(tab)[[2]][x[2]] + } + + if (is.integer(dimnames(tab)[[1]])){ + fake_2 <- as.integer(dimnames(tab)[[1]][x[1]]) + }else{ + fake_2 <- dimnames(tab)[[1]][x[1]] + } + if ("NoMeAnInGTh_I_n_G_s" != "NoMeAnInGTh_I_n_G_s") { + if (is.integer(dimnames(tab)[[1]])){ + fake_3 <- as.integer(dimnames(tab)[[3]][x[3]]) + }else{ + fake_3 <- dimnames(tab)[[3]][x[3]] + } + setNames(data.frame(fake_1,fake_2,min(temp1$Expr)-0.06*(max(temp1$Expr)-min(temp1$Expr)),fake_3),names(tmp)) + }else{ + setNames(data.frame(fake_1,fake_2,min(temp1$Expr)-0.06*(max(temp1$Expr)-min(temp1$Expr))),names(tmp)) + } + } + ) + tmp2 <- rbind(tmp, do.call(rbind, fakeLines)) + }else{ + tmp2 <- tmp + } + + return(list(data_m=tmp2,data_bp_median=temp2,data_m_temp=temp1)) + + }else{ + + temp2 <- dat %>% group_by(Group) %>% summarise(median=median(Expr)) + return(list(data_m=dat,data_bp_median=temp2)) + } +} + + +###### add by lindechun + +if(! TRUE){ + ID_var <- c("") + ID_var <- ID_var[ID_var!=""] + data <- read.table(file="boxplot.melt.data", sep="\t", header=TRUE, + row.names=1, quote="", check.names=F) + if ("FALSE" != "FALSE") { + data_m <- as.data.frame(t(data["FALSE", ])) + data_m$Sample = rownames(data_m) + + if ("FALSE" != "FALSE") { + sampleGroup <- read.table("FALSE",sep="\t",header=1,check.names=F,row.names=1) + data_m <- merge(data_m, sampleGroup, by="row.names") + }else{ + print("Wainning: Because per x-axis tag contains only one data, so recommend you to use the scatterplot or lines script") + } + }else { + if ("Group" != "variable") { + if (length(ID_var) > 0){ + ID_var <- c(ID_var, "Group") + } else { + ID_var <- c("Group") + } + data_m <- melt(data, id.vars=ID_var) + } else { + if (length(ID_var) > 0) { + data_m <- melt(data, id.vars=ID_var) + } else { + data_m <- melt(data) + } + } + } +} else { + data_m <- read.table(file="boxplot.melt.data", sep="\t", + header=TRUE, quote="") +} + + +if (0 != 0){ + data_m$Expr <- data_m$Expr + 0 +} + +level <- c() + + +if ("" != "") { + data_m$Group <- cut(data_m$Group, ) +} else if (length(level)>1){ + level_i <- level + data_m$Group <- factor(data_m$Group, levels=level_i) +} + +x_level <- c() + +if ("" != "") { + data_m$Group <- cut(data_m$Group,) +}else if (length(x_level)){ + data_m$Group <- factor(data_m$Group,levels=x_level) +} + + +facet_level <- c(NA) +if (length(facet_level)>1) { + data_m$NoMeAnInGTh_I_n_G_s <- factor(data_m$NoMeAnInGTh_I_n_G_s, + levels=facet_level, ordered=T) +} + +### add by lindechun +if ("Group" == "Group") { + dat <- s_boxplot_median(data_m, more_v=FALSE) +}else{ + dat <- s_boxplot_median(data_m, more_v=TRUE) +} + +data_m <- dat$data_m + +## calculate point size of jitter +data_nrow=nrow(dat$data_m) +if (data_nrow < 50) { + jitter_size=1 +}else{ + jitter_size=0.5 +} + +dat$data_m$Group <- factor(data_m$Group) +dat$data_m$Group <- factor(data_m$Group) + +data_m$Group <- factor(data_m$Group) +data_m$Group <- factor(data_m$Group) + +if ("NoMeAnInGTh_I_n_G_s" != "NoMeAnInGTh_I_n_G_s") { + dat$data_m$NoMeAnInGTh_I_n_G_s <- factor(data_m$NoMeAnInGTh_I_n_G_s) + data_m$NoMeAnInGTh_I_n_G_s <- factor(data_m$NoMeAnInGTh_I_n_G_s) +} + + +### add by lindechun + +p <- ggplot(dat$data_m, aes(Group, Expr)) + xlab("Group") + + ylab("Expr") + labs(title="") + +if (FALSE) { + p <- p + geom_violin(aes(color=Group,fill=Group), + stat = "ydensity", position = "dodge", trim = TRUE, + scale = "width") + + if ("Group" != "Group") { + p <- p + geom_point(data=dat$data_bp_median,aes(x=a3,y=median), size=1)+ + coord_cartesian(ylim=c(min(dat$data_m_temp$Expr),max(dat$data_m_temp$Expr))) + }else{ + p <- p+geom_point(data=dat$data_bp_median,aes(x=Group, y=median),size=1) + } + + # stat_summary(aes(group=Group), fun.y=mean, + # geom="point", fill="black", shape=19, size=1, + # position = position_dodge(width = .9)) + +} else if (TRUE) { + p <- p + geom_violin(aes(color=Group),size=0.5, + stat = "ydensity", position = "dodge", trim = TRUE, + scale = "width")+geom_quasirandom(size=jitter_size) + + if ("Group" != "Group") { + p <- p + geom_point(data=dat$data_bp_median,aes(x=a3,y=median), size=1.5, shape=17)+ + coord_cartesian(ylim=c(min(dat$data_m_temp$Expr),max(dat$data_m_temp$Expr))) + }else{ + p <- p+geom_point(data=dat$data_bp_median,aes(x=Group,y=median), size=1.5, shape=17) + } + +} else if (FALSE) { + + p <- p + geom_quasirandom(aes(color=Group),size=jitter_size) + p <- p + stat_summary(fun.y = "mean", geom = "text", label="----", size= 5, color= "black") +} else { + if (FALSE){ + if (FALSE){ + p <- p + geom_boxplot(aes(fill=Group,color=Group), notch=TRUE,width=0.75, + notchwidth=0.3, outlier.colour='NA') + }else{ + p <- p + geom_boxplot(aes(fill=Group,color=Group), notch=TRUE,outlier.size=0.5, width=0.75, + notchwidth=0.3) + } + } else { + if (FALSE){ + p <- p + geom_boxplot(aes(fill=Group,color=Group), + outlier.colour='NA', width=0.75) + }else{ + p <- p + geom_boxplot(aes(fill=Group,color=Group),outlier.size=0.5, width=0.75) + } + } + if ("Group" != "Group") { + p <- p + geom_crossbar(data=dat$data_bp_median,aes(x=a3,y=median,ymin=median,ymax=median),width=0.8*0.75/length(unique(dat$data_m_temp$a2)),fatten=0,size=0.7,color="white")+ + coord_cartesian(ylim=c(min(dat$data_m_temp$Expr),max(dat$data_m_temp$Expr))) + } else { + p <- p + geom_crossbar(data=dat$data_bp_median,aes(x=Group,y=median,ymax=median,ymin=median),width=0.75,color="white",fatten=0,size=0.7) + } +} + +if (FALSE) { + p <- p + geom_quasirandom(color="black",size=jitter_size) +} + + +if (FALSE) { + p <- p + scale_y_log10() + # p <- p + stat_summary(fun.y = "mean", geom = "text", label="----", size= 5, color= "black") +} + +if (FALSE) { + #ylim_zoomin <- boxplot.stats(dat$data_m$Expr)$stats[c(1,5)] + stats <- boxplot.stats(dat$data_m$Expr)$stats + ylim_zoomin <- c(stats[1]/1.05, stats[5]*1.05) + p <- p + coord_cartesian(ylim = ylim_zoomin) +} + + +if (FALSE) { + p <- p + scale_fill_manual(values=c())+scale_colour_manual(values=c()) +} + +if (FALSE) { + p <- p + coord_flip() +} + + +if ("NoMeAnInGTh_I_n_G_s" != "NoMeAnInGTh_I_n_G_s") { + # p <- p + facet_wrap( ~ NoMeAnInGTh_I_n_G_s, nrow=NULL, ncol=NULL,scale="fixed") + p <- p + facet_wrap( ~ NoMeAnInGTh_I_n_G_s,scale="fixed") +} + + +#Configure the canvas + +p <- p + theme_classic2() + +#Correcting location of x-aixs label +p <- Xlable_angle_correct(p, 0) + +#Set the position of legend +top='top' +botttom='bottom' +left='left' +right='right' +none='none' +legend_pos_par <- right + +p <- p + theme(legend.position=legend_pos_par) + +#add additional ggplot2 supported commands + +p <- p + +# output pictures +w_auto_temp=length(levels(data_m$Group)) + + w_h_auto <- Canvas_size(w_auto_temp, "Group", "Group", FALSE, "right") + w_auto <- w_h_auto[1] + h_auto <- w_h_auto[2] + +if ("NoMeAnInGTh_I_n_G_s" != "NoMeAnInGTh_I_n_G_s"){ + if ("NULL" != 'NULL') { + h_auto=h_auto*NULL + } + if ("NULL" != 'NULL') { + w_auto=w_auto*NULL + } + if ("NULL" == 'NULL' && "NULL" == 'NULL'){ + w_auto=w_auto*3 + h_auto=h_auto*0.7*length(levels(data_m$NoMeAnInGTh_I_n_G_s))/3 + } +} + + +# Control margin of plot by exist status of title, xlab, ylab +if ("" == "") { + p <- p+ theme(plot.title=element_blank()) +} +if ("Group" == "") { + p <- p+ theme(axis.title.x=element_blank()) +} +if ("Expr" == "") { + p <- p+ theme(axis.title.y=element_blank()) +} + +## savefig +if ("" != ''){ + if (!FALSE){ + Savefig("boxplot.melt.data.Expr_Group_Group.violin_jitter.pdf", p, , , "300", "pdf") + }else{ + Savefig("boxplot.melt.data.Expr_Group_Group.violin_jitter.pdf", p, , , "300", "pdf") + } +}else{ + if (!FALSE){ + Savefig("boxplot.melt.data.Expr_Group_Group.violin_jitter.pdf", p, w_auto, h_auto, "300", "pdf") + }else{ + Savefig("boxplot.melt.data.Expr_Group_Group.violin_jitter.pdf", p, h_auto, w_auto, "300", "pdf") + } +} diff --git a/example/boxplot/boxplot.melt.data.boxplot.Expr_Group.facet_wrap.pdf b/example/boxplot/boxplot.melt.data.boxplot.Expr_Group.facet_wrap.pdf new file mode 100644 index 0000000000000000000000000000000000000000..126954706d8217286628e794db8a1df341669dc9 GIT binary patch literal 6245 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 C1^5>L literal 0 HcmV?d00001 diff --git a/example/boxplot/boxplot.melt.data.boxplot.Expr_Group_Rep.pdf b/example/boxplot/boxplot.melt.data.boxplot.Expr_Group_Rep.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c543988699b16154920039b4a3c9d9408514f783 GIT binary patch literal 5951 zcmZ{oXIN9~(uNTPB=jzV5)cp+2noF?z4szPn#2$wKoU%mfb`x4rAV)W!a)S2cWFv* zB8Z}5p-2bm;Fq|!`|PvN`POyi$9mShGxN@$-17*VY3WFSC1n7@!E?c%gNK91?Xdtb zPzs2->d8OUg(}k+fg6Fl0##aP1lZfp#W$0r{&N zAjrzc3jqXa!tgLpj4Kdi26IK=fYPJ@3*f&G$p6;?avV7ti$LT53@uVAobUaDJ(L%s6&IoefI6P@) zC;&05##SG5UY?<~?Pdr3?&DIF&X}zFIiMQ7klcvosG((@+Ip1?a`fw)v}75KmVqza zRgoAsT=4SK0z3CBnw;QZ=z8zs{?)+N{NTClL9W27Asx&Br8SKxvKlQJ2H)*hDNp7PkLQIq2?e~gK4;= z{xWy5*_of%sy>BPW+=1$sdq2AV|29n-l&HM&GEVJ!=nSzUlefpr(ay>A?P69bBce_ z4FK>0@%S}Fp=JHGvg@g>^r1rjGP8G)nt2#IS1;nV>7tZT%a`H0OxPdooX#P%>`BNg zbJIEc*3|bbN4evb&I+B^{oE1{E}`$2yULeiDmI!qoX2v(AMo@-eMkW6KJ*Ht6T|^b zCC#4%DiS+mQzAOb_aTA-5#=?v*x@YP++OS*6q%%qUS$pEC z)r<^XoO7+C#3umPW+$-+6*MwBKI8s^rY+kpT8P2bm*0S4!QlzH@^;NxF7nJHx4+4$ zEi5de;tgyZiDO}&NLcZ1$6nBExEFyYQqPGOnL7yNzA%MSfw4{El8y25sT8h7e3){Lt){ z+L}R)lCD!xMJFHoQzrq{BKf*g8oH*KNb1)B8%^G~y9_SAq^U1BoPoM}MV;PJ=rk7i zvv?lppYN=sNOT-(y5=HaHkB!1qek3NoTStGafm77GdM9bK@;mTz0 zhgBFWL(foy*xM2Jv@*$u3d5g`EgIpZCT_Xkhbr}E!o@&R=b^$i4{MDv;Gy;edXKqZ zxg%5VIc1=qbX!Tj&AL+ZE4k6N2~WTzmt{{+c8z0)g`?Bu!i~`MS{FAkwQ-R{W5}cC zc8;Z*%~rY@2Fr&%=Y|}}G0#~9S2mCL%7aDuFKS2eaJ=9f>xj;0FF8J26gM1a)H6x^0vX z%hnJW5D+%XoQXC(@Bn^QHcWS;373j&5RjXT%0hrY`T(3oD04jW`bB_M)c9!%t>=-F z8KF^=BieA5QLaWefS|1gH>0|i@|09~ zLPTnvK<;io&^J4w2OjnQ1Yc~X><8D&U=~%LL5B-c^0{p`u2JkVZ&bRxa+aSpbk)3k z07`AL>pQe(b@$P(H|q>}T~{n)3u2HiXgAYg45)Gjb#ktL=2A6`O4|VJ-i~})(T`}> zI2X9Cz1&-Gb8pJ8pr$EnF2!!t!tl$pnt04Q#BrEVyTRz#qsptw9zkyj%}RaS+N_+r zX380AKGo&Y8aU;bDPDs=Jo>*EU89B$gx9rBNVa`z7O}?qm1V9^N#}W4l1GW7Cu#vBVWc2*MXZ8jSD>=LYR+QdT*?E-Hf~TG#V=6-e(Zs)^KZg zg}btEd&AvJuX*3j%H&9PYI#b;@%m9^`fQB2*$HP{MlM@yC0ifj{UxF1?{ZQ$4YsC! zU|uGioqp+R>~y)mEj{Ez(Cy<6iy>ryV~kig{6|M))< zg-jrS5W;Un`GZVAhDc`|&<;o@5(}UMiCi!Q5`ln$AY+6x5~hJ60_~(o-(;jABs{~F!Cn?fwYNuT}wO})>Kr; z=}09#F<47482pz4!dd8Q0A+uN{~Maf61kooNMBP^1BOF51Leq34!<#s{Pz2f>SXRg zlZ$|~5OVuokwQ>T%gRg3JgN8$MD$}&p=MI0U`+Ta^UCk1d9)^OdvWll>N}V7 zd}#Jr8_fK`zZ>9@+cNy#bEX$kU~kIT16)U9gZ^Z@7_su3=3T4(c<6h+<^w9Gg3S&M$}9nM52(K6b|1{ znKd0p4myD-VyapRO#ZhoH2OJObj^voUMYL`&ff4;u7?^mN`?aqy z;?@I&`*^UXqdeNhw^*y|<60xnR9US6Eg&~XP)*+1Mp?(>}7=091oZSc6ztl?q~|Sh-&4Xe1GZ=vW2H64{C z(bfi=870&A@pFdH6{O}{=gSqAn$wzPKfX3`eL~b7@PpM@$D?3ybZCJBFRsLs9V@8= z&C47)zfirvx~*`)NfVk6j{_&14K(5t;jE^t=Bef#Pf!f!>4}3CSK9nbX_D`I3}ZL; z*)30SE#NN8UADW_$_f6V7w7O^wF)=wRZOC;bY1^w>vhQs>cw8q)66!@vKGhOy|v!I zf!NdWV-7f@nvg3X${t7eG)zz9GE5@>{)mo(VZ9+yU5M>Rlu4IYK~Q~!jlPPOiYcFP ztFXDAi;$dHu#f;sVC7P_;CsOq;Dc8>&dgYq8%DDlXpvlj50~1^^Df(5J}tV=VSQyn z6o1*?oLC$Mm9g5kvj5k^3Y&bQ)@{9wCv1+d^rFkV%xxc872>THBgURXu21VIS}AJ! zRAXZ|slV!Sh<8WLX?`+~5j_-j6@^=cm6{?f8zu-7I!iZ}6c{z7i>XH}kdK~Y+(Ms= zamK`C8$372F^KQG%_(+1pLdjMVR0LB06QQYC|{SjZhF0SN#wQM>no)dufIL^dA#x3 zVB+m-or&2e(i8p@;}dmHyq|m+S3^EThIxE(UmjH`+rTrS68ia8v+gTK&cB-slO2?~ zC#7%xjWCI~nFXbf$X_U-XC_YL=5@!j2~I}kq>IzE5Ua$rfLL?b{$O;b)&$G8z8 z-pSGF5OEw)5g!+SD^Bh#f#)j3TAE2}NFFWQ>Y*WbTmFX2m=ku81KtNQmVS@&oo0}$ zmNx{Kfq5a3gXagRzcmd;N{n!saB0NS#PS-kjXy~5^h6}sj!A?{&`UIl=icD4>9#{v zFV!8mp)lF#_ip~Z5x3agEZxT8TV>_x5^rjIcHY`=+J9&$o4+&ck9I}(*3H1Z$8+5I zZ?$!_zBvgEEew5`KL{HeZ3mB5PHxb|_5k20muznhWgo@zJ4)ZSC#O4ZEc;FEb8{CP zW*Ely7y9&U?QNZ#k8fCNz}kOzc!XxC)2eGhTX;KoC)^D^q+<4G&e46)8&>kfwRB#6 z*wt~;QLuuk;*F>4j=_!?rfX)nsq5}YM&3u8BD8Ep${bb1w%N?jq?BG@murj@RxU*KEFS;$_HS$MOT z*qhv|2QR+`?Qx75k7Dm4^uj+Ee$JdL;XV+5*WjhnaV=lr(}Cb;ZJ$_4@kyJk*1bKp zZs9CpUAEC^aI{49nqqzy&CvE((4!i|l6uco$yN3oS`01b{#qYs-c+bTB<0dogFD8v zIV$OMITlHqR_$C?^f@I5C6kX@P3Vnha(Be8inLs%N=tfp+e(kMnC=i#BfSNQtRAS2 zsV?fzN?Wm)69%x!A~dICtD3rHriUkjy0oesAsL@jEgx)&$SdvYHuHN(UOw?P^DTR9EYH_JCzadeW+pyg5ioplWH+1V> z${;l5rvKaf&k@fC@;!&G2dqC$exG?)cU}}KISk^Txlq-DqlN3fN=Q>qTW&UkLCx!8 zpBYve+Va>>J0Q$zYL@&720!%Tp~iR1T~>X z`-N-gh|lYKAC-K*+rPHUKYrC3XaAKrP4^NES}sFHq&JHgS}VY%^(*ArZOK;CECLw+Ti^EAqle36YH zWrtOs9C^RFn8TEDXiG&-6PMS@*vq4&Pv6boU}p8|1zKJ;?Jrm#l+V}U(8KR;;JE$k zzT}Lx#2jYq@&?EpS2`>KuU=casfpLjixf zf!b)2@rFc`>_9TM{`(DzM6085$ln40q=j^GL69s!vd3o!l#vCYkZ1x9s3-@zO~Bw0 zo(LB_04yT|a>kHcOB@af1i4~icSwv2gA>T83rAw%1eA*>f(QiRk)F;Z2?c{=F=!y@ z78XGcB%Or8;UrfP0CGl>O5u<=AV?C8!8;>dfFSIzCgCLV_wx7S{CR6{7Zw7Y+~{Q zME|9M*e`*kEdD1HL4^2jvv=RM7la(X2@efT-ie&!&rzQmf{|`;^zcg8h;(yhU zm6iQlFL*2r>50ISTy7x966uQ|-4_VbN4sE1`x$v2APWoz4*-7-KLPzQ^zV|K9hzzU8`}Idjgv-}iIQdCqgs+?OBf>RnfqyTNifYB35Ig^BuO z=g*=jsvrt`?8%~~#Uiic@9Grj0eh#s-&!_s-mof7hph z|3faX1A7_>3W2o{mCBq@vmm_A6irs>JcG zR2xkmar6fTJ=&St>mzGHcM*t#fwpv!<9`@LZ#v?r;&|eS0;iE1+x7`4JOPGIMIl>{ z51L`PFvJ2u9=&ip4>s>Q;`sCFn4Axdpxt2F{5)o2fgU4g^+8|!lZr>XBazoWLl00; z#Br(q-aK;S_-IPv5F&E)Cv@@p@1ng<#AhZSYT_1l7W|7s@zN2$wNDZHc^J+JURv=k z=3Y^}A*`PtHU3MJN9TM3+t9xRj-TgZq#hcG9j4r2VK2^5A_bn4;RfR}lr|f9&Ca;g zWNh79W|85D{37-@?-Kj^t&8|DLFU;7U(uGi%v+%$%rZ56%rZJs%{2iKMKVDj#hc7lyMdri@7F=os%KX z39!fz2l-iKblTv?LJQ2YWo%kb@!3&rQ(}L=&#h-{%@d6c!Zt&sZtTqyC4nZDfn2NT zZ2c~+n7J@Y^lnHoBxw?=8UFlEQuP*JY<9@9!;L#hL!Ty-{B`4=7-XL2F-xP1%?@BQ zHBisEC-(Q&mH2G>*9B&xS>`M~O?Ucx)F1{Ep&h?(4g4&>71{xc+T3ts=-?h^iIFPE zsNZB@mSHu?IO(th9l+Jib8pOguwfm>-nP|oclw*30_ysk57+_CmjPE$dJZ>q`kQOm z-|=WgnXwez5{unrV3CQD@^#PHWH`ruzNq%G@NAP34;fIF6qc9Kq|+ZWC}eiUr6@y5 zj2x5A{95YWt@4=c)3471_rTL2Oy#k38Cy$pTs9=cZM^1G_-inrPrndmOLw~;m_ug92I`?jF+BM>{8o8BQWsfd1WLy;>J>a2 zxxJeQGBlKi%*UC(1UauTT#B1ERtQ#%Ep%LY(_yR-Xyha{K2}=-#4h$u|8pJ|8G1A6 zGOdgbvAxgxG&#=IJ z9?wETy~ge3--!LSXOFv+wEmUXN{tJcYlXw9YVRJ19^LYnXylIFNu4$>8ypfb*r+QA zOW$8RNL^~0v)UVrDdSNoBaantjBT8Q4XLzs+LCQ1oMNSdr_af1`Dv`zc5puni09o= zsq17hDG1eEi$T2;3huy8oYTBr+pM|9aP9YmlN9_i5%B-n@>)Ij6MV=-Vq!%_VQs{x z0b|axvO-aVdz#-v<3Dk)fm#2vbhe7hgg=Q~J3>FGmjaM7hYjkKyRt4ned^{Jt zTu{$l{@o>r4Iyq*IE8TuN(s1TBlNNNo)vya!$v6ol}WvZbwbw1VN5)L+cmW6RXfNU zRUCU-uaTxYDRy@=MAJk^i@5YUDMZb$d~*6q6*)`YW+uAY&#nJ2DC%3+7v!>>06yf8Cu0tB3_O*9l!o~u4+fJYD&#KYxKJtxNo(c z%eY>{_hr_{b06`NRrFaJL#x8YkAu=)3TSx7g}oWAD|HM4y>bZ>z-2pPdrj-TT98-t zLwFv{4Fksh9J^;Fl~?By6m1VUN(_5BDhBccnwLQ16eDF**p8O0GS{>P9Q*<5TOB#f z%=&0tlIRk&hXpzd`B$pU-GP{Nytz_E&#l?F$`ff&tAT@rg2$P057S0|bsc;+R#Vpa zzFI&la18445RB!)#>8b~?-16azRv_Kdq_P) zm8KfKr1eY`Ui$m$xsPauDrLl$B7>%r!SghU?z!*AUzudSuTHyVI|ju&kJNH6^DQ#h za&Pe6KN0Bwh$P0(O^dlMsG1lk+A~#YI&uTHaQ4WEb>9&AINWm6;8%ut##^!OWiji* z5_Sd|RwCcW;h%s4zxH;(*JnQGKW;qly$483lls0osN6}GE^G0!jvf`NHDI>FN4{aG z3IH1cdfd*)$O3zXjhO50{&O+{&J$v;&et@{ybqUw-Kj0?PJh&clSf@{hIr_=7@qHH zGse&V8P8o#L z+>>EcQZE~yWVZ_8)X#Jb+PDok`ywG32u%#$XaANABP_6oY4O&@*HekQPo+4C08Q+) zG0!50WNP%N%B1Qg4AZxs^B-$|7Kpg-YBE%LbU!>I{JX+hT4TTQ*`lK0JDb~|xTAsf zsw)r98&->qv5MGnDqMBw9mPt#A~)hBKy=U@L@QH|;S*SBO`FW#3Glzyib_nRd@ zXv#^7CHBnvr?XaA>E(r)Ho!T~KTH~`k7Qiwt2xS4C%2=9Q-|ZT$%?PYiWjICli?|M z!L!oUzM?)x1@#@}4cx)vzd|21e_!2>y8iX&hq-GEGAts>NKWaZn#~=5m(;jY>WF~K zTLB^3Eiu=$-;N~_AkG>02m>1eeMCwuxThm9{S9a~0l0c-8)UesXJNM|`+Cp)r#I-U zCr`(H4UR9FRgZcM;eYcP#{&x8(9C_ z?o%UVhPc@)`y1W_ZZj8bqNDq$hf@MUl1rgd%av_NBZ@6mqmWHI$e%gXrpPm{%vejO z!dU0@@j#YY`^FZJ56>kny9$(8WmXesw^o6TRCsB&Qa`tQwpr1Z=p_PR$e>W{l#KYc2hGQ=4ke zvz-E|DqKaLAB#30I~T^r3wSBC%vo12@b`W@hf*JdhmO=iI;PU>RR&nVr7hdz9~wSx zHVia#3@8j3s}b&LDq1PV)jn-l>k{m~!NVxscZcnsVm9BeYdddE6yAQ~{+@7$#avNb zr(*nf^4PU2uI_vT;lG5t+u5ogyRir(2Zw%Mwb~UAOCs?<>OR9esQvnFiTyP*?PV@D zbJLQnHS*mTNv|*ceq5~)J!NQ6V(JaiuU+CclY4b2?$)PSruJt}%vF^f`710bN7hBk z8IkE*N9Fr>tsG_`%TmlOD=E$(f64CG3%((nOh%nYrc8yTbG6*^itMM@$UVAN|VY>-+E{QT!#+l=to@kc6DP(vbcQJ+2oRgH*GwB1b768&t~X`(9J= z{nA=yett7ujIw9hk7-xke|JIkyk>Bh+71@hJkv_PRC}&#v8h8VW6AE2CBsbSq4(p- zW0eW7{kw|v4Ah&&eO49I6FOvitsSKTyRD~fZ4*TGT}&Xl_h*dfd4>~;7q^GqOTw+R z#S?*fUYf$vlfh-cnA^8f7XJCRuH2~XMe)iH4!m4kCX}lw32~K>2;DLZQ`eWK7L>gp zU29&4$9hnxWR-YB(zoK2$<@TXx~W8NMdwED_s{wbYKv0%VftLk=VXMHBkv^X-$!OF zD&nNdR^BIk7U$0R<$c%Zk={4x4Y#}Bp}Gy?OY%xay4!YKuQ5ONlW$s%*ppEFnTX7X zcL~rki%hts3s}7W`0eeS(+|_3`oZ&eb#v51xiI}#rJqPCpOc>~t>>!DB<6{AlZBMa zbkP#Pr?V^tpBTe5t@5IX^jzqs8sxGi+j&S&x2X9$XSN#Crc1Y~b<=JSq}+YgJ3o;_ zrzCAh6?>r}8+M~8%2Md{^``++lP7H`XIRznj!UrO?Cd`wyG%Psh}@p zQE=13O6Z~N->1G>Iq6J-IUkt{a{8Fc?vqugFDF&qnvcHhY3cEu5zn+_VtOc()XP*x zR%Cmdu4qDwA>bJCd!aNxP`2`lPEdNJ^o~vLBxF)BblQfUPOZ{{fxFUDpDwiW2ZOIA zBa5hI*!`M<`J|?r=xfWBtY7lHlvc#&--q*GbNul5QoCi&&F2mMzW!dmlLd)y<&5){ z{d#;S1;0{k_OqU4{8?@v8h9(#UU4<4w$LO;;B@fy^YiAh_iNdjEAvi$xL@$Qk^#YB zXDP_2R_V`j=6>bJt3!P6J|L|HMsD^#K~64fHQaA3Q z?Xh|r)=h$O*sz11yBE427kQd+WXHce8R6O zr}_SC%hI*+e^PV`HgrPg+<%*-in~-GFWvnC>_2vwu}K+bubgG?nA%kOoI_dgH`YihxsaHt#igb`Fvmchr<`si_E`0>l6YjX?Jcj zG^liPLZ;%fD!l(G+^C%Cbbnw2w}s(%$)qczSk=9M|UKPzvFNR>AK z!-rLB|8OUK7!&J;y4Yrx*j(3NWp}v;?tUU=n^VBzCXiK9@u*-Vf8b?g(vamBJ^t`Y zpZk{|mFgLkJZ)6kwvc@ljZj!L_o<)84BRd3 z>$(cJn_mQX45Q%7#%s=K>|KnbIp)#r;>zq)=Ax%AfE=y0Rd zl++A6E}i7ZG+$cto)a-jqoG#H1vi=F*Uh~G7$Tp~m<#{7d~vJ`m5B`QGFxPZpKmkt ze*;tI2Di(Ss?<7%V{hixxMjj___&U=?z_S+KW{${qykEn=G*v}JGjRS(Tetn^Pu0)S>48k zR!)mN1zkE?&Z{wDS5lhq=6}_N5?>CD9%t8m%}(qf64SXPsog~Xn}e}@wM>F%?3&e| z?Df;53m0_P>XXcb2 zv{!7(!a&~(*}?4vdn!J0?>05j>HrVr;%uzZESrYXLz+h(cUyd_Q$;X6LQU##IHQTu znp~Ar7N*G|Q(kfKL!0*VceSYq#+*xzR&gN<5O4s~b(NN=CIx!KRoDdCxCX+o%|;wS zP9)1TIV{Kvl#lR<%$tuFRWvzp$=?9{c+mc6Z&XT~OP7@DxF>n@nXZI&|8wrAp}e#0 zZ}uB#I?7nt=|I4Fw}V7!tnAyuILIpOs&6&c1A}w4j#CACSl=M<$hZUd2^>I3WKpywY?@xKYlE|CQ!Z~{pGJ)iTb$g(obPg z@*a2grdNO1`Equ&j*) zi#BLdm%<}z5qr9Mj?XtAys|?T{{mdX?9dz5Ksf*PU0SF*eZ^;wClZ0s=3)^nz7q#| ztjRIPEtVGbVAoCpD|=4-Bp7(|no@vSHLmno*Q zYq*ywo>AqOUUfa0d-WuSlVN02?y!H#L=SZ93VVPP9RN4k`B9v_*fJ}jqmx9Pkf65~ z4GzGtHAJC}U=ITh^R)UiF25h$zEIW9;T!Y#7HWB!?P8Q8KPb@$)Y7V|K#%I+@MTcC z{i$5_JyTITSMlkIH_JMF4((iPbPGzrj0PRDq_#7_S*FM;rBTsjSFgAvKlykkBX4}H z>MI6^_U6rl12-2t*0?_k0N2ZXbb~xX-nHe^Pp02wnokLaAFWPjKzf`uZ5a1((EgW9cb&sIR$QzPfE3YmL0! zJhSbY_inYla-y|o+wfmJ(}|}Kh|^|85dnZK)@wm|1Hb;@5|0B$d$#cV&vq%SSIb;q zyZ?%ge`_3C^2K(ENgw6X{@8=iJ$S-$IEA{^(N|<5`{cg&fjyEfNrF=$2w1^&NQW`* zJt5SvS1YI;jxs64hJVKY`Ru?Oia&~63o9Uu?k4jVEggL!-&4oR(n**@md|tERBSn) zA2FH}#?NrCoHs!7=CMggPyUQUsATba;#~oM#1yq!3M<=j$NVx`l~(>mnn{0mDv zeJ$3g=u?|IV`%QN%T_YRdBL0HCB ziCu(}sQ+-XAaDe{8(%S@>Iq5*!GUH;5RfhYo~osU1H|6b^#pO~kJh@t6WP<#z^xoN z1rN{0#lOL1u}}MMO4O4x-(X%`{9U%B?|sClg49Q-8yQE&*n$CmK}A5Cq$&WstD=JJ z?RmRQ_TG8(1|yMWGKA+RR8tS@Q;ml3d^^v`VS+Azu5Naq$>DN=JJ7*;Wl4U3CVOoF zq^%eCLZk$j_y$v|IshmQlzK>}`miPgV}>}O*-8VNNuUQyK~WFmw0%J7Q;jDETm}pf zRZu~Ke?kEj(}1W2kIwJuY5X7n@uI8tAfNu|G+mm_4Yz*{l>SCroE;J1C=LW! zkg;uUu>gqAd;VZVfM~>B06MD-KsWyvQ4c<3zPnwD^o3-&mrtL@qk@DW<`&8G zRe&s++d$lp3{UPbFa^qlfmx?(!pe(8uB4VMlDVVb?;SF$@u+E)>KD^YT ziUmAUyh!H+B>|wgIDnbXO%eyXv=%vF4ExVm`UHhiy7mFw&vcGdv15*1qND{8~5OY#}f;%o_%SM2mxQPsmd-g{|NPEHZ7)& zpHK&c@^GwnEc_E`^|OQ2<_8Kjtzr+p7QaZ|2sI^9$H9Pe{ic8!YmI=7U0F$(-lJ=P z>(;<}uR|sSu{1d$I|j(kv&N}V+~8Gv@No{C1(-2U_d^o3R<*u!uHbzy5VSwkC_sCs z190Qc>HLTZ72r9nSkoi9ZmCZ@y*D=|iTsYdV z8qxyWqV{}tC}~?Fr#0=h5b|47P|NYj814kJ)GNX+^WFCA>C9<+mhOHS<^R{Z8UHw@0 znTxgDv%BwEVbAmowi{cO2XnP0dD0qNB^mBa6`ha#xihxulio-5nDBZG7WrMoeL&6F zDcU1ziSCd^F|3_|g;H_&pjl1;jOVIDa)dc>U9dvB#VqcCh-cF*knwRu@=M?phWRQ=y_}GvGNYQEE$s;|S&E5{=Y}@$J1Ki00 z<1SSv)opcPIC-n$5_xx1Le&^iO?p6k-FgjyB8At?$s-i~_Onv|(N};k;p7pYNyP-( zz?{#6#-o1dIod0*5ZUx7co0IxDI))(df~ZX5kl!9&Dx}!>2WJBG=X9R7axO>QmyB@ z^&f+Ipouhd_>~=7QsH=dcl={8A2f*ug(q=Zd!u=G-tAeBS1fut%_U)CTd$${b{h9Y zuj3p0_?T%WLsES>n{HL+s87qKp9+ZnQ;^M>rG`%+s@!#ab6>oN`kWE^fjhe=$Vga3 z7VWcV2QScau!0x9B2O%lmq-nZ2QdQP8p5{}7=+}D|B|v&q%wN3S7&d1<$sUkidp`c z2H|8w^eUe%bPysIuamM<;yE|?h@s5um{1lm&I!_mPXBJ_vos$el$hid%_3Y>ecCSP zMkz6r(NsZ@M`80$Li%cp* zua`Ky#Wj_k$dE4qmEyj~{N79B%L2SEdLV346{=iP`w{nRjZ~imX~4%{EgDiw(3l+( zCRT>3l@?Xt{;nNGcK?~6I&@D>P(8YF6V!li!UQ$4o6K*dFGO@xdsD~}TK9MEDzx4G z;XgRtv!jYF_BAT9Uti&phX&M%6T8Pr#N zD8IkXaEV}aoGEZD5!B0f#6P=uJ-(3R@d#50I-#ys1KIU;s+nw*68?8sUs14d7@`KZ=iuf)vHVD!sEj0Gs`m;WTySnq`=UT4UcoFnfF=8#49 zD@Yc?TqS2UMFv*-*WuUYF)%k!?l005)j<#8i+?eJY3S!8@4$nXv%;Q%G|5A2c*x(< z2@I+qLf$!qEjLV%@8uAm@OTD-ra8V1=QiMTuOf$~r`O<`2UJUH=nmYR6gFGbhJk}% z7?>2&4Su(raQb4>YWQhAP$hwxjaW7NJRPekiNxb5=lbyc&_Dme&wy8&XQOW0eG`uM zI|^!L5J80)fG}zt&9l*@pyHZdN4VyDg336-H3`#z-L+_CdZuki3ftMwspM0H*My%> z3(r|1uTg-Fnfi=!b&c|{8?U}<`4Xd?po8sHcw_g?A+9y@-JaI72rGas{M8~kCAgpl z>x6>IfG`fnmhhql=@9LQi%Vp-<6=VMIKepyBQ+de*0UYeQ1k(Kj0uaVQQ;sk6%LT7 z&n}Uvk$reFEelf-`4X_GjTdPWaRupi<3^CS&7l5hem9&KiGQCy5U!$k^ocNW(Z|r9 z*yDh)fP=a^*vfz69Wctw* zWjtldz1boEJEXZN-!Io2`%L-VehrhGcR>wb$m0ph5}STCVTeBtMfk-Z{mr3p!97G< z6X%do6XIsa_M5WV(gM<=YRRKGOhA~utLE4#fg*@DntQGW>jp=b5UBjv*uYjW4xO>V zzalYZZ~CYLVT*Xa56p+lkCrA`i}Tyo49knKp~Wa)Akv zyt~L|WbDL&4lwludpF{px(>cUMk9%j7%AA3Dm8=Z6lIygbbh6KcMvgs zOpFxm#I5o@hKH3MBwl1~J4n4qahXZ)`dU|gkW&B)1asrOtY(N^YcvQDQtZdTHlBuE z=w+na&QaA8c^LLhBzfWhrAL+^gOf4J&yGj`9G;~?Ovn<1w#rDw9wWIKljXz8gQ1J6 zv=HD~SDCv3A;*r>ynC?Qt0B%e^n$^HFMb5I36`Q!2mdb4t*%CD#^FY2p(#_&-=OJE zdEbzj&8B_YMeINzSoFnsNSi2b>gJ5e58s03xu1I<9B2tCtRCN>nOvb8k$OGsDl+#Q-7D}-1iRU? zA2e}Lm5=%3)`nULqtGkUVP@n9muTp2eBVJtGDiP6h!o~My#aZ`Ikn;TL@jBCxE9xV zP@=wH2Oz=0JLbyghBq3Qi4+9=Qoq%Iw?R1pzT2$4n%^u^F&|WGI^F`1}+@37}y3X zMK&E!`5R~NwjGDefewz>cb*?8|Dc&JiyX;5<*@#`DgH(cu^tM)n@J66NAV|?TlW%I z)5~Yu8P>*nra`%QZ}*a^t8cyvwN2_~?mf^#zr8m@vTJ`jbHV*WQU^J#6A`%uG#isp z$6V?CVbT<9dW(T)iGb(GhOHx6dTY6T5xhI$u=14UvL@)}QA?NC_qE~#&A&dU%i*(L zMh`z#N0qd-Yt zxx5u)9I+6dEM0l-@RWHPLU29@C&Fg8e~JFjx;1iiOqK^HBjATC>K2T8Z!;d#x+t@a66YB zPru4;w2S;VFg7PxEkA_`_=NV>9{&25W$*N?dZg9-Z>*OQdoFssNYxhlCDLtH;R~mc z%Ak5=1E0KH#KeB2-@jy@uiLJKh~@RCtiK+0O7xnr=9v|($KR`#f7AX>zCl0h5!5_N zr59|348zTJD7pgFJ6`^Tft^1~W7vXrsb1KD*RoGCE7VLl;4|90?X_wiMnC|dI)E*& zXS4FbE`ih|r_uqOa8{cw6mwcGLK{F+6gK-wVD8Y|7ACdrSOwI=Pd+)apfb$W{%q;R zU>Hm+95z1jo6bm4aK9r68K(nvJOG*>XHs4_66D}aJ+%!DjF&v~$YEa)6=i5nb_KZq z;S-G8w1n&U4k6{>eOx@hUS0fWIKp$)i+VINg59FM|A6{?AiqJQyW(gRMie<0{s{Wy zICW-eZ!Y%4tAp6ZNR`enVCfAH`dPqrTjGsJ&@X6@lZcv6J2O3Km+b`~?ixZn5pCNl zYrAfQfiZ!3d;i!TmedZVw$8n{H*XnfEtLWjF}# z(@m)Y&5#O!qog|RqA#5Dlr{5%`8r7m6j56sigD^lH}buL{f_SkznHfbwrmn+8jTBkZU`L*`!$Hv z9;3^(@hc}^us)}?Rz^os?m~_@^krB9^MitVR)S~9V zx|ydggW5~vrz0*&O4ib74DjHKMvb5kzjHTduC>UO+r zv~QH^=9tMfLQfTi_v`lmT%o{AC0-cg8F898#@7SP%+R(LDfq&Uk|h837zVw47n;e_ zv>ovXnwQ>Es*RT=K7$tj%49gF6=ewR{hNcXjogYnjE!{)9SJW4W(y8>tr}P@C##D3 z{rA2SBIYvHV~x)U&3kaq9LjLC^>~=(gBS2xmEA#I0jJWc`x-eT_zCwS#ICu8E|Uk3 z?MzmaeIrp))DKe?6v?@c?@z3OK!ZPK?%#RTxA}uKwGSMWX3)TqDbjZS(g*oQY}HUY-wp9?V24uZ$$t{#NC0FnL9zx*g9(uWUKbHI+ho%FjzUt9QXb8+Skm(0BHtH z^&)xTOd3KCk@Y-;isIfY(;|mJNMXCklLmu*8tF+0T3@cvK}Vm_C;~Ef621Q9=Abu7 zx!xfYAwIA+@Jio^TPCN;9+A{)_Ttx(mhhv!y)vB0($__iHQ+Pg*9~6NvgyW~`lth5 zr85B>k0-nF+74fmF`WwhDjYup^~!>h6(o$$5?ei5cCUf>$k5?R1iJY?7`FW(hbNRhy~ z2qP?Xi>hsp0OX_T9RZ_O`|GkW&upFprU_o}95!h@px2}x?vTUXwj-JmU$QX7e>fvh z+YEH@0H$clQA_@lI`xP>9({N?1;}WM%)$WK6BAGy4L)#?6vY@?4&0vLE$TYlQ3^S? z*B=GQbwc1T0qna&&xvl0Pbp{>6rY7frPNhaV4+2opb;yzx$F8pWI5 zoLua&0ro%?u$-MDtq23dz54}&JE4{lZ=M`bPXIeO0N)Ve2JDd$*b4ZUUd(F4ErC(x z(n`!tL8i`k@>6psIK+rsb_<*5h}7$yEsFmmXfUYo&wf3bRxp-J#o|Aqp94{A8UMlI zWv{mV_h|4QXijb0a-8Y`ye6gUKx6;cRfxP9969-wLP>)Z8A8)+p=n_bM5M@4^X7sf zV#{tnoFa?+or@d8(v=4cK_YJ{;?4C?^7*iPK<4i@5Y}BOGJO_bxnNth)NAbi`FVRn z5Iyn{iq+bybrP6Rz55qDBlz36JtHO}IXxp@M+|V3FCX=Bpy;MT0dBS7I74XgEc1ys zERE=EpiGgkL$m^se#S4Pk7K#(h?78I>VapU{FY8fyFe&@@A|BC6~%Q&4~WxR+uB&} zM8%<_^5&`KdJ_)ce*9wdXBXG5N$nw#(N3Se`~uQ z@FJ6z)iC(KsyaeL9YND~NFUb#BKC5%?h2^jX`%_tBmC_ec&8`Lul?k=NDsZgOY& zJ(9^IJ#9ZMV`ufGi#a4z`4Inu-~110`U&Ys8+LMM2N+N9cZ9W9%NHVB&xC4KsO02%(4bOCyCJ5(p`T7L8#fK}&NLfBG}}iygiM0r`R%D2)Uyg@un` z;Kh(=^pXC9LJDrkf2yOqp-$7pb%?CYlcb>!^WP_)^ zQa;Ng)V3i<{Y=IoTw(RT{_#mIL{~Dj*+7{BJ(+>z-o)Q#T*u zO#6@&EqP=}mG*3ONT234HUy#BVu##lhT}saG|h>jc$)0wP%ceiYN&z{O7D)oo=%=x z!fow^8=*G@s;MnnpyR$>Myz+BR=cWaFY6MC%3qC25XnY!f`5d@G&%*fbhJgylGylb zFexE>*bz-(ad-27p@}J&&?H1>EAD!9JvOcPYz^53gQ8LKfglsdvzl{KtJK~>rlbS;9C@By zzN<*-H&lI$YSO`6PC5^sDFz>e{Crw zc*wFdZzC}XZ6$(*EeG&6ssy7Uezq?77Zei74Q(xgadQLN#1nvwU{dNYs=H7T#~}Rk zxf82xwUHLor`_0(8X`5F3&$$nc2r_z8}7dqc6Z7it1La4&^&v)f{0%tv-Fk|F7p7X zAej+NXJz9<49rqH?rn1^LFLA(bA6Fc>Fi}{i=MXOR#@sjkO#a((eJ~noTUG}Myd=5 zgi?pQr4D~Tp_ghxe!Z`_4??*QtcLRgq<{9$x32o!ShYE!47iMhOsD;(XkDVnHB(~4 zYiIVA4$LTbR*!Cva;wNilsG*3jHb)|&y`L~1b(uZ-v1piY7U_Op;zm+B3@$f2V3vt zzpb{KK?DDJ*-;*UAOgukk&*qE5u>Gl;lpE)k>0{LM8DBynaOX>!p6VWM=1VH=qCii zG$ptRl!cK6vXumn5x3MazSSl@g4aJwj=TfFwQp@Ul$fNO_!?CU2JvsgrcPhKIVkSJ zw!(srzpM(elPx(uC=+B1p(2!QCzHxqGq*8wvosOPk3Re;8E=XC@Q0B3jzalZC2T=b z>965qe`ZZ7Tcz$-s#?NJTL`AS(1De3%b=r&l#fX${oq!waYALh%Ap;lUZdp*NPCVS zS2m6=P555t~WreS=Hicm6;&LWMgE*&yupllF1H zv0n+VaV;Oi-Go3Q)BE9Lmh$USOEnc^y?6;~3kW3Aho_LJKf--Dv_iBSJ51NZVT?fI zd)L+hoBXW!8=;Rk%?Fz=o8W^jjXyS}tj1w2F~UdpN1OA(5)kbcjW$$xSOgqMz!Gre zEI8<}w6YhHE@jb*4sR)0rSd`#2;qnbIQk_eySRjK#Msk_Iy;)y+u8Kbw$MQcI715fXRW~|C3!>YJmsirbiY2l zepUaZyGR~Ztwi1%IY51-+zkO|7qhnVyd$*3DV@v-9=ijK zZB>yPorKj!?oX~E;G%_QsL9B#Eh)^-YlIdVhZ*I#cv!#Bc((-#ykxb{TD6rF8?_y9 zrJ`0xQPPVv+irXz#;UD!UUVbU;5!z`)cxl6nK6<1g|dS?w1_nBwO~!G+R77l@ec4K zEl68M!YO$IT5_S(Z#;|}qRIyLnLDc2_Y6!t=n$|^kH?XZv_n5M} z7hjECg4I;Dw49}VohFHI&s{<0uJi)= z>%5vsSYqTFkXxs&^6@b|{)V)Bd#piing3F?p`W|bXbd7^KZbytbrC^ZVTqBeCrS9o zFq7$Ea75QY<($J80&0u=i)crst{;5ZB2VoaQkbS`$8&Ak^VGsdCas`nr=BX&@Gt}g z3&mjP;0OQY(X>8fYXF&&+(vr?ZQC2-gV*ft(vItXw8Dk9U(gn@P{j6(2!ggqoE14* zRGmBeBY#v4{zC7$U;UKmw|#I-^=r)L5;|T$;_0AGInBCmtb=cM(UO$NQt{P#LG@N9~7y zQRst>-MweY_GHQ~{Fv6(Tb@nSzF_Sq^7od*P|?1~@f7U%0Ch}ihDIEJZ|i*__wRTi zd}W)Ja;OMu)p9O^5^ed(`g_1D??~d%@EVxETk`=hn3z z=^e4+(jnZ^&Rob@Ff9V=@)dbl3SDY(c>8X0ml&COL`p|wF1!;$%qMFJKi^k{E``i# z1oF4ch0%VdhiCQ%&>jCyJ_H$tM#7lsr?PP@x_0-Dbn+?0qvFJJipcmE#4cXz>-3WT zRJ+I_aq5^!;fj4SP@(-lwa))jt9??6{l7}3|68m5ze=>_4Lw`}L~TV+O0&&G?ST?* zSP)Q(ttcvQ;ppsiuOA9E&Ruok{kzxjPRYes~%Gm!?7cPG{G*I6>@T7trAOi}t0rlQ6 ze{)|a=l?+D1I+aAh^qXT{Qp#vpMXwu+sfb5(YfOk;OZiJ^MuO&zqRQnqyPGQ`=l29 z>4_3~UDsd_XV(*<^2R{Dx%~fBjVr0B|9=;apV;)ji^dCIg; z)63nA&VaquAXDzDA~Wax_KZ{FH+3z1bxkwN&nijJKQGnEtP@X)J#AV?VBpss@$=;o zcy-UEnt!e(j5w4(C$byqg>1#lxDg}9zMaZAe8Jf9z?%6vTZuK#0=_#THQCLP=``Es zDSGcy^S%uYcP{Md(Y>aFkEeLQ=HBCL{dP{2dT{j*IOY4PV`O%djkw~ehj}UZt-T35 ze!f06ZAii8Mw7n0FE@;a748p<+e9l_Wd&?qvxV=xcI8kfE5&H>4+IP^x^6B_OW{)0 z&!bZ^9r^k2XZM$N@5{ruCula2R7yM5> z!5rG~g!%B-i))UnsjDgYT=zjsk09(1^Iz@;zjBB{Z1C%f>~-!yB44wgsx5c@Jh30| zP-4H!>_ZI!?ErAt!?skSR z?Ob0^am>@x-Ih*Z@N-n0kLJlZtt-mM^Zax1#q8*6N2&K`f{M9rytwImF)+$`{)QTp zT-1Og!}Mu0g>yyEWj0v`Z*j)N{@~;_iw_jl`5{;zYn>smM9-+h^-wVT>}8!h26Vi) z2*qaa1uNrLOP;LQu1E)7`gV$4r?J@7{ro;}IFp0|bNTm2wOrne4UQ&iXVYT%zV~e^ zsfox%H@4^a(!)77VoW-7=eev|z)=-k&pEj?-X<$>UFguelNl<>%q3QpalVYsiqXh3`QlmLt-hEEFyyJ+HSz zzlK*%1zywOFHDxxgB0ig6k2Im;o4T)=RNbH#5qMV?IPlV;1%8mx(5CRfj?>LvHU$L zPUUshA2r4V2}$hT{^jQjj6cmh-hG0(zxX7>o0L>||I_`V`>FkYyfQ*10>9{2{%tGmJM9PUYg%5nG_gdl zUKzbPDqD#fU49?-o-}%YWO7t*55K#+YHYnR7HRVKgWrlxO9U*G3vlxa=hCgpkA(#>-3%VtI-+dEbn;2J1Oy zx3=29p7Y=NUia_*-Pe8o`F{U6pMfH)r~Idir;?)3qCv$s^bC6Jnc*KMx@=2e>;p5o zb^BD#HGI6PUm1&)S$}0s44zVK@61ukl{1PKd9mD1IOm!D(`4R_;@U$?vGe&GPDqRtq_~wh@zpC=1FqnFRKlf?KU8`?#w~lS({Tdxj#$x z1*HY!X7vk`*ZUc++{P7Mg5HLSm+fd|U?y|}g#Y@K#s%mHdju;e>XOn-^X{LU=b!t|_zqT;sLplp z!5~m7>7#@y1V0!D)Hl?1{~i+~jCq_VBg?xUpu5VHuMtVjND7m7BlMtsIKK3p-N>x6 zx8c;p`JOih28FI!u1T%J@MiU*`b*W-sMOd{7m8`sRd7jl0uUsVwToz zr%Gc*MM1?X$BrOBrJsp-gSeX!G=Fq{AM~iNqvlaWXZ%b3Up*$-gTxM-Udgl2mW~1F z(%`fg#1o|cA5|08vwlm-x+{Sp*h>1D zsJ#^yX2AI>3mWNoidR?Gt+Khuai65kiHDnPaQ7Iu`z}A<+hco=K2=!kX6zbfYT#Px zy8q}PGy>KwrpbtDr}@vXRZ#D=NV{MVO%0VgO6V_!hLHqA0^XNR~-=+Rg5-9zK9&XaCseHmMoK*XPHw=LrU_w zGyV@7S_i|T6u&exN+6LW-RRT!UGYXy*^85NjgIjV|Gtx4!4Fy_F?A}1`TAqN1NdiY za?{D=aiarYhE+(U1)`yd*69Uf1;LB$`)gRQ?!$yz`nktOa&r!(amPkShZU4sSKf3^ z0)br$+=qT+boQ!M=R0nUE=)Lt56mr>>9rdq`vsCFs)s|0*bgFa4(Tiz+aY!!?Bln` zR|EE>DMNwH`Im`HX$oSkSWvSiWK#ZkIpxK;dp9)Ta&KqtlbScLyfmdM2^;L_KgBlS zONIsV+Qg--g>8}6D`liH6yd-a!R|Nzh8TNFf7u=f>gsId{Z~8Rkeg!Loz!3TIZJo* z_W%xli($)0l&P7bCWrm2zDsSxy`lAC%NWbe_SoNjXO|V??9;dFdsgLB)M-x7>?;geeulYE0wI(A}->Pc5Y?Z&^ep~ycG zNryogMnnf;M$(#X{p*cL2OU8+{jGomoai(f73LzXfscGp)>wc^2f1t%9tWJ|LL4fC zO5-5W*498E1f!hTY&r@EVv*0m9+ynvu323Qokig?X$)!@3gFNgfw06RQ&gn zwLe4OGqG)4qwHlvr&Kr2yp_bG!($n4oQJi0E0n(PY>pTL1Y$}$slt%C;$qA zKC-|2l)RTzs(Lt3KH7^LO9 z2Zh68t*|H>>YavxgUs540^ez99GtX1(9l>s_TxG<&e95wPaoFd&{!B~^|6Nk_^hQR z1`U(9KB$8={Kp#F))ppVeOQOaqpkloA0C5&)8E^E92S|*pt4}Z7z*&9^QiC+P{0w8 n2Emz78{ker5C^q}{?hJ?%^|Zm+HIlnRu~-8)b#N2Z;}54Ex(FA literal 0 HcmV?d00001 diff --git a/example/boxplot/boxplot.normal.data.violin.pdf b/example/boxplot/boxplot.normal.data.violin.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fcf365b28f85ee6829219fee0011059acb8b942a GIT binary patch literal 6437 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 literal 0 HcmV?d00001 diff --git a/example/boxplot/example.sh b/example/boxplot/example.sh new file mode 100755 index 0000000..0938859 --- /dev/null +++ b/example/boxplot/example.sh @@ -0,0 +1,25 @@ +#使用说明: + ## 外层引号与内层引号不能相同 + ## 凡参数值中包括了空格,括号,逗号等都用引号括起来作为一个整体 + ##程序自动计算图形长宽 + +# 实例: +## 绘制每个样品的表达矩阵 +s-plot boxplot -f boxplot.normal.data -P none -b 45 -V TRUE + +## 绘制单个基因的小提琴图加抖动图(设定坐标标签顺序,图例颜色) +s-plot boxplot -f boxplot.normal.data -q A -Q sampleGroup -a Group -V TRUE -L "'zygote','2cell','4cell'" -c TRUE -C "'red', 'pink', 'blue'" -x A_sample -y expr + +## 使用melted矩阵默认参数绘制小提琴图+扰动图 +s-plot boxplot -f boxplot.melt.data -m TRUE -d Expr -a Group -W TRUE +## 扰动图 +s-plot boxplot -f boxplot.melt.data -m TRUE -d Expr -a Group -j TRUE + +# 使用主题 +s-plot boxplot -f boxplot.melt.data -m TRUE -d Expr -F Rep -a Group -T theme_cin + +## 旋转坐标轴 +s-plot boxplot -f boxplot.melt.data -m TRUE -d Expr -a Group -J TRUE -R TRUE + +##分面 +s-plot boxplot -f boxplot.melt.data -m TRUE -d Expr -a Group -b 45 -G Rep -M 2 -N 2 diff --git a/example/boxplot/modify.md b/example/boxplot/modify.md new file mode 100644 index 0000000..102c77e --- /dev/null +++ b/example/boxplot/modify.md @@ -0,0 +1,32 @@ +1. s-plot boxplot -f boxplot.normal.data -P none -b 45 -q A +> 此图每个box都只有一个点,对于这种情况,设定了-q 但没设定-Q,导致每个x轴标签只有一个数据点,脚本会运行并出图,但会提示推荐用line或point脚本画图 + +2. -F(图例) 和 -a(x轴) 的逻辑调整了,-F不设,默认使用-a,为每个label的数据填充颜色 + + +3. 如果-m TRUE, 且 -x 和 -y 未设,则用-a 和 -d 指定名称分别作为坐标轴名称 + +4. 增加-K width_box,默认0.75(小提琴图,箱线图宽度) + +5. 增加主题风格的选择:默认:theme_classic2 + +6. 图形长宽根据数据情况自动调整 + +7. -m TRUE 若设定,未设-a,程序报错退出 + +8. 扰动图的点的大小,根据输入样本的数值范围设定大小 + +9. 箱线图fill和color标度均对应同一个变量,中位线用白色,outlier的点大小设小一点 + +10. x坐标轴45度,标签对齐 + +11. 新增 <保存图形>,<计算输出图形长宽>, 等函数,可供线,点,条形图等使用 + +11. 组合图的逻辑: + + * 默认箱线图 + * 扰动图、小提琴图、箱线图三选一 + * 组合图:箱线图+扰动图,小提琴图+扰动图 + + +12. x坐标标签对应的数据未涵盖所有legend元素,缺失的值处理,让median线长度位置与图形相对应(不考虑扰动图) \ No newline at end of file diff --git a/example/boxplot/sampleGroup b/example/boxplot/sampleGroup new file mode 100644 index 0000000..4852a71 --- /dev/null +++ b/example/boxplot/sampleGroup @@ -0,0 +1,19 @@ +Sample Group +zygote_1 zygote +zygote_2 zygote +zygote_3 zygote +zygote_4 zygote +zygote_5 zygote +zygote_6 zygote +2cell_1 2cell +2cell_2 2cell +2cell_3 2cell +2cell_4 2cell +2cell_5 2cell +2cell_6 2cell +4cell_1 4cell +4cell_2 4cell +4cell_3 4cell +4cell_4 4cell +4cell_5 4cell +4cell_6 4cell diff --git a/example/boxplot_precomputed_values/Set.boxplot.r b/example/boxplot_precomputed_values/Set.boxplot.r new file mode 100644 index 0000000..f754fb2 --- /dev/null +++ b/example/boxplot_precomputed_values/Set.boxplot.r @@ -0,0 +1,126 @@ + +if (FALSE){ + install.packages("ggplot2", repo="http://cran.us.r-project.org") + install.packages("reshape2", repo="http://cran.us.r-project.org") + install.packages("scales", repo="http://cran.us.r-project.org") + if(FALSE){ + install.packages("ggbeeswarm", repo="http://cran.us.r-project.org") + } +} + +if(FALSE){ + library(ggbeeswarm) +}else if(FALSE){ + library(ggbeeswarm) +} + +library(ggplot2) +library(reshape2) +library(scales) + +data_m <- read.table(file="Set", sep="\t", header=TRUE, +row.names=NULL, quote="") + +if ("" != ""){ + data_m$variable <- cut(data_m$variable, ) +} else if ("" != ""){ + level_i <- c() + data_m$variable <- factor(data_m$variable, levels=level_i) +} +if ("" != ""){ + data_m$variable <- cut(data_m$variable,) +}else if ("" != ""){ + x_level <- c() + data_m$variable <- factor(data_m$variable,levels=x_level) +} + +if ("NA" != "NA") { + facet_level <- c(NA) + data_m$NoMeAnInGTh_I_n_G_s <- factor(data_m$NoMeAnInGTh_I_n_G_s, + levels=facet_level, ordered=T) +} + + +#Samp minimum maximum lower_quantile median upper_quantile Set +p <- ggplot(data_m, aes(x=factor(variable), ymin=minimum, lower=lower_quantile, + middle=median, upper=upper_quantile, ymax=maximum)) + + xlab(" ") + ylab(" ") + labs(title="") + + +if (TRUE){ + p <- p + geom_boxplot(aes(fill=factor(variable)), notch=TRUE, + notchwidth=0.3, stat = "identity") +}else { + p <- p + geom_boxplot(aes(fill=factor(variable)), stat = "identity") +} + + +if(FALSE){ + p <- p + scale_y_log10() + p <- p + stat_summary(fun.y = "mean", geom = "text", label="----", size= 10, color= "black") +} + + +if(FALSE){ + p <- p + scale_fill_manual(values=c()) +} + +if(FALSE){ + p <- p + coord_flip() +} + +if ("NoMeAnInGTh_I_n_G_s" != "NoMeAnInGTh_I_n_G_s"){ + p <- p + facet_wrap( ~ NoMeAnInGTh_I_n_G_s, nrow=NULL, ncol=NULL, + scale="fixed") +} + + + +#Configure the canvas +#legend.title=element_blank(), +p <- p + theme_bw() + theme( + panel.grid.major = element_blank(), + panel.grid.minor = element_blank(), + legend.key=element_blank()) + +if (0 != 0){ + if (0 == 90){ + p <- p + theme(axis.text.x= + element_text(angle=0,hjust=1, vjust=0.5)) + }else if (0 == 45){ + p <- p + theme(axis.text.x= + element_text(angle=0,hjust=0.5, vjust=0.5)) + } else { + p <- p + theme(axis.text.x= + element_text(angle=0,hjust=0.5, vjust=0.5)) + } +} + +#Set the position of legend +top='top' +botttom='bottom' +left='left' +right='right' +none='none' +legend_pos_par <- right + +p <- p + theme(legend.position=legend_pos_par) + +#add additional ggplot2 supported commands + +p <- p + + +# output pictures + +if ("pdf" == "pdf") { + ggsave(p, filename="Set.boxplot.pdf", dpi=300, width=20, + height=12, units=c("cm"),colormodel="srgb") +} else { + ggsave(p, filename="Set.boxplot.pdf", dpi=300, width=20, + height=12, units=c("cm")) +} +#png(filename="Set.boxplot.png", width=20, height=12, +#res=300) +#p +#dev.off() diff --git a/example/boxplot_precomputed_values/boxplot_precomputed_values b/example/boxplot_precomputed_values/boxplot_precomputed_values new file mode 100644 index 0000000..4011b10 --- /dev/null +++ b/example/boxplot_precomputed_values/boxplot_precomputed_values @@ -0,0 +1,5 @@ +Samp minimum maximum lower_quantile median upper_quantile Set +A 1 10 2 5 7 cl1 +B 1 10 2 5 7 cl2 +C 1 10 2 5 7 cl1 +D 1 10 2 5 7 cl2 diff --git a/example/boxplot_precomputed_values/boxplot_precomputed_values-F.boxplot.r b/example/boxplot_precomputed_values/boxplot_precomputed_values-F.boxplot.r new file mode 100644 index 0000000..f3b6cad --- /dev/null +++ b/example/boxplot_precomputed_values/boxplot_precomputed_values-F.boxplot.r @@ -0,0 +1,126 @@ + +if (FALSE){ + install.packages("ggplot2", repo="http://cran.us.r-project.org") + install.packages("reshape2", repo="http://cran.us.r-project.org") + install.packages("scales", repo="http://cran.us.r-project.org") + if(FALSE){ + install.packages("ggbeeswarm", repo="http://cran.us.r-project.org") + } +} + +if(FALSE){ + library(ggbeeswarm) +}else if(FALSE){ + library(ggbeeswarm) +} + +library(ggplot2) +library(reshape2) +library(scales) + +data_m <- read.table(file="boxplot_precomputed_values-F", sep="\t", header=TRUE, +row.names=NULL, quote="") + +if ("" != ""){ + data_m$variable <- cut(data_m$variable, ) +} else if ("" != ""){ + level_i <- c() + data_m$variable <- factor(data_m$variable, levels=level_i) +} +if ("" != ""){ + data_m$variable <- cut(data_m$variable,) +}else if ("" != ""){ + x_level <- c() + data_m$variable <- factor(data_m$variable,levels=x_level) +} + +if ("NA" != "NA") { + facet_level <- c(NA) + data_m$NoMeAnInGTh_I_n_G_s <- factor(data_m$NoMeAnInGTh_I_n_G_s, + levels=facet_level, ordered=T) +} + + +#Samp minimum maximum lower_quantile median upper_quantile Set +p <- ggplot(data_m, aes(x=factor(variable), ymin=minimum, lower=lower_quantile, + middle=median, upper=upper_quantile, ymax=maximum)) + + xlab(" ") + ylab(" ") + labs(title="") + + +if (TRUE){ + p <- p + geom_boxplot(aes(fill=factor(variable)), notch=TRUE, + notchwidth=0.3, stat = "identity") +}else { + p <- p + geom_boxplot(aes(fill=factor(variable)), stat = "identity") +} + + +if(FALSE){ + p <- p + scale_y_log10() + p <- p + stat_summary(fun.y = "mean", geom = "text", label="----", size= 10, color= "black") +} + + +if(FALSE){ + p <- p + scale_fill_manual(values=c()) +} + +if(FALSE){ + p <- p + coord_flip() +} + +if ("NoMeAnInGTh_I_n_G_s" != "NoMeAnInGTh_I_n_G_s"){ + p <- p + facet_wrap( ~ NoMeAnInGTh_I_n_G_s, nrow=NULL, ncol=NULL, + scale="fixed") +} + + + +#Configure the canvas +#legend.title=element_blank(), +p <- p + theme_bw() + theme( + panel.grid.major = element_blank(), + panel.grid.minor = element_blank(), + legend.key=element_blank()) + +if (0 != 0){ + if (0 == 90){ + p <- p + theme(axis.text.x= + element_text(angle=0,hjust=1, vjust=0.5)) + }else if (0 == 45){ + p <- p + theme(axis.text.x= + element_text(angle=0,hjust=0.5, vjust=0.5)) + } else { + p <- p + theme(axis.text.x= + element_text(angle=0,hjust=0.5, vjust=0.5)) + } +} + +#Set the position of legend +top='top' +botttom='bottom' +left='left' +right='right' +none='none' +legend_pos_par <- right + +p <- p + theme(legend.position=legend_pos_par) + +#add additional ggplot2 supported commands + +p <- p + + +# output pictures + +if ("pdf" == "pdf") { + ggsave(p, filename="boxplot_precomputed_values-F.boxplot.pdf", dpi=300, width=20, + height=12, units=c("cm"),colormodel="srgb") +} else { + ggsave(p, filename="boxplot_precomputed_values-F.boxplot.pdf", dpi=300, width=20, + height=12, units=c("cm")) +} +#png(filename="boxplot_precomputed_values-F.boxplot.png", width=20, height=12, +#res=300) +#p +#dev.off() diff --git a/example/boxplot_precomputed_values/boxplot_precomputed_values.boxplot.pdf b/example/boxplot_precomputed_values/boxplot_precomputed_values.boxplot.pdf new file mode 100644 index 0000000000000000000000000000000000000000..91e5296e1f67c1ec8741b71ed1c16bfa504f1759 GIT binary patch literal 3830 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 OM+c8mRyMb{K>aU4YHZN} literal 0 HcmV?d00001 diff --git a/example/boxplot_precomputed_values/boxplot_precomputed_values.boxplot.r b/example/boxplot_precomputed_values/boxplot_precomputed_values.boxplot.r new file mode 100644 index 0000000..c40b490 --- /dev/null +++ b/example/boxplot_precomputed_values/boxplot_precomputed_values.boxplot.r @@ -0,0 +1,126 @@ + +if (FALSE){ + install.packages("ggplot2", repo="http://cran.us.r-project.org") + install.packages("reshape2", repo="http://cran.us.r-project.org") + install.packages("scales", repo="http://cran.us.r-project.org") + if(FALSE){ + install.packages("ggbeeswarm", repo="http://cran.us.r-project.org") + } +} + +if(FALSE){ + library(ggbeeswarm) +}else if(FALSE){ + library(ggbeeswarm) +} + +library(ggplot2) +library(reshape2) +library(scales) + +data_m <- read.table(file="boxplot_precomputed_values", sep="\t", header=TRUE, +row.names=NULL, quote="") + +if ("" != ""){ + data_m$variable <- cut(data_m$variable, ) +} else if ("" != ""){ + level_i <- c() + data_m$variable <- factor(data_m$variable, levels=level_i) +} +if ("" != ""){ + data_m$Samp <- cut(data_m$Samp,) +}else if ("" != ""){ + x_level <- c() + data_m$Samp <- factor(data_m$Samp,levels=x_level) +} + +if ("NA" != "NA") { + facet_level <- c(NA) + data_m$NoMeAnInGTh_I_n_G_s <- factor(data_m$NoMeAnInGTh_I_n_G_s, + levels=facet_level, ordered=T) +} + + +#Samp minimum maximum lower_quantile median upper_quantile Set +p <- ggplot(data_m, aes(x=factor(Samp), ymin=minimum, lower=lower_quantile, + middle=median, upper=upper_quantile, ymax=maximum)) + + xlab(" ") + ylab(" ") + labs(title="") + + +if (TRUE){ + p <- p + geom_boxplot(aes(fill=factor(variable)), notch=TRUE, + notchwidth=0.3, stat = "identity") +}else { + p <- p + geom_boxplot(aes(fill=factor(variable)), stat = "identity") +} + + +if(FALSE){ + p <- p + scale_y_log10() + p <- p + stat_summary(fun.y = "mean", geom = "text", label="----", size= 10, color= "black") +} + + +if(FALSE){ + p <- p + scale_fill_manual(values=c()) +} + +if(FALSE){ + p <- p + coord_flip() +} + +if ("NoMeAnInGTh_I_n_G_s" != "NoMeAnInGTh_I_n_G_s"){ + p <- p + facet_wrap( ~ NoMeAnInGTh_I_n_G_s, nrow=NULL, ncol=NULL, + scale="fixed") +} + + + +#Configure the canvas +#legend.title=element_blank(), +p <- p + theme_bw() + theme( + panel.grid.major = element_blank(), + panel.grid.minor = element_blank(), + legend.key=element_blank()) + +if (0 != 0){ + if (0 == 90){ + p <- p + theme(axis.text.x= + element_text(angle=0,hjust=1, vjust=0.5)) + }else if (0 == 45){ + p <- p + theme(axis.text.x= + element_text(angle=0,hjust=0.5, vjust=0.5)) + } else { + p <- p + theme(axis.text.x= + element_text(angle=0,hjust=0.5, vjust=0.5)) + } +} + +#Set the position of legend +top='top' +botttom='bottom' +left='left' +right='right' +none='none' +legend_pos_par <- right + +p <- p + theme(legend.position=legend_pos_par) + +#add additional ggplot2 supported commands + +p <- p + + +# output pictures + +if ("pdf" == "pdf") { + ggsave(p, filename="boxplot_precomputed_values.boxplot.pdf", dpi=300, width=20, + height=12, units=c("cm"),colormodel="srgb") +} else { + ggsave(p, filename="boxplot_precomputed_values.boxplot.pdf", dpi=300, width=20, + height=12, units=c("cm")) +} +#png(filename="boxplot_precomputed_values.boxplot.png", width=20, height=12, +#res=300) +#p +#dev.off() diff --git a/example/boxplot_precomputed_values/boxplot_precomputed_values.boxplot.value_set.pdf b/example/boxplot_precomputed_values/boxplot_precomputed_values.boxplot.value_set.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f32e89e567f3f90992b086b1fbef2b2a9905fd02 GIT binary patch literal 3830 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 -> f -> lapply -> FUN -> FUN -> factor +停止执行 diff --git a/example/density2d/density2d b/example/density2d/density2d new file mode 100644 index 0000000..321a2d9 --- /dev/null +++ b/example/density2d/density2d @@ -0,0 +1,7 @@ +Pos gene1 gene2 gene3 gene4 gene5 +time1 1 2000 3000 4000 4000 +time2 1 2000 3000 4000 4000 +time3 1 2000 3000 4000 4000 +time4 1 2000 3000 4000 4000 +time5 1 2000 3000 4000 4000 +time6 1 2000 3000 4000 4000 diff --git a/example/densityHistPlot/densityHistPlot.melt.data b/example/densityHistPlot/densityHistPlot.melt.data new file mode 100644 index 0000000..bf75d98 --- /dev/null +++ b/example/densityHistPlot/densityHistPlot.melt.data @@ -0,0 +1,21 @@ +variable value set(optional) +h3k27ac 8.71298 1 +h3k27ac 8.43246 1 +h3k27ac 8.25497 1 +h3k27ac 7.16265 1 +h3k27ac 3.55341 1 +h3k27ac 3.55030 2 +h3k27ac 7.07502 2 +h3k27ac 8.24328 2 +h3k27ac 8.43869 2 +h3k27ac 8.48877 2 +ctcf 10.69130 1 +ctcf 10.76680 1 +ctcf 10.54410 1 +ctcf 10.86350 1 +ctcf 8.45751 1 +ctcf 8.50316 2 +ctcf 10.91430 2 +ctcf 10.70220 2 +ctcf 10.41010 2 +ctcf 10.57570 2 diff --git a/example/densityHistPlot/densityHistPlot.normal.data b/example/densityHistPlot/densityHistPlot.normal.data new file mode 100644 index 0000000..2c3dfb6 --- /dev/null +++ b/example/densityHistPlot/densityHistPlot.normal.data @@ -0,0 +1,7 @@ +ctcf h3k27ac +1 2 +1 3 +4 2 +1 5 +6 7 +0 10 diff --git a/example/densityPlot/densityPlot.data b/example/densityPlot/densityPlot.data new file mode 100644 index 0000000..00ad79f --- /dev/null +++ b/example/densityPlot/densityPlot.data @@ -0,0 +1,21 @@ +variable value +h3k27ac 8.71298 +h3k27ac 8.43246 +h3k27ac 8.25497 +h3k27ac 7.16265 +h3k27ac 3.55341 +h3k27ac 3.55030 +h3k27ac 7.07502 +h3k27ac 8.24328 +h3k27ac 8.43869 +h3k27ac 8.48877 +ctcf 10.69130 +ctcf 10.76680 +ctcf 10.54410 +ctcf 10.86350 +ctcf 8.45751 +ctcf 8.50316 +ctcf 10.91430 +ctcf 10.70220 +ctcf 10.41010 +ctcf 10.57570 diff --git a/example/hcluster_gg/hcluster_gg.col_anno.data b/example/hcluster_gg/hcluster_gg.col_anno.data new file mode 100644 index 0000000..289ea3e --- /dev/null +++ b/example/hcluster_gg/hcluster_gg.col_anno.data @@ -0,0 +1,6 @@ +Name Sample +T0_1 T0 +T0_2 T0 +T0_3 T0 +T4_1 T4 +T4_2 T4 diff --git a/example/hcluster_gg/hcluster_gg.data b/example/hcluster_gg/hcluster_gg.data new file mode 100644 index 0000000..5bf8e25 --- /dev/null +++ b/example/hcluster_gg/hcluster_gg.data @@ -0,0 +1,10 @@ +Name T0_1 T0_2 T0_3 T4_1 T4_2 +TR19267|c0_g1|CYP703A2 1.431 0.77 1.309 1.247 0.485 +TR19612|c1_g3|CYP707A1 0.72 0.161 0.301 2.457 2.794 +TR60337|c4_g9|CYP707A1 0.056 0.09 0.038 7.643 15.379 +TR19612|c0_g1|CYP707A3 2.011 0.689 1.29 0 0 +TR35761|c0_g1|CYP707A4 1.946 1.575 1.892 1.019 0.999 +TR58054|c0_g2|CYP707A4 12.338 10.016 9.387 0.782 0.563 +TR14082|c7_g4|CYP707A4 10.505 8.709 7.212 4.395 6.103 +TR60509|c0_g1|CYP707A7 3.527 3.348 2.128 3.257 2.338 +TR26914|c0_g1|CYP710A1 1.899 1.54 0.998 0.255 0.427 diff --git a/example/heatmapM/test.2.label b/example/heatmapM/test.2.label new file mode 100644 index 0000000..8422d40 --- /dev/null +++ b/example/heatmapM/test.2.label @@ -0,0 +1,4 @@ +A +B +C +D diff --git a/example/heatmapM/test.2.overlap b/example/heatmapM/test.2.overlap new file mode 100644 index 0000000..e992c24 --- /dev/null +++ b/example/heatmapM/test.2.overlap @@ -0,0 +1,4 @@ +Name a b c a b c a b c a b c +a 1.0 0.6 0.64 1.0 0.75 0.76 1.0 0.67 0.70 1.0 0.70 0.73 +b 0.55 1.0 0.58 0.65 1.0 0.70 0.55 1.0 0.60 0.64 1.0 0.68 +c 0.60 0.59 1.0 0.72 0.76 1.0 0.61 0.63 1.0 0.68 0.69 1.0 diff --git a/example/multibar/data b/example/multibar/data new file mode 100644 index 0000000..8bef67a --- /dev/null +++ b/example/multibar/data @@ -0,0 +1,9 @@ +Gene hmC expr Set +NM_001003918_26622 0 83.1269257376101 1 +NM_001011535_3260 0 0 1 +NM_001012640_14264 0 0 1 +NM_001012640_30427 0 0 1 +NM_001003918_266221 0 0 1 +NM_001017393_30504 0 0 1 +NM_001025241_30464 0 0 1 +NM_001017393_30504 0 0 1 diff --git a/example/pca/pca.normal.data b/example/pca/pca.normal.data new file mode 100644 index 0000000..ee68733 --- /dev/null +++ b/example/pca/pca.normal.data @@ -0,0 +1,6 @@ +ID Samp1 Samp2 Samp3 Samp4 +G1 1000 1000 10000 100 +G2 1000 1000 10000 100 +G3 1000 1000 10000 100 +G4 1000 1000 10000 100 +G5 1000 1000 10000 100 diff --git a/example/pca/sampleGroup b/example/pca/sampleGroup new file mode 100644 index 0000000..bf3c156 --- /dev/null +++ b/example/pca/sampleGroup @@ -0,0 +1,5 @@ +ID type batch condition +Samp1 R a Treat +Samp2 S b Treat +Samp3 S a Control +Samp4 R b Control diff --git a/example/pheatmap/.Rhistory b/example/pheatmap/.Rhistory new file mode 100644 index 0000000..d5d9f73 --- /dev/null +++ b/example/pheatmap/.Rhistory @@ -0,0 +1,512 @@ +stat = "identity" +) +df1 <- data.frame( +x = 1, +y0 = min(y), +y25 = quantile(y, 0.25), +y50 = median(y), +y75 = quantile(y, 0.75), +y100 = max(y) +) +y <- rnorm(100) +df1 <- data.frame( +x = 1, +y0 = min(y), +y25 = quantile(y, 0.25), +y50 = median(y), +y75 = quantile(y, 0.75), +y100 = max(y) +) +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(x)) + +geom_boxplot( +aes(ymin = y0, lower = y25, middle = y50, upper = y75, ymax = y100), +stat = "identity" +) +dev.off() +pdf("temp1.pdf",width = 8,height=8) +ggplot(df1, aes(x)) + +geom_boxplot( +aes(ymin = y0, lower = y25, middle = y50, upper = y75, ymax = y100), +stat = "identity" +) +dev.off() +pdf("temp1.pdf",width = 8,height=8) +ggplot(df1, aes(x)) + +geom_boxplot( +aes(ymin = y0, lower = y25, middle = y50, upper = y75, ymax = y100), +stat = "identity" +)+theme_classic2() +dev.off() +theme_classic2 <- function(...) { +theme_bw()+theme(panel.background=element_rect(color='black'),panel.border=element_rect(fill='transparent',color='black'), panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 16,margin=unit(c(2,2,0.5,1),'cm')), axis.title =element_text(size=14,vjust = 0.1),axis.text=element_text(family="Times",size=14,color='black',vjust = 0.1,margin = unit(0.8,"lines")),legend.background = element_blank(),legend.text=element_text(size = 12,color = 'black',family = 'Times', hjust = 0)) +} +pdf("temp1.pdf",width = 8,height=8) +ggplot(df1, aes(x)) + +geom_boxplot( +aes(ymin = y0, lower = y25, middle = y50, upper = y75, ymax = y100), +stat = "identity" +)+theme_classic2() +dev.off() +theme_classic3 <- function(...) { +theme_bw(...)+theme(panel.border=element_blank(),panel.background=element_blank(),panel.grid=element_blank(),plot.margin=unit(c(2, 2, 1, 1),'cm'),title=element_text(color='black',face='plain',family="Times"), +plot.title=element_text(size = 16,margin=unit(c(2,2,0.5,1),'cm')), axis.title =element_text(size=14,vjust = 0.1), +axis.text=element_text(family="Times",size=14,color='black',vjust = 0.1,margin = unit(0.8,"lines")), +legend.background = element_blank(),legend.key=element_rect(color='white',fill='white'),axis.line.x=element_line(size=1,colour="black", linetype='solid'), axis.line.y=element_line(size=1,colour="black", linetype='solid'),legend.text=element_text(size=14,color = 'black',family = 'Times', hjust = 0)) +} +theme_classic3 <- function(...) { +theme_bw(...)+theme(panel.background=element_blank(),panel.border=element_blank(),panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 16,margin=unit(c(2,2,0.5,1),'cm')), axis.title =element_text(size=14,vjust = 0.1),axis.text=element_text(family="Times",size=14,color='black',vjust = 0.1,margin = unit(0.8,"lines")),legend.background = element_blank(),axis.line.x=element_line(size=1,colour="black", linetype='solid'), axis.line.y=element_line(size=1,colour="black", linetype='solid'),legend.text=element_text(size=12,color = 'black',family = 'Times', hjust = 0)) +} +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic2() +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic3() +pdf("temp.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic2() +dev.off() +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic3() +dev.off() +theme_classic3 <- function(...) { +theme_bw(...)+theme(panel.background=element_blank(),panel.border=element_blank(),panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 16,margin=unit(c(2,2,0.5,1),'cm')), axis.title =element_text(size=14,vjust = 0.1),axis.text=element_text(family="Times",size=14,color='black',vjust = 0.1,margin = unit(0.8,"lines")),legend.background = element_blank(),axis.line.x=element_line(size=0.5,colour="black", linetype='solid'), axis.line.y=element_line(size=0.5,colour="black", linetype='solid'),legend.text=element_text(size=12,color = 'black',family = 'Times', hjust = 0)) +} +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic3() +dev.off() +theme_classic3 <- function(...) { +theme_bw(...)+theme(panel.background=element_blank(),panel.border=element_blank(),panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 16,margin=unit(c(2,2,0.5,1),'cm')), axis.title =element_text(size=14,vjust = 0.1),axis.text=element_text(family="Times",size=14,color='black',margin = unit(0.8,"lines")),legend.background = element_blank(),axis.line.x=element_line(size=0.5,colour="black", linetype='solid'), axis.line.y=element_line(size=0.5,colour="black", linetype='solid'),legend.text=element_text(size=12,color = 'black',family = 'Times', hjust = 0)) +} +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic3() +dev.off() +theme_classic3 <- function(...) { +theme_bw(...)+theme(panel.background=element_blank(),panel.border=element_blank(),panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 16,margin=unit(c(2,2,0.5,1),'cm')), axis.title =element_text(size=14,vjust = 0.1),axis.text=element_text(family="Times",size=14,color='black',margin = unit(2,"lines")),legend.background = element_blank(),axis.line.x=element_line(size=0.5,colour="black", linetype='solid'), axis.line.y=element_line(size=0.5,colour="black", linetype='solid'),legend.text=element_text(size=12,color = 'black',family = 'Times', hjust = 0)) +} +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic3() +dev.off() +theme_classic3 <- function(...) { +theme_bw(...)+theme(panel.background=element_blank(),panel.border=element_blank(),panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 16,margin=unit(c(2,2,0.5,1),'cm')), axis.title =element_text(size=18,vjust = 0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(0.8,"lines")),legend.background = element_blank(),axis.line.x=element_line(size=0.5,colour="black", linetype='solid'), axis.line.y=element_line(size=0.5,colour="black", linetype='solid'),legend.text=element_text(size=14,color = 'black',family = 'Times', hjust = 0)) +} +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic3() +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic3()+labs(x="d",y="a",title="c") +dev.off() +theme_classic3 <- function(...) { +theme_bw(...)+theme(panel.background=element_blank(),panel.border=element_blank(),panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm')), axis.title =element_text(size=18,vjust = 0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(0.8,"lines")),legend.background = element_blank(),axis.line.x=element_line(size=0.5,colour="black", linetype='solid'), axis.line.y=element_line(size=0.5,colour="black", linetype='solid'),legend.text=element_text(size=14,color = 'black',family = 'Times', hjust = 0)) +} +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic3()+labs(x="d",y="a",title="c") +dev.off() +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic3()+labs(x="dwdwdefde",y="a",title="c") +dev.off() +theme_classic3 <- function(...) { +theme_bw(...)+theme(panel.background=element_blank(),panel.border=element_blank(),panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm')), axis.title =element_text(size=18,vjust = 0.1,hjust = 0),axis.text=element_text(family="Times",size=16,color='black',margin = unit(0.8,"lines")),legend.background = element_blank(),axis.line.x=element_line(size=0.5,colour="black", linetype='solid'), axis.line.y=element_line(size=0.5,colour="black", linetype='solid'),legend.text=element_text(size=14,color = 'black',family = 'Times', hjust = 0)) +} +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic3()+labs(x="dwdwdefde",y="a",title="c") +dev.off() +theme_classic3 <- function(...) { +theme_bw(...)+theme(panel.background=element_blank(),panel.border=element_blank(),panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm')), axis.title.x =element_text(size=18,vjust = 0.1),axis.title.y =element_text(size=18,hjust = 0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(0.8,"lines")),legend.background = element_blank(),axis.line.x=element_line(size=0.5,colour="black", linetype='solid'), axis.line.y=element_line(size=0.5,colour="black", linetype='solid'),legend.text=element_text(size=14,color = 'black',family = 'Times', hjust = 0)) +} +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic3()+labs(x="dwdwdefde",y="a",title="c") +dev.off() +theme_classic3 <- function(...) { +theme_bw(...)+theme(panel.background=element_blank(),panel.border=element_blank(),panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0), axis.title =element_text(size=18,vjust = 0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(0.8,"lines")),legend.background = element_blank(),axis.line.x=element_line(size=0.5,colour="black", linetype='solid'), axis.line.y=element_line(size=0.5,colour="black", linetype='solid'),legend.text=element_text(size=14,color = 'black',family = 'Times', hjust = 0)) +} +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic3()+labs(x="dwdwdefde",y="a",title="c") +dev.off() +theme_classic3 <- function(...) { +theme_bw(...)+theme(panel.background=element_blank(),panel.border=element_blank(),panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 18,margin=unit(c(2,2,2,2),'cm')), axis.title =element_text(size=18,vjust = 0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(0.8,"lines")),legend.background = element_blank(),axis.line.x=element_line(size=0.5,colour="black", linetype='solid'), axis.line.y=element_line(size=0.5,colour="black", linetype='solid'),legend.text=element_text(size=14,color = 'black',family = 'Times', hjust = 0)) +} +p +p +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic3()+labs(x="dwdwdefde",y="a",title="c") +dev.off() +theme_classic3 <- function(...) { +theme_bw(...)+theme(panel.background=element_blank(),panel.border=element_blank(),panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5), axis.title =element_text(size=18,vjust = 0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(0.8,"lines")),legend.background = element_blank(),axis.line.x=element_line(size=0.5,colour="black", linetype='solid'), axis.line.y=element_line(size=0.5,colour="black", linetype='solid'),legend.text=element_text(size=14,color = 'black',family = 'Times', hjust = 0)) +} +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic3()+labs(x="dwdwdefde",y="a",title="c") +theme_classic2 <- function(...) { +theme_bw()+theme(panel.background=element_rect(color='black'),panel.border=element_rect(fill='transparent',color='black'), panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times",hjust=0.5),plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm')), axis.title =element_text(size=16,vjust = 0.1),axis.text=element_text(family="Times",size=16,color='black',vjust = 0.1,margin = unit(0.8,"lines")),legend.background = element_blank(),legend.text=element_text(size = 14,color = 'black',family = 'Times', hjust = 0)) +} +theme_classic3 <- function(...) { +theme_bw(...)+theme(panel.background=element_blank(),panel.border=element_blank(),panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times",hjust=0.5),plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm')), axis.title =element_text(size=18,vjust = 0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(0.8,"lines")),legend.background = element_blank(),axis.line.x=element_line(size=0.5,colour="black", linetype='solid'), axis.line.y=element_line(size=0.5,colour="black", linetype='solid'),legend.text=element_text(size=14,color = 'black',family = 'Times', hjust = 0)) +} +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic3()+labs(x="dwdwdefde",y="a",title="c") +theme_classic3 <- function(...) { +theme_bw(...)+theme(panel.background=element_blank(),panel.border=element_blank(),panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times",hjust=0.5),plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5), axis.title =element_text(size=18,vjust = 0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(0.8,"lines")),legend.background = element_blank(),axis.line.x=element_line(size=0.5,colour="black", linetype='solid'), axis.line.y=element_line(size=0.5,colour="black", linetype='solid'),legend.text=element_text(size=14,color = 'black',family = 'Times', hjust = 0)) +} +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic3()+labs(x="dwdwdefde",y="a",title="c") +dev.off() +?theme_bw +theme_classic2 <- function(...) { +theme_bw()+theme(panel.background=element_rect(color='black'),panel.border=element_rect(fill='transparent',color='black'), panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times",hjust=0.5),plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5), axis.title =element_text(size=16,vjust = 0.1),axis.text=element_text(family="Times",size=16,color='black',vjust = 0.1,margin = unit(0.8,"lines")),legend.background = element_blank(),legend.text=element_text(size = 14,color = 'black',family = 'Times', hjust = 0)) +} +theme_classic3 <- function(...) { +theme_bw(...)+theme(panel.background=element_blank(),panel.border=element_blank(),panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5), axis.title =element_text(size=18,vjust = 0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(0.8,"lines")),legend.background = element_blank(),axis.line.x=element_line(size=0.5,colour="black", linetype='solid'), axis.line.y=element_line(size=0.5,colour="black", linetype='solid'),legend.text=element_text(size=14,color = 'black',family = 'Times', hjust = 0)) +} +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic3()+labs(x="dwdwdefde",y="a",title="c") +dev.off() +y <- rnorm(100) +df1 <- data.frame( +x = 1, +y0 = min(y), +y25 = quantile(y, 0.25), +y50 = median(y), +y75 = quantile(y, 0.75), +y100 = max(y) +) +pdf("temp1.pdf",width = 8,height=8) +ggplot(df1, aes(x)) + +geom_boxplot( +aes(ymin = y0, lower = y25, middle = y50, upper = y75, ymax = y100), +stat = "identity" +)+theme_classic2() +dev.off() +pdf("temp2.pdf",width = 8,height=8) +ggplot(df1, aes(x)) + +geom_boxplot( +aes(ymin = y0, lower = y25, middle = y50, upper = y75, ymax = y100), +stat = "identity" +)+theme_classic3() +dev.off() +theme_zg <- function(..., bg='white'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(), axis.title = element_text(color='black', vjust=0.1), axis.ticks.length = unit(-0.4,"lines"), axis.ticks = element_line(color='black'), axis.ticks.margin = unit(0.8,"lines"), legend.title=element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +dev.off() +theme_classic2 <- function(...) { +theme_bw()+theme(panel.background=element_rect(color='black'),panel.border=element_rect(fill='transparent',color='black'), panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5), axis.title =element_text(size=18,vjust = 0.1),axis.text=element_text(family="Times",size=16,color='black',vjust = 0.1,margin = unit(0.8,"lines")),legend.background = element_blank(),legend.text=element_text(size = 14,color = 'black',family = 'Times', hjust = 0)) +} +theme_classic3 <- function(...) { +theme_bw(...)+theme(panel.background=element_blank(),panel.border=element_blank(),panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5), axis.title =element_text(size=18,vjust = 0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(0.8,"lines")),legend.background = element_blank(),axis.line.x=element_line(size=0.5,colour="black", linetype='solid'), axis.line.y=element_line(size=0.5,colour="black", linetype='solid'),legend.text=element_text(size=14,color = 'black',family = 'Times', hjust = 0)) +} +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm')),axis.title = element_text(color='black', vjust=0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(0.8,"lines")), axis.ticks.length = unit(-0.4,"lines"), axis.ticks = element_line(color='black'), axis.ticks.margin = unit(0.8,"lines"),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +dev.off() +pdf("temp.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic2() +dev.off() +theme_classic2 <- function(...) { +theme_bw()+theme(panel.background=element_rect(color='black'),panel.border=element_rect(fill='transparent',color='black'), panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5), axis.title =element_text(size=18,vjust = 0.1),axis.text.x=element_text(family="Times",size=16,color='black',vjust = 0.1,margin = unit(0.8,"lines")),legend.background = element_blank(),legend.text=element_text(size = 14,color = 'black',family = 'Times', hjust = 0)) +} +pdf("temp.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic2() +dev.off() +theme_classic2 <- function(...) { +theme_bw()+theme(panel.background=element_rect(color='black'),panel.border=element_rect(fill='transparent',color='black'), panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5), axis.title =element_text(size=18,vjust = 0.1),axis.text.x=element_text(family="Times",size=16,color='black',vjust = 0.1,margin = unit(0.8,"lines")),legend.background = element_blank(),legend.text=element_text(size = 14,color = 'black',family = 'Times', hjust = 0)) +} +pdf("temp.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic2() +dev.off() +theme_classic2 <- function(...) { +theme_bw()+theme(panel.background=element_rect(color='black'),panel.border=element_rect(fill='transparent',color='black'), panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5), axis.title =element_text(size=18,vjust = 0.1),axis.text=element_text(family="Times",size=16,color='black',vjust = 0.1,margin = unit(0.8,"lines")),legend.background = element_blank(),legend.text=element_text(size = 14,color = 'black',family = 'Times', hjust = 0)) +} +pdf("temp.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic2() +dev.off() +theme_classic2 <- function(...) { +theme_bw()+theme(panel.background=element_rect(color='black'),panel.border=element_rect(fill='transparent',color='black'), panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5), axis.title =element_text(size=18,vjust = 0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(0.8,"lines")),legend.background = element_blank(),legend.text=element_text(size = 14,color = 'black',family = 'Times', hjust = 0)) +} +pdf("temp.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic2() +dev.off() +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm')),axis.title = element_text(color='black', vjust=0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(4,"lines")), axis.ticks.length = unit(-0.4,"lines"), axis.ticks = element_line(color='black'), axis.ticks.margin = unit(0.8,"lines"),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +dev.off() +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm')),axis.title = element_text(size=18,color='black', vjust=0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(4,"lines")), axis.ticks.length = unit(-0.4,"lines"), axis.ticks = element_line(color='black'), axis.ticks.margin = unit(0.8,"lines"),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +dev.off() +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm')),axis.title = element_text(size=18,color='black', vjust=0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(4,"lines")), axis.ticks.length = unit(-0.4,"lines"), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +dev.off() +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(4,unit="cm")), axis.ticks.length = unit(-0.4,"lines"), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +dev.off() +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(10,unit="cm")), axis.ticks.length = unit(-0.4,"lines"), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +pdf("temp.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic2() +dev.off() +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +dev.off() +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(10,unit="cm")), axis.ticks.length = unit(-0.4,"cm"), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +dev.off() +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(-10,unit="cm")), axis.ticks.length = unit(-0.4,"cm"), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +dev.off() +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(20,unit="cm")), axis.ticks.length = unit(-0.4,"cm"), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +dev.off() +theme(axis.ticks.length = unit(0.3,"cm", axis.text.x = element_text(margin = margin(0.2, unit = "cm"))) +theme(axis.ticks.length = unit(0.3,"cm", axis.text.x = element_text(margin = margin(0.2, unit = "cm")))) +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(20,unit="cm")), axis.ticks.length = unit(0.4,"cm"), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +dev.off() +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1), axis.ticks.length = unit(-0.2,"cm"),axis.text=element_text(family="Times",size=16,color='black',margin = unit(2,"cm")), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +dev.off() +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1), axis.ticks.length = unit(-0.2,"cm"),axis.text=element_text(family="Times",size=16,color='black',margin = unit(5,"cm")), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1), axis.ticks.length = unit(-0.2,"cm"),axis.text=element_text(family="Times",size=16,color='black',margin = margin(5,unit="cm")), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1), axis.ticks.length = unit(-0.2,"lines"),axis.text=element_text(family="Times",size=16,color='black',margin = unit(5,"lines")), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +pdf("temp1.pdf",width = 8,height=8) +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +dev.off() +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1), axis.ticks.length = unit(-0.2,"lines"),axis.text=element_text(family="Times",size=16,color='black',margin = unit(8,"lines")), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1), axis.ticks.length = unit(-0.2,"lines"),axis.text=element_text(family="Times",size=16,color='black',margin = unit(30,"lines")), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +?unit +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1), axis.ticks.length = unit(-0.2,"lines"),axis.text=element_text(family="Times",size=16,color='black',margin = unit(1,"lines")), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +theme_classic3 <- function(...) { +theme_bw(...)+theme(panel.background=element_blank(),panel.border=element_blank(),panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5), axis.title =element_text(size=18,vjust = 0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(3,"lines")),legend.background = element_blank(),axis.line.x=element_line(size=0.5,colour="black", linetype='solid'), axis.line.y=element_line(size=0.5,colour="black", linetype='solid'),legend.text=element_text(size=14,color = 'black',family = 'Times', hjust = 0)) +} +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic3() +theme_classic3 <- function(...) { +theme_bw(...)+theme(panel.background=element_blank(),panel.border=element_blank(),panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5), axis.title =element_text(size=18,vjust = 0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(0.8,"lines")),legend.background = element_blank(),axis.line.x=element_line(size=0.5,colour="black", linetype='solid'), axis.line.y=element_line(size=0.5,colour="black", linetype='solid'),legend.text=element_text(size=14,color = 'black',family = 'Times', hjust = 0)) +} +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic3() +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +theme_classic3 <- function(...) { +theme_bw(...)+theme(panel.background=element_blank(),panel.border=element_blank(),panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5), axis.title =element_text(size=18,vjust = 0.1),axis.text=element_text(family="Times",size=16,color='black',margin = margin(0.8,unit="lines")),legend.background = element_blank(),axis.line.x=element_line(size=0.5,colour="black", linetype='solid'), axis.line.y=element_line(size=0.5,colour="black", linetype='solid'),legend.text=element_text(size=14,color = 'black',family = 'Times', hjust = 0)) +} +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1), axis.ticks.length = unit(-0.2,"lines"),axis.text=element_text(family="Times",size=16,color='black',margin = margin(0.8,unit="lines")), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1), axis.ticks.length = unit(-0.2,"lines"),axis.text=element_text(family="Times",size=16,color='black',margin = margin((t=0,r=2,b=0,l=0),unit="lines")), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1), axis.ticks.length = unit(-0.2,"lines"),axis.text=element_text(family="Times",size=16,color='black',margin = margin((t=0,r=2,b=0,l=0),unit="lines")), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1), axis.ticks.length = unit(-0.2,"lines"),axis.text=element_text(family="Times",size=16,color='black',margin = margin(t=0,r=2,b=0,l=0)), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1), axis.ticks.length = unit(-0.2,"lines"),axis.text=element_text(family="Times",size=16,color='black',margin = margin(t=2,r=2,b=2,l=2)), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1), axis.ticks.length = unit(-0.2,"lines"),axis.text.y=element_text(family="Times",size=16,color='black',margin = margin(t=2,r=2,b=2,l=2)), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1), axis.ticks.length = unit(-0.2,"lines"),axis.text=element_text(family="Times",size=16,color='black',margin = margin(t=2,r=2,b=2,l=2,unit="lines")), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1), axis.ticks.length = unit(-0.2,"lines"),axis.text=element_text(family="Times",size=16,color='black',margin = margin(0.2,unit="lines")), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +theme_classic2 <- function(...) { +theme_bw()+theme(panel.background=element_rect(color='black'),panel.border=element_rect(fill='transparent',color='black'), panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5), axis.title =element_text(size=18,vjust = 0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(0.8,"lines")),legend.background = element_blank(),legend.text=element_text(size = 14,color = 'black',family = 'Times', hjust = 0)) +} +theme_classic3 <- function(...) { +theme_bw(...)+theme(panel.background=element_blank(),panel.border=element_blank(),panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5), axis.title =element_text(size=18,vjust = 0.1),axis.text=element_text(family="Times",size=16,color='black',margin = unit(0.8,"lines")),legend.background = element_blank(),axis.line.x=element_line(size=0.5,colour="black", linetype='solid'), axis.line.y=element_line(size=0.5,colour="black", linetype='solid'),legend.text=element_text(size=14,color = 'black',family = 'Times', hjust = 0)) +} +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic3() +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_classic2() +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+ +theme_classic() + +theme(axis.ticks.length = unit(-0.2,"lines"),axis.text=element_text(size=16,color='black',margin = margin(0.2,unit="lines")), axis.ticks = element_line(color='black'),legend.background = element_blank())+labs(x="dwdwdefde",y="a",title="c") +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+ +theme(axis.ticks.length = unit(-0.2,"lines"),axis.text=element_text(size=16,color='black',margin = margin(0.2,unit="lines")), axis.ticks = element_line(color='black'),legend.background = element_blank())+labs(x="dwdwdefde",y="a",title="c") +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+ theme_classic() +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme(axis.ticks.length = unit(-0.2,"lines"),axis.text=element_text(size=16,color='black',margin = margin(0.2,unit="lines")), axis.ticks = element_line(color='black'),legend.background = element_blank())+labs(x="dwdwdefde",y="a",title="c") +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_classic(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1), axis.ticks.length = unit(-0.2,"lines"),axis.text=element_text(family="Times",size=16,color='black',margin = margin(0.2,unit="lines")), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +theme_zg <- function(..., bg='transparent'){ +require(grid) +theme_bw(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 18,margin=unit(c(2,2,0.5,1),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1), axis.ticks.length = unit(-0.2,"lines"),axis.text=element_text(family="Times",size=16,color='black',margin = margin(0.2,unit="lines")), axis.ticks = element_line(color='black'),legend.background = element_blank(), legend.key=element_rect(fill='transparent', color='transparent')) +} +ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) +geom_rect(aes(fill = z, width = w), colour = "grey50")+theme_zg()+labs(x="dwdwdefde",y="a",title="c") +setwd("/opt/bin/s-plot/demo/pheatmap") +source('/opt/bin/s-plot/bin/rFunction.R') +if (TRUE){ +installp("pheatmap",force = F) +# install.packages("pheatmap", repo="http://cran.us.r-project.org") +} +library(grid) +library(pheatmap) +if(1){ +library(RColorBrewer) +} +find_coordinates = function(n, gaps, m=1:n) { +if(length(gaps)==0){ +return(list(coord=unit(m/n, "npc"), size=unit(1/n,"npc"))) +} +if(max(gaps)>n){ +stop("Gaps do not match matrix size") +} +size = (1/n)*(unit(1, "npc")-length(gaps)*unit("4", "bigpts")) +gaps2 = apply(sapply(gaps, function(gap, x){x>gap}, m), 1, sum) +coord = m * size + (gaps2 * unit("4", "bigpts")) +return(list(coord=coord, size=size)) +} +vjust <- 0 +hjust <- 0.5 +if(270==270){ +vjust <- 0.5 +hjust <- 0 +}else if(270==45){ +vjust <- .5 +hjust <- 1 +}else if(270==0){ +vjust <- 1 +hjust <- 0.5 +} +draw_colnames_custom <- function (coln, gaps, ...){ +coord = find_coordinates(length(coln), gaps) +x = coord$coord - 0.5 * coord$size +if (270 == 90){ +hjust = 1 +vjust = 0.5 +} +if (270 == 45){ +hjust = 1 +vjust = 0.5 +} +res = textGrob(coln, x=x, y=unit(1, "npc")-unit(3, "bigpts"), +vjust = vjust, hjust=hjust, rot=270, gp=gpar(...)) +return(res) +} +vjust <- 0 +hjust <- 0.5 +if(270==270){ +vjust <- 0.5 +hjust <- 0 +}else if(270==45){ +vjust <- .5 +hjust <- 1 +}else if(270==0){ +vjust <- 1 +hjust <- 0.5 +} +draw_colnames_custom <- function (coln, gaps, ...){ +coord = find_coordinates(length(coln), gaps) +x = coord$coord - 0.5 * coord$size +if (270 == 90){ +hjust = 1 +vjust = 0.5 +} +if (270 == 45){ +hjust = 1 +vjust = 0.5 +} +res = textGrob(coln, x=x, y=unit(1, "npc")-unit(3, "bigpts"), +vjust = vjust, hjust=hjust, rot=270, gp=gpar(...)) +return(res) +} +?assignInNamespace +assignInNamespace(x="draw_colnames", value="draw_colnames_custom", +ns=asNamespace("pheatmap")) +draw_colnames_custom() +draw_colnames_custom +data <- read.table(file="heatmap_data.xls", sep="\t", header=T, row.names=1, +check.names=F, quote="", comment="") +?read.table +FALSE(1+1) +data +data+1 +data[data==0] +data[data==1] +data[data==1.998] +data==1.998 +log2(data+1) +if ("FALSE" != "FALSE"){ +#data[data==0] <- 1.0000001 +#data[data==1] <- 1.0001 +data <- FALSE(data+1) +} +prettyNum(c(1,2,3)) +?prettyNum +c(t(data)) +t(data) +data +?pheatmap diff --git a/example/pheatmap/example.sh b/example/pheatmap/example.sh new file mode 100755 index 0000000..72cfbd6 --- /dev/null +++ b/example/pheatmap/example.sh @@ -0,0 +1,2 @@ +s-plot pheatmap -f heatmap_data.xls -d row -P heatmap_row_anno.xls -Q heatmap_col_anno.xls -o ./ -A 45 -e FALSE +Rscript heatmap_data.xls.pheatmap.r diff --git a/example/pheatmap/heatmap_col_anno.xls b/example/pheatmap/heatmap_col_anno.xls new file mode 100644 index 0000000..289ea3e --- /dev/null +++ b/example/pheatmap/heatmap_col_anno.xls @@ -0,0 +1,6 @@ +Name Sample +T0_1 T0 +T0_2 T0 +T0_3 T0 +T4_1 T4 +T4_2 T4 diff --git a/example/pheatmap/heatmap_data.xls b/example/pheatmap/heatmap_data.xls new file mode 100644 index 0000000..6e73827 --- /dev/null +++ b/example/pheatmap/heatmap_data.xls @@ -0,0 +1,11 @@ +Name T0_1 T0_2 T0_3 T4_1 T4_2 +TR19267|c0_g1|CYP703A2 1.431 0.77 1.309 1.247 0.485 +TR19612|c1_g3|CYP707A1 0.72 0.161 0.301 2.457 2.794 +TR60337|c4_g9|CYP707A1 0.056 0.09 0.038 7.643 15.379 +TR19612|c0_g1|CYP707A3 2.011 0.689 1.29 0 0 +TR35761|c0_g1|CYP707A4 1.946 1.575 1.892 1.019 0.999 +TR58054|c0_g2|CYP707A4 12.338 10.016 9.387 0.782 0.563 +TR14082|c7_g4|CYP707A4 10.505 8.709 7.212 4.395 6.103 +TR60509|c0_g1|CYP707A7 3.527 3.348 2.128 3.257 2.338 +TR26914|c0_g1|CYP710A1 1.899 1.54 0.998 0.255 0.427 + diff --git a/example/pheatmap/heatmap_data.xls.pheatmap.pdf b/example/pheatmap/heatmap_data.xls.pheatmap.pdf new file mode 100644 index 0000000000000000000000000000000000000000..54727e2d07a81eb525c45837ad198826807cd91a GIT binary patch literal 6532 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 K=p_>*^Zx+reTzT< literal 0 HcmV?d00001 diff --git a/example/pheatmap/heatmap_data.xls.pheatmap.r b/example/pheatmap/heatmap_data.xls.pheatmap.r new file mode 100644 index 0000000..10f304a --- /dev/null +++ b/example/pheatmap/heatmap_data.xls.pheatmap.r @@ -0,0 +1,196 @@ +source('/opt/bin/s-plot/rFunction.R') + +if (FALSE){ + installp("pheatmap",force = F) + # install.packages("pheatmap", repo="http://cran.us.r-project.org") +} + +library(grid) +library(pheatmap) + +if(1){ + library(RColorBrewer) +} + +#draw_colnames_custom <- function (coln, ...){ +# m = length(coln) +# x = (1:m)/m - 1/2/m +# grid.text(coln, x=x, y=unit(0.96, "npc"), vjust=.5, hjust=1, +# rot=45, gp=gpar(...)) +#} +# +# +##Ref:http://stackoverflow.com/questions/15505607/diagonal-labels-orientation-on-x-axis-in-heatmaps + + +# Get the function to edit trace(pheatmap:::draw_colnames, edit=TRUE) +# in R console + +find_coordinates = function(n, gaps, m=1:n) { + if(length(gaps)==0){ + return(list(coord=unit(m/n, "npc"), size=unit(1/n,"npc"))) + } + + if(max(gaps)>n){ + stop("Gaps do not match matrix size") + } + + size = (1/n)*(unit(1, "npc")-length(gaps)*unit("4", "bigpts")) + + gaps2 = apply(sapply(gaps, function(gap, x){x>gap}, m), 1, sum) + coord = m * size + (gaps2 * unit("4", "bigpts")) + + return(list(coord=coord, size=size)) +} + + +vjust <- 0 +hjust <- 0.5 + +if(45==270){ + vjust <- 0.5 + hjust <- 0 +}else if(45==45){ + vjust <- .5 + hjust <- 1 +}else if(45==0){ + vjust <- 1 + hjust <- 0.5 +} + + + +draw_colnames_custom <- function (coln, gaps, ...){ + coord = find_coordinates(length(coln), gaps) + x = coord$coord - 0.5 * coord$size + if (45 == 90){ + hjust = 1 + vjust = 0.5 + } + if (45 == 45){ + hjust = 1 + vjust = 0.5 + } + + res = textGrob(coln, x=x, y=unit(1, "npc")-unit(3, "bigpts"), + vjust = vjust, hjust=hjust, rot=45, gp=gpar(...)) + return(res) +} + + +# Overwrite default draw_colnames with your own version +assignInNamespace(x="draw_colnames", value="draw_colnames_custom", + ns=asNamespace("pheatmap")) + +data <- read.table(file="heatmap_data.xls", sep="\t", header=T, row.names=1, + check.names=F, quote="", comment="") + +if ("FALSE" != "FALSE"){ + #data[data==0] <- 1.0000001 + #data[data==1] <- 1.0001 + data <- FALSE(data+1) +} + +if (1 == 1){ + legend_breaks = NA +} else if (1 == 2){ + if (Inf == Inf){ + summary_v <- c(t(data)) + legend_breaks <- unique(c(seq(summary_v[1]*0.95,summary_v[2],length=6), + seq(summary_v[2],summary_v[3],length=6), + seq(summary_v[3],summary_v[5],length=5), + seq(summary_v[5],summary_v[6]*1.05,length=5))) + } else { + legend_breaks <- unique(c(seq(summary_v[1]*0.95, Inf, + length=10), seq(Inf,summary_v[6]*1.05,length=10))) + } + + if("FALSE" != "FALSE"){ + legend_breaks <- prettyNum(legend_breaks, digits=FALSE) + } + + print(col) + print(legend_breaks) +} else { + legend_breaks <- c() +} + + +if ("heatmap_row_anno.xls" != "NA") { + annotation_row <- read.table(file="heatmap_row_anno.xls", header=T, + row.names=1, sep="\t", quote="", check.names=F, comment="") +} else { + annotation_row <- NA +} + +if ("heatmap_col_anno.xls" != "NA") { + annotation_col <- read.table(file="heatmap_col_anno.xls", header=T, + row.names=1, sep="\t", quote="", check.names=F, comment="") + # Do not remember what this is for? + #levs <- unique(unlist(lapply(annotation_col, unique))) + #annotation_col <- data.frame(lapply(annotation_col, factor, + # levels=levs), row.names=rownames(annotation_col)) +} else { + annotation_col <- NA +} + +data[data>Inf] <- Inf +if ("-Inf" != "-Inf"){ + data[data<-Inf] <- -Inf +} + +if ("function" == "function"){ + color_vector <- colorRampPalette(rev(brewer.pal(n=7, name="RdYlBu")))(100) +} else if ("function" == "vector"){ + colfunc <- colorRampPalette(colorRampPalette(rev(brewer.pal(n=7, name="RdYlBu")))(100), bias=1) + color_vector <- colfunc(30) +} else { + color_vector <- colorRampPalette(rev(brewer.pal(n=7, name="RdYlBu")))(100) +} + +### control width and height add by lin dechun + +if (!is.numeric(FALSE)) { + if ("heatmap_row_anno.xls" != "NA" || "heatmap_col_anno.xls" != "NA") { + temp1=ncol(data)+max(sapply(rownames(data),nchar))/10+4 + } else { + temp1=ncol(data)+max(sapply(rownames(data),nchar))/10+2 + } + + temp2=nrow(data)+max(sapply(colnames(data),nchar))/10 + + if (temp1 > temp2){ + temp2=temp2*(8/temp1) + temp1=8 + } else{ + temp1=temp1*(8/temp2) + temp2=8 + } + + pheatmap(data, kmean_k=NA, color=color_vector, + scale="row", border_color=NA, + cluster_rows=TRUE, cluster_cols=FALSE, + breaks=legend_breaks, clustering_method="complete", + clustering_distance_rows="correlation", + clustering_distance_cols="correlation", + legend_breaks=legend_breaks, show_rownames=TRUE, show_colnames=TRUE, + main="", annotation_col=annotation_col, + annotation_row=annotation_row, + fontsize=14, filename=".//heatmap_data.xls.pheatmap.pdf", width=temp1, + height=temp2) +}else{ + pheatmap(data, kmean_k=NA, color=color_vector, + scale="row", border_color=NA, + cluster_rows=TRUE, cluster_cols=FALSE, + breaks=legend_breaks, clustering_method="complete", + clustering_distance_rows="correlation", + clustering_distance_cols="correlation", + legend_breaks=legend_breaks, show_rownames=TRUE, show_colnames=TRUE, + main="", annotation_col=annotation_col, + annotation_row=annotation_row, + fontsize=14, filename=".//heatmap_data.xls.pheatmap.pdf", width=FALSE, + height=FALSE) +} + +cat(system("/bin/rm -f Rplots.pdf",intern=TRUE)) + diff --git a/example/pheatmap/heatmap_row_anno.xls b/example/pheatmap/heatmap_row_anno.xls new file mode 100644 index 0000000..7ffcefa --- /dev/null +++ b/example/pheatmap/heatmap_row_anno.xls @@ -0,0 +1,10 @@ +Name Clan Family +TR19267|c0_g1|CYP703A2 CYP71 CYP703 +TR19612|c1_g3|CYP707A1 CYP85 CYP707 +TR60337|c4_g9|CYP707A1 CYP85 CYP707 +TR19612|c0_g1|CYP707A3 CYP85 CYP707 +TR35761|c0_g1|CYP707A4 CYP85 CYP707 +TR58054|c0_g2|CYP707A4 CYP85 CYP707 +TR14082|c7_g4|CYP707A4 CYP85 CYP707 +TR60509|c0_g1|CYP707A7 CYP85 CYP707 +TR26914|c0_g1|CYP710A1 CYP710 CYP710 diff --git a/example/scatterplot3d/pca.normal.data b/example/scatterplot3d/pca.normal.data new file mode 100644 index 0000000..ee68733 --- /dev/null +++ b/example/scatterplot3d/pca.normal.data @@ -0,0 +1,6 @@ +ID Samp1 Samp2 Samp3 Samp4 +G1 1000 1000 10000 100 +G2 1000 1000 10000 100 +G3 1000 1000 10000 100 +G4 1000 1000 10000 100 +G5 1000 1000 10000 100 diff --git a/example/scatterplot3d/sampleGroup b/example/scatterplot3d/sampleGroup new file mode 100644 index 0000000..bf3c156 --- /dev/null +++ b/example/scatterplot3d/sampleGroup @@ -0,0 +1,5 @@ +ID type batch condition +Samp1 R a Treat +Samp2 S b Treat +Samp3 S a Control +Samp4 R b Control diff --git a/example/scatterplotColor/scatterplotColor.data b/example/scatterplotColor/scatterplotColor.data new file mode 100644 index 0000000..f712da7 --- /dev/null +++ b/example/scatterplotColor/scatterplotColor.data @@ -0,0 +1,10 @@ +Gene hmC Kme Expr Size +1_NM_001001130_23818 0.342364 0.387972 0.562945535966746 expr3 +2_NM_001001144_16662 1.09501 0.927882 10.6244189482162 expr7 +3_NM_001001152_23797 0.14429 0.375741 0 unexpr +4_NM_001001160_10503 0.991374 1.07919 0.0878474532737287 expr1 +5_NM_001001176_17970 0.184586 0.202106 0.9731593253037 expr3 +6_NM_001001177_28078 0.351389 0.411244 0 unexpr +7_NM_001001178_1650 0.328352 0.295332 0.0490132479669711 expr1 +8_NM_001001179_10881 0.693106 0.55201 0 unexpr +9_NM_001001180_13669 0.533143 0.682877 3.73548640439016 expr5 diff --git a/example/scatterplotDoubleVariable/scatterplotDoubleVariable.data b/example/scatterplotDoubleVariable/scatterplotDoubleVariable.data new file mode 100644 index 0000000..aad0485 --- /dev/null +++ b/example/scatterplotDoubleVariable/scatterplotDoubleVariable.data @@ -0,0 +1,19 @@ +Term Sample count p_value +hsa04740:Olfactory transduction b 379 6.48E-13 +hsa04080:Neuroactive ligand-receptor interaction b 256 5.21E-06 +hsa04060:Cytokine-cytokine receptor interaction b 262 8.62E-04 +hsa00830:Retinol metabolism b 54 0.124538325 +hsa04062:Chemokine signaling pathway b 187 0.913682422 +hsa00120:Primary bile acid biosynthesis b 16 0.995946178 +hsa04614:Renin-angiotensin system b 17 0.998465518 +hsa04640:Hematopoietic cell lineage b 86 0.99955116 +hsa04650:Natural killer cell mediated cytotoxicity b 133 0.999599558 +hsa04740:Olfactory transduction a 379 6.48E-13 +hsa04080:Neuroactive ligand-receptor interaction a 256 5.21E-06 +hsa04060:Cytokine-cytokine receptor interaction a 262 8.62E-04 +hsa00830:Retinol metabolism a 54 0.124538325 +hsa04062:Chemokine signaling pathway a 187 0.913682422 +hsa00120:Primary bile acid biosynthesis a 16 0.995946178 +hsa04614:Renin-angiotensin system a 17 0.998465518 +hsa04640:Hematopoietic cell lineage a 86 0.99955116 +hsa04650:Natural killer cell mediated cytotoxicity a 133 0.999599558 diff --git a/example/upsetView/upsetView.data b/example/upsetView/upsetView.data new file mode 100644 index 0000000..ee7036e --- /dev/null +++ b/example/upsetView/upsetView.data @@ -0,0 +1,7 @@ +ID Samp1 Samp2 Samp3 Samp4 Samp5 +G1 1 0 1 0 1 +G2 0 0 1 1 1 +G3 1 1 1 0 1 +G4 1 1 1 0 0 +G5 0 1 0 1 1 +G6 1 0 1 0 0 diff --git a/example/vennDiagram/vennDiagram.data b/example/vennDiagram/vennDiagram.data new file mode 100644 index 0000000..9c4273d --- /dev/null +++ b/example/vennDiagram/vennDiagram.data @@ -0,0 +1,12 @@ +Gene Sample +g1 h3k27ac +g2 h3k27ac +a1 h3k27ac +a3 h3k27ac +b4 h3k27ac +g1 ctcf +h1 ctcf +a3 ctcf +b1 ctcf +b2 ctcf +g2 ctcf diff --git a/example/volcano/volcano.data b/example/volcano/volcano.data new file mode 100644 index 0000000..9ea5e01 --- /dev/null +++ b/example/volcano/volcano.data @@ -0,0 +1,7 @@ +id log2fc -log10(pvalue) significant +1 0 0 1 +1 0 0 1 +3 0 0 1 +1 0 0 0 +2 0 0 0 +1 0 0 0 diff --git a/example/volcano/volcano.data2 b/example/volcano/volcano.data2 new file mode 100644 index 0000000..85bb4d1 --- /dev/null +++ b/example/volcano/volcano.data2 @@ -0,0 +1,7 @@ +id log2fc -log10(pvalue) significant +1 0 0 TRUE +1 0 0 TRUE +3 0 0 TRUE +1 0 0 FALSE +2 0 0 FALSE +1 0 0 FALSE diff --git a/p b/p deleted file mode 100644 index e69de29..0000000 diff --git a/python.log b/python.log deleted file mode 100644 index 93571b0..0000000 --- a/python.log +++ /dev/null @@ -1,4 +0,0 @@ -/home/chentong/home/server/pybin/transferNormalClusteredMatrixForLinePlot.py -i swap - Run time : 2014-09-01 14:15:40 - 2014-09-01 14:15:40 -/home/chentong/home/server/pybin/transferNormalClusteredMatrixForLinePlot.py -i swap s-plot lines - Run time : 2014-09-01 14:20:15 - 2014-09-01 14:20:15 diff --git a/rFunction.R b/rFunction.R new file mode 100644 index 0000000..8eeebd9 --- /dev/null +++ b/rFunction.R @@ -0,0 +1,98 @@ + +## CREATED BY Lin Dechun (lindechun@genomics.cn) + +## install pacakge from Bioconductor +bio <- function(pacakge){ + source("http://bioconductor.org/biocLite.R") + biocLite(pacakge) +} + +## install.package +installp <- function(packagelist,force=F){ + for (package in packagelist){ + if (!package %in% .packages(all.available = T) || force == T){ + install.packages(package,repo="https://mirrors.tuna.tsinghua.edu.cn/CRAN/") + }else{ + print(paste(package," has been installed!",sep="")) + } + } +} + +# themes for ggplot2 self-definited +## axis.title的size大小适用于labs(),而对默认生成的坐标轴标题偏小5左右 +theme_classic2 <- function(...) { + ## 上下左右均有坐标线,主题风格简约 + theme_bw(...)+theme(panel.background=element_rect(color='black'),panel.border=element_rect(fill='transparent',color='black'), panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',family="Times"),plot.title=element_text(size = 19,margin=unit(c(0.5,0.5,0.5,0.5),'cm'),hjust=0.5), axis.title =element_text(size=18,vjust = 0.1),axis.text=element_text(family="Times",size=17,color='black',margin = unit(0.8,"lines")),legend.background = element_blank(),legend.text=element_text(size = 12,color = 'black',family = 'Times', hjust = 0),legend.title=element_text(size = 13,color = 'black',family = 'Times', hjust = 0)) +} + +theme_classic3 <- function(...) { + ## 左边和下边才有坐标线 + theme_bw(...)+theme(panel.background=element_blank(),panel.border=element_blank(),panel.grid=element_blank(),plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'),title=element_text(color='black',face='plain',family="Times"),plot.title=element_text(size = 19,margin=unit(c(0.5,0.5,0.5,0.5),'cm'),hjust=0.5), axis.title =element_text(size=18,vjust = 0.1),axis.text=element_text(family="Times",size=17,color='black',margin = unit(0.8,"lines")),legend.background = element_blank(),axis.line.x=element_line(size=0.5,colour="black", linetype='solid'), axis.line.y=element_line(size=0.5,colour="black", linetype='solid'),legend.text=element_text(size=12,color = 'black',family = 'Times', hjust = 0),legend.title=element_text(size = 13,color = 'black',family = 'Times', hjust = 0)) +} + +theme_cin <- function(..., bg='transparent'){ + ## 轴续向内伸 + require(grid) + theme_bw(...) + theme(rect=element_rect(fill=bg), plot.margin=unit(rep(0.5,4), 'lines'), panel.background=element_rect(fill='transparent', color='black'), panel.border=element_rect(fill='transparent', color='transparent'), panel.grid=element_blank(),title=element_text(color='black',face='plain',family="Times"), plot.title=element_text(size = 19,color='black',margin=unit(c(0.5,0.5,0.5,0.5),'cm'),hjust=0.5),axis.title = element_text(size=18,color='black', vjust=0.1), axis.ticks.length = unit(-0.3,"lines"),axis.text.x=element_text(family="Times",size=17,color='black',margin=margin(8,0,3,0,"pt")),axis.text.y=element_text(family="Times",size=17,color='black',margin=margin(0,8,0,3,"pt")), axis.ticks = element_line(color='black'),legend.background = element_blank(),legend.text=element_text(size=12,color = 'black',family = 'Times', hjust = 0),legend.title=element_text(size = 13,color = 'black',family = 'Times', hjust = 0),legend.key=element_rect(fill='transparent', color='transparent')) +} + +# plot tools +## self-correcting location of x-aixs label ( applies to ggplot2) + +Xlable_angle_correct <- function(selfp, xtics_angle) { + + if (xtics_angle != 0){ + if (xtics_angle == 90){ + selfp <- selfp + theme(axis.text.x= + element_text(angle=xtics_angle, hjust=1, vjust=0.5)) + }else if (xtics_angle == 45){ + selfp <- selfp + theme(axis.text.x= + element_text(angle=xtics_angle, hjust=1.1, vjust=1.1)) + } else { + selfp <- selfp + theme(axis.text.x= + element_text(angle=xtics_angle, hjust=0.5, vjust=0.5)) + } + } + return(selfp) + +} + +Canvas_size <- function(w_auto_temp, variable, xvariable, rotate_plot, legend_pos){ + if (w_auto_temp < 8) { + w_auto=w_auto_temp-1 + } else if (w_auto_temp < 20) { + w_auto=8+(w_auto_temp-8)/5 + } else { + w_auto=14+(w_auto_temp-20)/5 + } + + if (variable != xvariable){ + w_auto=w_auto+2 + } + + h_auto=6 + if (! rotate_plot){ + if (legend_pos == "right" || legend_pos == "left"){ + w_auto=w_auto+2 + } + if (legend_pos == "top" || legend_pos == "bottom"){ + h_auto=h_auto+0.5 + w_auto=w_auto+1 + } + }else{ + if (legend_pos == "top" || legend_pos == "bottom"){ + w_auto=w_auto+1 + } + } + return(c(w_auto, h_auto)) +} + +Savefig <- function(filename,plott, width, height, ppi, ftype="pdf"){ + if (ftype == "pdf") { + ggsave(plot=plott, filename=filename, dpi=ppi, width=width, + height=height, units=c("in"),colormodel="srgb") + } else { + ggsave(plot=plott, filename=filename, dpi=ppi, width=width, + height=height, units=c("in")) + } +} diff --git a/s-plot_tutorial.md b/s-plot_tutorial.md new file mode 100644 index 0000000..cec7bd1 --- /dev/null +++ b/s-plot_tutorial.md @@ -0,0 +1,154 @@ +# s_plot的数据格式说明 +--- +## sp_pheatmap.sh +### Matrix file +> heatmap_data.xls + +| Name | T0_1 | T0_2 | T0_3 | T4_1 | T4_2 | +|:-------|:------:|:------:|:------:|:------:|:-----:| +|TR19267|c0_g1|CYP703A2 | 1.431 | 0.77 | 1.309 | 1.247 | 0.485 | +|TR19612|c1_g3|CYP707A1 | 0.72 | 0.161 | 0.301 | 2.457 | 2.794 | +|TR60337|c4_g9|CYP707A1 | 0.056 | 0.09 | 0.038 | 7.643 | 15.379 | +|TR19612|c0_g1|CYP707A3 | 2.011 | 0.689 | 1.29 | 0 | 0 | +|TR35761|c0_g1|CYP707A4 | 1.946 | 1.575 | 1.892 | 1.019 | 0.999 | +|TR58054|c0_g2|CYP707A4 | 12.338 | 10.016 | 9.387 | 0.782 | 0.563 | +|TR14082|c7_g4|CYP707A4 | 10.505 | 8.709 | 7.212 | 4.395 | 6.103 | +|TR60509|c0_g1|CYP707A7 | 3.527 | 3.348 | 2.128 | 3.257 | 2.338 | +|TR26914|c0_g1|CYP710A1 | 1.899 | 1.54 | 0.998 | 0.255 | 0.427 | + + +### Row annorarion file +> heatmap_row_anno.xls + +> 1. At least two columns +> 2. The first column should be the same as the first column in matrix (order does not matter) + +| Name | Clan | Family | +|:------|:------:|:-------:| +| TR19267|c0_g1|CYP703A2 | CYP71 | CYP703| +| TR19612|c1_g3|CYP707A1 | CYP85 | CYP707| +| TR60337|c4_g9|CYP707A1 | CYP85 | CYP707| +| TR19612|c0_g1|CYP707A3 | CYP85 | CYP707| +| TR35761|c0_g1|CYP707A4 | CYP85 | CYP707| +| TR58054|c0_g2|CYP707A4 | CYP85 | CYP707| +| TR14082|c7_g4|CYP707A4 | CYP85 | CYP707| +| TR60509|c0_g1|CYP707A7 | CYP85 | CYP707| +| TR26914|c0_g1|CYP710A1 | CYP710 | CYP710| + +### Column annorarion file +> heatmap_col_anno.xls + +> 1. At least two columns +> 2. The first column should be the same as the first row in matrix (order does not matter) + +| Name | Sample | +|:------|:------:| +| T0_1 | T0| +| T0_2 | T0| +| T0_3 | T0| +| T4_1 | T4| +| T4_2 | T4| + +## sp_boxplot.sh +> This script is used to do boxplot using ggplot2. + +> For file using "Set" column, you can use boxplot.onefile.sh -f file -a Set + +> fileformat when -m is true + +> Default we use string "value" and "variable" to represent the data + +> column and sub-class column. If you have other strings as column names, please give them to -d and -F. + +> The "Set" column is optional. + +> If you do have several groups, they can put at the "Set" column with "Set" or other string as labels. The label should be given to parameter -a. +> Actually this format is the melted result of last format. + +### Matrix +> fileformat for -f (suitable for data extracted from one sample, the +number of columns is unlimited. Column 'Set' is not necessary unless +you have multiple groups) + +> For file using "Set" column, you can use +boxplot.onefile.sh -f file -a Set + +#### Matrix1 +> boxplot.normal.data + +| Name|2cell_1| 2cell_2 | 2cell_3 | 2cell_4 | 2cell_5 | 2cell_6 | 4cell_1 | 4cell_2 | 4cell_3 | 4cell_4 | 4cell_5 | 4cell_6 | zygote_1 | zygote_2 | zygote_3 | zygote_4 | zygote_5 | zygote_6| +|:--|:---:|:---:|:----:|:---:|:----:|:----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:----:| +|A | 8 | 13 | 14 | 9 | 19 | 12 | 3.2 | 5.2 | 5.6 | 3.6 | 7.6 | 4.8 | 0.8 | 1.3 | 1.4 | 0.9 | 1.9 | 1.2| +|B | 8 | 13 | 14 | 9 | 19 | 12 | 3.2 | 5.2 | 5.6 | 3.6 | 7.6 | 4.8 | 0.8 | 1.3 | 1.4 | 0.9 | 1.9 | 1.2| +|C | 8 | 13 | 14 | 9 | 19 | 12 | 3.2 | 5.2 | 5.6 | 3.6 | 7.6 | 4.8 | 0.8 | 1.3 | 1.4 | 0.9 | 1.9 | 1.2| +|D | 8 | 13 | 14 | 9 | 19 | 12 | 3.2 | 5.2 | 5.6 | 3.6 | 7.6 | 4.8 | 0.8 | 1.3 | 1.4 | 0.9 | 1.9 | 1.2| +|E | 8 | 13 | 14 | 9 | 19 | 12 | 3.2 | 5.2 | 5.6 | 3.6 | 7.6 | 4.8 | 0.8 | 1.3 | 1.4 | 0.9 | 1.9 | 1.2| +|F | 8 | 13 | 14 | 9 | 19 | 12 | 3.2 | 5.2 | 5.6 | 3.6 | 7.6 | 4.8 | 0.8 | 1.3 | 1.4 | 0.9 | 1.9 | 1.2| +|G | 8 | 13 | 14 | 9 | 19 | 12 | 3.2 | 5.2 | 5.6 | 3.6 | 7.6 | 4.8 | 0.8 | 1.3 | 1.4 | 0.9 | 1.9 | 1.2| +|H | 8 | 13 | 14 | 9 | 19 | 12 | 3.2 | 5.2 | 5.6 | 3.6 | 7.6 | 4.8 | 0.8 | 1.3 | 1.4 | 0.9 | 1.9 | 1.2| +|I | 8 | 13 | 14 | 9 | 19 | 12 | 3.2 | 5.2 | 5.6 | 3.6 | 7.6 | 4.8 | 0.8 | 1.3 | 1.4 | 0.9 | 1.9 | 1.2| + +#### Matrix2 +> boxplot.matrix2.data + +|Gene | hmC | expr | Set| +|:-----|:---:|:--:|:--:| +|NM_001003918_26622 | 0 | 83.1269257376101 | TP16| +|NM_001011535_3260 | 0 | 0 | TP16| +|NM_001012640_14264 | 0 | 0 | TP16| +|NM_001012640_30427 | 0 | 0 | TP16| +|NM_001003918_2662217393_30486 | 0 | 0 | TP16| +|NM_001017393_30504 | 0 | 0 | TP16| +|NM_001025241_30464 | 0 | 0 | TP16| +|NM_001017393_30504001025241_30513 | 0 | 0 | TP16| + +### sampleGroupFile +> sampleGroup + +> 1. TAB separated, first column corresponds to first row of matrix +> 2. Group should be gave to <-F> + +|Sample | G| +|:------|:--:| +|zygote_1 | zygote| +|zygote_2 | zygote| +|zygote_3 | zygote| +|zygote_4 | zygote| +|zygote_5 | zygote| +|zygote_6 | zygote| +|2cell_1 | 2cell| +|2cell_2 | 2cell| +|2cell_3 | 2cell| +|2cell_4 | 2cell| +|2cell_5 | 2cell| +|2cell_6 | 2cell| +|4cell_1 | 4cell| +|4cell_2 | 4cell| +|4cell_3 | 4cell| +|4cell_4 | 4cell| +|4cell_5 | 4cell| +|4cell_6 | 4cell| + +### Matrix_melted +> boxplot.melt.data + +|Gene | Sample | Group | Expr| +|:--- |:------:|:-----:|:---:| +|A | zygote_1 | zygote | 0.8| +|A | zygote_2 | zygote | 1.3| +|A | zygote_3 | zygote | 1.4| +|A | zygote_4 | zygote | 0.9| +|A | zygote_5 | zygote | 1.9| +|A | zygote_6 | zygote | 1.2| +|A | 2cell_1 | 2cell | 8| +|A | 2cell_2 | 2cell | 13| +|A | 2cell_3 | 2cell | 14| +|A | 2cell_4 | 2cell | 9| +|A | 2cell_5 | 2cell | 19| +|A | 2cell_6 | 2cell | 12| +|A | 4cell_1 | 4cell | 3.2| +|A | 4cell_2 | 4cell | 5.2| +|A | 4cell_3 | 4cell | 5.6| +|A | 4cell_4 | 4cell | 3.6| +|A | 4cell_5 | 4cell | 7.6| +|A | 4cell_6 | 4cell | 4.8| \ No newline at end of file diff --git a/shell_test/shell_for_test.sh b/shell_test/shell_for_test.sh new file mode 100644 index 0000000..002bab2 --- /dev/null +++ b/shell_test/shell_for_test.sh @@ -0,0 +1,28 @@ +a=0 +for i in TRUE FALSE TRUE +do + echo $i + ((a++)) +done +echo $a + +violin='FALSE' +violin_jitter='FALSE' +jitter='d' +boxplot_jitter='t' + +b=0 +fo=($violin $violin_jitter $jitter $boxplot_jitter) ##如果字符串有空格,则用引号 + +for i in ${fo[@]} +do + if [ $i != 'FALSE' ];then + echo $i + ((b++)) + fi +done + +if [ $b -gt 1 ];then + echo "You can only choose one of these (-V -W -j -J)" + exit 1 +fi diff --git a/sp_boxplot.sh b/sp_boxplot.sh index f1eb1c4..553972d 100755 --- a/sp_boxplot.sh +++ b/sp_boxplot.sh @@ -8,6 +8,8 @@ cat < -Sample Group -zygote_1 zygote -zygote_2 zygote -zygote_3 zygote -zygote_4 zygote -zygote_5 zygote -zygote_6 zygote -2cell_1 2cell -2cell_2 2cell -2cell_3 2cell -2cell_4 2cell -2cell_5 2cell -2cell_6 2cell -4cell_1 4cell -4cell_2 4cell -4cell_3 4cell -4cell_4 4cell -4cell_5 4cell -4cell_6 4cell - -For file using "Set" column, you can use -boxplot.onefile.sh -f file -a Set - -fileformat when -m is true -#Default we use string "value" and "variable" to represent the data -#column and sub-class column. If you have other strings as column -#names, please give them to -d and -F. -#The "Set" column is optional. -#If you do have several groups, they can put at the "Set" column -#with "Set" or other string as labels. The label should be given -#to parameter -a. -#Actually this format is the melted result of last format. - -Matrix_melted - -Gene Sample Group Expr -A zygote_1 zygote 0.8 -A zygote_2 zygote 1.3 -A zygote_3 zygote 1.4 -A zygote_4 zygote 0.9 -A zygote_5 zygote 1.9 -A zygote_6 zygote 1.2 -A 2cell_1 2cell 8 -A 2cell_2 2cell 13 -A 2cell_3 2cell 14 -A 2cell_4 2cell 9 -A 2cell_5 2cell 19 -A 2cell_6 2cell 12 -A 4cell_1 4cell 3.2 -A 4cell_2 4cell 5.2 -A 4cell_3 4cell 5.6 -A 4cell_4 4cell 3.6 -A 4cell_5 4cell 7.6 -A 4cell_6 4cell 4.8 - ${txtbld}OPTIONS${txtrst}: -f Data file (with header line, the first row is the colname, tab seperated. Multiple formats are allowed and described above) @@ -115,11 +30,11 @@ ${txtbld}OPTIONS${txtrst}: ${bldred}[Default "value" represents the column named "value". This parameter can only be set when -m is TRUE.]${txtrst} -F The column represents the variable information, meaning legend_variable. - If no-subclass of X-variavle, this will be treated as X-axis variable. + If no-subclass of X-variavle, this will be used X-axis variable(-a). ${bldred}[Default "variable" represents the column named "variable". This parameter can only be set when -m is TRUE.]${txtrst} -I Other columns you want to treat as ID variable columns except - the one given to -a. Not used when <-m TRUE>. + the one given to -a. Not used when <-m TRUE> or -q be seted. ${bldred}[Default empty string, accept comma separated strings like "'Id1','Id2','Id3'" or single string "id1"]${txtrst} -a Name for x-axis variable @@ -127,8 +42,7 @@ ${txtbld}OPTIONS${txtrst}: for data without 'Set' column. For the given example, 'Group' which represents groups of each gene should be supplied to this parameter. - This parameter can only be set when -m is TRUE. - ${txtrst}] + This parameter must set when -q is not FALSE or -m is TRUE.${txtrst}] -b Rotation angle for x-axis value(anti clockwise) ${bldred}[Default 0]${txtrst} -R Rotate the plot from vertical to horizontal. @@ -166,9 +80,9 @@ ${txtbld}OPTIONS${txtrst}: "c(-1, 0, 1, 2, 5, 10)" will generate (-1,0],(0,1]...(5,10]] -n Using notch (sand clock shape) or not.${txtred}[Default FALSE]${txtrst} -V Do violin plot instead of boxplot.${txtred}[Default FALSE]${txtrst} - -W Do violin plot without inner boxplot.${txtred}[Default FALSE]${txtrst} + -W Do violin plot overlay with jitter.${txtred}[Default FALSE]${txtrst} -j Do jitter plot instead of boxplot.${txtred}[Default FALSE]${txtrst} - -J Do jitter plot overlay with violinplot or boxplot or both.${txtred}[Default FALSE]${txtrst} + -J Do boxplot plot overlay with jitter.${txtred}[Default FALSE]${txtrst} -A The value given to scale for violin plot. if "area", all violins have the same area (before trimming the tails). If "count", areas are scaled proportionally to the number of observations. @@ -181,9 +95,9 @@ ${txtbld}OPTIONS${txtrst}: -g The levels of wrapping to set the order of each group. ${txtred}Normally the unique value of the column given to B in a format like <"'a','b','c','d'">.${txtrst} - -M The number of rows one wants when -G is used.Default NULL. + -M The number of rows one wants when -G is used. Default NULL. ${txtred}[one of -M and -N is enough]${txtrst} - -N The number of columns one wants when -G is used.Default NULL. + -N The number of columns one wants when -G is used. Default NULL. ${txtred}[one of -M and -N is enough]${txtrst} -k Paramter for scales for facet. [${txtred}Optional, only used when -B is given. Default each @@ -192,8 +106,8 @@ ${txtbld}OPTIONS${txtrst}: 'free_x' (variable x ranges for each sub-plot),'free_y' is accepted. ${txtrst}] -t Title of picture[${txtred}Default empty title${txtrst}] - -x xlab of picture[${txtred}Default empty xlab${txtrst}] - -y ylab of picture[${txtred}Default empty ylab${txtrst}] + -x xlab of picture[${txtred}Default name for -a${txtrst}] + -y ylab of picture[${txtred}Default name for -d${txtrst}] -s Scale y axis [${txtred}Default null. Accept TRUE. Also if the supplied number after -S is not 0, this @@ -201,7 +115,7 @@ ${txtbld}OPTIONS${txtrst}: -v If scale is TRUE, give the following scale_y_log10()[default], coord_trans(y="log10"), scale_y_continuous(trans=log2_trans()), coord_trans(y="log2"), - or other legal command for ggplot2)${txtrst}] + or other legal command for ggplot2). should use '***'${txtrst}] -o Exclude outliers. [${txtred}Exclude outliers or not, default FALSE means not.${txtrst}] -O The scales for you want to zoom in to exclude outliers. @@ -221,11 +135,13 @@ ${txtbld}OPTIONS${txtrst}: ${txtrst}] -p [Lowercase p] Other legal R codes for gggplot2 will be given here. [${txtres}Begin with '+' ${txtrst}] - -w The width of output picture.[${txtred}Default 20${txtrst}] - -u The height of output picture.[${txtred}Default 12${txtrst}] + -w The width of output picture.[${txtred}Default auto calculate${txtrst}] + -u The height of output picture.[${txtred}Default auto calculate${txtrst}] + -K The width of sub-box or sub-violin.[${txtred}Default 0.75${txtrst}] -r The resolution of output picture.[${txtred}Default 300 ppi${txtrst}] -E The type of output figures.[${txtred}Default pdf, accept eps/ps, tex (pictex), pdf, jpeg, tiff, bmp, svg and wmf)${txtrst}] + -T The self-definited theme for ggplot2, give the followding theme_classic2 [Default], theme_classic3, theme_cin.${txtrst} -z Is there a header[${bldred}Default TRUE${txtrst}] -e Execute or not[${bldred}Default TRUE${txtrst}] -i Install depeneded packages[${bldred}Default FALSE${txtrst}] @@ -249,11 +165,13 @@ x_cut="" scaleY='FALSE' y_add=0 scaleY_x='scale_y_log10()' +self_theme='theme_classic2' header='TRUE' execute='TRUE' ist='FALSE' -uwid=20 -vhig=12 +uwid='' +vhig='' +sub_box=0.75 res=300 notch='FALSE' par='' @@ -263,11 +181,11 @@ legend_pos='right' color='FALSE' ext='pdf' violin='FALSE' -violin_nb='FALSE' +violin_jitter='FALSE' +jitter='FALSE' +boxplot_jitter='FALSE' scale_violin='width' ID_var="" -jitter='FALSE' -jitter_bp='FALSE' colormodel='srgb' rotate_plot='FALSE' facet='NoMeAnInGTh_I_n_G_s' @@ -278,7 +196,7 @@ facet_level='NA' gene='FALSE' sampleGroup='FALSE' -while getopts "ha:A:b:B:c:C:d:D:e:E:f:F:g:G:M:N:k:i:I:R:j:J:l:L:m:n:o:O:p:P:q:Q:r:s:S:t:u:v:V:w:W:x:y:z:" OPTION +while getopts "ha:A:b:B:c:C:d:D:e:E:f:F:g:G:M:N:k:K:i:I:R:j:J:l:L:m:n:o:O:p:P:q:Q:r:s:S:t:T:u:v:V:w:W:x:y:z:" OPTION do case $OPTION in h) @@ -292,13 +210,13 @@ do melted=$OPTARG ;; a) - xvariable=$OPTARG + variable=$OPTARG ;; d) value=$OPTARG ;; F) - variable=$OPTARG + xvariable=$OPTARG ;; I) ID_var=$OPTARG @@ -307,7 +225,7 @@ do jitter=$OPTARG ;; J) - jitter_bp=$OPTARG + boxplot_jitter=$OPTARG ;; b) xtics_angle=$OPTARG @@ -336,6 +254,9 @@ do t) title=$OPTARG ;; + T) + self_theme=$OPTARG + ;; x) xlab=$OPTARG ;; @@ -361,7 +282,7 @@ do violin=$OPTARG ;; W) - violin_nb=$OPTARG + violin_jitter=$OPTARG ;; A) scale_violin=$OPTARG @@ -411,6 +332,9 @@ do z) header=$OPTARG ;; + K) + sub_box=$OPTARG + ;; e) execute=$OPTARG ;; @@ -429,7 +353,7 @@ if [ -z $file ]; then exit 1 fi -mid='.boxplot' +# mid='.boxplot' if test "${melted}" == "FALSE" && test "${sampleGroup}" == "FALSE"; then if test "${value}" != "value" || test "${variable}" != "variable"; then @@ -440,10 +364,51 @@ files. We will ignore this setting and not affect the result." fi fi -if test "${xvariable}" == ""; then +if test "${melted}" == "FALSE" && test "${gene}" != "FALSE";then + if test "${variable}" == "variable";then + variable="Sample" + fi +fi + +if test "${melted}" == "TRUE" && test "${variable}" == "variable"; then + echo "If '-m TRUE' be set, then -a should be set" + exit 1 +fi + +if test -z "${xvariable}"; then xvariable=${variable} fi +## add by lindechun +if test "${xlab}" == " ";then + xlab=${variable} +fi + +if test "${ylab}" == " ";then + ylab=${value} +fi + +b=0 +plot_judge=($violin $violin_jitter $jitter $boxplot_jitter) + +for i in ${plot_judge[@]} +do + if [ $i != 'FALSE' ];then + ((b++)) + fi +done + +if [ $b -gt 1 ];then + echo "You can only choose one of these (-V -W -j -J)" + exit 1 +fi + +if [ $b -eq 0 ];then + mid=${mid}'.boxplot' +fi + +## add by lindechun + if test "${gene}" != "FALSE"; then value="${gene}" fi @@ -451,11 +416,10 @@ fi if test "${value}" != "value" || test "${variable}" != "variable"; then mid=${mid}'.'${value}_${variable} fi - -#if test "${ID_var}" != ""; then -# ID_var=${ID_var} -#fi +if test "${variable}" != "${xvariable}"; then + mid=${mid}'_'${xvariable} +fi if test "${outlier}" == "TRUE"; then mid=${mid}'.noOutlier' @@ -476,215 +440,390 @@ fi if test "${violin}" == "TRUE"; then mid=${mid}'.violin' fi -if test "${violin_nb}" == "TRUE"; then - mid=${mid}'.violin_nb' + +if test "${violin_jitter}" == "TRUE"; then + mid=${mid}'.violin_jitter' fi if test "${jitter}" == "TRUE"; then mid=${mid}'.jitter' fi -if test "${jitter_bp}" == "TRUE"; then - mid=${mid}'.jitter_bp' +if test "${boxplot_jitter}" == "TRUE"; then + mid=${mid}'.boxplot_jitter' fi -. `dirname $0`/sp_configure.sh +if test "${facet}" != "NoMeAnInGTh_I_n_G_s"; then + mid=${mid}'.facet_wrap' +fi + +function ggplot2_configure { + +cat <>${file}${mid}.r + +#Configure the canvas + +p <- p + ${self_theme}() + +#Correcting location of x-aixs label +p <- Xlable_angle_correct(p, ${xtics_angle}) + +#Set the position of legend +top='top' +botttom='bottom' +left='left' +right='right' +none='none' +legend_pos_par <- ${legend_pos} + +p <- p + theme(legend.position=legend_pos_par) + +#add additional ggplot2 supported commands + +p <- p${par} + +# output pictures +w_auto_temp=length(levels(data_m\$${variable})) + + w_h_auto <- Canvas_size(w_auto_temp, "${variable}", "${xvariable}", ${rotate_plot}, "${legend_pos}") + w_auto <- w_h_auto[1] + h_auto <- w_h_auto[2] + +if ("${facet}" != "NoMeAnInGTh_I_n_G_s"){ + if ("${nrow}" != 'NULL') { + h_auto=h_auto*${nrow} + } + if ("${ncol}" != 'NULL') { + w_auto=w_auto*${ncol} + } + if ("${nrow}" == 'NULL' && "${ncol}" == 'NULL'){ + w_auto=w_auto*3 + h_auto=h_auto*0.7*length(levels(data_m\$${facet}))/3 + } +} + + +# Control margin of plot by exist status of title, xlab, ylab +if ("$title" == "") { + p <- p+ theme(plot.title=element_blank()) +} +if ("$xlab" == "") { + p <- p+ theme(axis.title.x=element_blank()) +} +if ("$ylab" == "") { + p <- p+ theme(axis.title.y=element_blank()) +} + +## savefig +if ("$uwid" != ''){ + if (!${rotate_plot}){ + Savefig("${file}${mid}.${ext}", p, $uwid, $vhig, "$res", "${ext}") + }else{ + Savefig("${file}${mid}.${ext}", p, $vhig, $uwid, "$res", "${ext}") + } +}else{ + if (!${rotate_plot}){ + Savefig("${file}${mid}.${ext}", p, w_auto, h_auto, "$res", "${ext}") + }else{ + Savefig("${file}${mid}.${ext}", p, h_auto, w_auto, "$res", "${ext}") + } +} +END +} cat <${file}${mid}.r +source('$(cd `dirname $0`; pwd)/rFunction.R') if ($ist){ - install.packages("ggplot2", repo="http://cran.us.r-project.org") - install.packages("reshape2", repo="http://cran.us.r-project.org") - install.packages("scales", repo="http://cran.us.r-project.org") - if(${jitter_bp}){ - install.packages("ggbeeswarm", repo="http://cran.us.r-project.org") - } + installp(c("ggplot2", "reshape2", "scales","ggbeeswarm","dplyr")) } -if(${jitter_bp}){ - library(ggbeeswarm) -}else if(${jitter}){ +if(${boxplot_jitter} || ${violin_jitter} || ${jitter}){ library(ggbeeswarm) } +# else if(${jitter}){ +# library(ggbeeswarm) +# } library(ggplot2) library(reshape2) library(scales) +library(dplyr) + +##### add by lindechun + +s_boxplot_median <- function(dat, more_v=TRUE){ + + ## errorbar(replace median line of boxplot or violin) adapt to sub-xvariable + + errorbarWidth <- function(x){ + y<-mean(unique(x)) + dfd <- function(i,y){ + (i-y)*($sub_box/length(unique(x))) + } + cc<-sapply(x,dfd,y) + return(cc) + } + if (more_v){ + temp1 <- mutate(dat,a1=as.integer(${variable})) + temp1 <- mutate(temp1,a2=as.integer(${xvariable})) + temp1\$a3 <- temp1\$a1+errorbarWidth(temp1\$a2) + temp2 <- temp1 %>% group_by(a3) %>% summarise(median=median(${value})) + + ## force boxplots from geom_boxplot to constant width + ## Ref: https://stackoverflow.com/questions/16705129/force-boxplots-from-geom-boxplot-to-constant-width + + if ("${facet}" != "NoMeAnInGTh_I_n_G_s") { + tab <- xtabs(~${xvariable}+${variable}+${facet},temp1) + tmp <- temp1[c("${variable}","${xvariable}","${value}","${facet}")] + }else{ + tab <- xtabs(~${xvariable}+${variable},temp1) + tmp <- temp1[c("${variable}","${xvariable}","${value}")] + } + + idx <- which(tab==0,arr.ind=TRUE) + + if(dim(idx)[1] != 0){ + fakeLines <- apply(idx, 1, function(x){ + + if (is.integer(dimnames(tab)[[2]])){ + fake_1 <- as.integer(dimnames(tab)[[2]][x[2]]) + }else{ + fake_1 <- dimnames(tab)[[2]][x[2]] + } + + if (is.integer(dimnames(tab)[[1]])){ + fake_2 <- as.integer(dimnames(tab)[[1]][x[1]]) + }else{ + fake_2 <- dimnames(tab)[[1]][x[1]] + } + if ("${facet}" != "NoMeAnInGTh_I_n_G_s") { + if (is.integer(dimnames(tab)[[1]])){ + fake_3 <- as.integer(dimnames(tab)[[3]][x[3]]) + }else{ + fake_3 <- dimnames(tab)[[3]][x[3]] + } + setNames(data.frame(fake_1,fake_2,min(temp1\$${value})-0.06*(max(temp1\$${value})-min(temp1\$${value})),fake_3),names(tmp)) + }else{ + setNames(data.frame(fake_1,fake_2,min(temp1\$${value})-0.06*(max(temp1\$${value})-min(temp1\$${value}))),names(tmp)) + } + } + ) + tmp2 <- rbind(tmp, do.call(rbind, fakeLines)) + }else{ + tmp2 <- tmp + } + + return(list(data_m=tmp2,data_bp_median=temp2,data_m_temp=temp1)) + + }else{ + + temp2 <- dat %>% group_by(${variable}) %>% summarise(median=median(${value})) + return(list(data_m=dat,data_bp_median=temp2)) + } +} + + +###### add by lindechun if(! $melted){ - ID_var <- c("${ID_var}") - ID_var <- ID_var[ID_var!=""] - data <- read.table(file="${file}", sep="\t", header=$header, - row.names=1, quote="", check.names=F) - if ("${gene}" != "FALSE") { - data_m <- as.data.frame(t(data["${gene}", ])) - data_m\$sample = rownames(data_m) - if ("${sampleGroup}" != "FALSE"){ - sampleGroup <- read.table("${sampleGroup}",sep="\t",header=1,check.names=F,row.names=1) - data_m <- merge(data_m, sampleGroup, by="row.names") - } - } else { - if ("$xvariable" != "${variable}"){ - if (length(ID_var) > 0){ - ID_var <- c(ID_var, "${xvariable}") - } else { - ID_var <- c("${xvariable}") - } - data_m <- melt(data, id.vars=ID_var) - } else { - if (length(ID_var) > 0){ - data_m <- melt(data, id.vars=ID_var) - } else { - data_m <- melt(data) - } - } - } + ID_var <- c("${ID_var}") + ID_var <- ID_var[ID_var!=""] + data <- read.table(file="${file}", sep="\t", header=$header, + row.names=1, quote="", check.names=F) + if ("${gene}" != "FALSE") { + data_m <- as.data.frame(t(data["${gene}", ])) + data_m\$Sample = rownames(data_m) + + if ("${sampleGroup}" != "FALSE") { + sampleGroup <- read.table("${sampleGroup}",sep="\t",header=1,check.names=F,row.names=1) + data_m <- merge(data_m, sampleGroup, by="row.names") + }else{ + print("Wainning: Because per x-axis tag contains only one data, so recommend you to use the scatterplot or lines script") + } + }else { + if ("$variable" != "variable") { + if (length(ID_var) > 0){ + ID_var <- c(ID_var, "${variable}") + } else { + ID_var <- c("${variable}") + } + data_m <- melt(data, id.vars=ID_var) + } else { + if (length(ID_var) > 0) { + data_m <- melt(data, id.vars=ID_var) + } else { + data_m <- melt(data) + } + } + } } else { - data_m <- read.table(file="$file", sep="\t", - header=$header, quote="") + data_m <- read.table(file="$file", sep="\t", + header=$header, quote="") } + if (${y_add} != 0){ - data_m\$${value} <- data_m\$${value} + ${y_add} + data_m\$${value} <- data_m\$${value} + ${y_add} } level <- c(${level}) -if ("${legend_cut}" != ""){ - data_m\$${variable} <- cut(data_m\$${variable}, ${legend_cut}) + +if ("${legend_cut}" != "") { + data_m\$${variable} <- cut(data_m\$${xvariable}, ${legend_cut}) } else if (length(level)>1){ - level_i <- level - data_m\$${variable} <- factor(data_m\$${variable}, levels=level_i) + level_i <- level + data_m\$${variable} <- factor(data_m\$${xvariable}, levels=level_i) } x_level <- c(${x_level}) -if ("${x_cut}" != ""){ - data_m\$${xvariable} <- cut(data_m\$${xvariable},${x_cut}) +if ("${x_cut}" != "") { + data_m\$${variable} <- cut(data_m\$${variable},${x_cut}) }else if (length(x_level)){ - data_m\$${xvariable} <- factor(data_m\$${xvariable},levels=x_level) + data_m\$${variable} <- factor(data_m\$${variable},levels=x_level) } + facet_level <- c(${facet_level}) if (length(facet_level)>1) { - data_m\$${facet} <- factor(data_m\$${facet}, + data_m\$${facet} <- factor(data_m\$${facet}, levels=facet_level, ordered=T) } +### add by lindechun +if ("${variable}" == "${xvariable}") { + dat <- s_boxplot_median(data_m, more_v=FALSE) +}else{ + dat <- s_boxplot_median(data_m, more_v=TRUE) +} -p <- ggplot(data_m, aes(factor($xvariable), ${value})) + xlab("$xlab") + -ylab("$ylab") + labs(title="$title") - - -if (${violin}){ - p <- p + geom_violin(aes(fill=factor(${variable})), - stat = "ydensity", position = "dodge", trim = TRUE, - scale = "${scale_violin}") + - geom_boxplot(aes(fill=factor(${variable})), alpha=.25, width=0.15, - position = position_dodge(width = .9), outlier.colour='NA') + - stat_summary(aes(group=${variable}), fun.y=mean, - geom="point", fill="black", shape=19, size=1, - position = position_dodge(width = .9)) - - #+ geom_jitter(height = 0) -} else if (${violin_nb}){ - p <- p + geom_violin(aes(fill=factor(${variable})), - stat = "ydensity", position = "dodge", trim = TRUE, - scale = "${scale_violin}") -} else if (${jitter}){ - p <- p + geom_quasirandom(aes(colour=factor(${variable}))) - p <- p + stat_summary(fun.y = "mean", geom = "text", label="----", size= 10, color= "black") - #p <- p + geom_jitter(aes(colour=factor(${variable}))) -} else { - if (${notch}){ - if (${outlier}){ - p <- p + geom_boxplot(aes(fill=factor(${variable})), notch=TRUE, - notchwidth=0.3, outlier.colour='NA') - }else{ - p <- p + geom_boxplot(aes(fill=factor(${variable})), notch=TRUE, - notchwidth=0.3) - } - }else { - if (${outlier}){ - p <- p + geom_boxplot(aes(fill=factor(${variable})), - outlier.colour='NA') - }else{ - p <- p + geom_boxplot(aes(fill=factor(${variable}))) - } - } +data_m <- dat\$data_m + +## calculate point size of jitter +data_nrow=nrow(dat\$data_m) +if (data_nrow < 50) { + jitter_size=1 +}else{ + jitter_size=0.5 } -if (${jitter_bp}){ - #p <- p + geom_jitter(aes(colour=factor(${variable}))) - #p <- p + geom_jitter() - p <- p + geom_quasirandom() +dat\$data_m\$${xvariable} <- factor(data_m\$${xvariable}) +dat\$data_m\$${variable} <- factor(data_m\$${variable}) + +data_m\$${xvariable} <- factor(data_m\$${xvariable}) +data_m\$${variable} <- factor(data_m\$${variable}) + +if ("${facet}" != "NoMeAnInGTh_I_n_G_s") { + dat\$data_m\$${facet} <- factor(data_m\$${facet}) + data_m\$${facet} <- factor(data_m\$${facet}) } -if($scaleY){ - p <- p + $scaleY_x - p <- p + stat_summary(fun.y = "mean", geom = "text", label="----", size= 10, color= "black") + +### add by lindechun + +p <- ggplot(dat\$data_m, aes($variable, ${value})) + xlab("$xlab") + + ylab("$ylab") + labs(title="$title") + +if (${violin}) { + p <- p + geom_violin(aes(color=${xvariable},fill=${xvariable}), + stat = "ydensity", position = "dodge", trim = TRUE, + scale = "${scale_violin}") + + if ("${variable}" != "${xvariable}") { + p <- p + geom_point(data=dat\$data_bp_median,aes(x=a3,y=median), size=1)+ + coord_cartesian(ylim=c(min(dat\$data_m_temp\$${value}),max(dat\$data_m_temp\$${value}))) + }else{ + p <- p+geom_point(data=dat\$data_bp_median,aes(x=${variable}, y=median),size=1) + } + + # stat_summary(aes(group=${variable}), fun.y=mean, + # geom="point", fill="black", shape=19, size=1, + # position = position_dodge(width = .9)) + +} else if (${violin_jitter}) { + p <- p + geom_violin(aes(color=${xvariable}),size=0.5, + stat = "ydensity", position = "dodge", trim = TRUE, + scale = "${scale_violin}")+geom_quasirandom(size=jitter_size) + + if ("${variable}" != "${xvariable}") { + p <- p + geom_point(data=dat\$data_bp_median,aes(x=a3,y=median), size=1.5, shape=17)+ + coord_cartesian(ylim=c(min(dat\$data_m_temp\$${value}),max(dat\$data_m_temp\$${value}))) + }else{ + p <- p+geom_point(data=dat\$data_bp_median,aes(x=${variable},y=median), size=1.5, shape=17) + } + +} else if (${jitter}) { + + p <- p + geom_quasirandom(aes(color=${xvariable}),size=jitter_size) + p <- p + stat_summary(fun.y = "mean", geom = "text", label="----", size= 5, color= "black") +} else { + if (${notch}){ + if (${outlier}){ + p <- p + geom_boxplot(aes(fill=${xvariable},color=${xvariable}), notch=TRUE,width=$sub_box, + notchwidth=0.3, outlier.colour='NA') + }else{ + p <- p + geom_boxplot(aes(fill=${xvariable},color=${xvariable}), notch=TRUE,outlier.size=0.5, width=$sub_box, + notchwidth=0.3) + } + } else { + if (${outlier}){ + p <- p + geom_boxplot(aes(fill=${xvariable},color=${xvariable}), + outlier.colour='NA', width=$sub_box) + }else{ + p <- p + geom_boxplot(aes(fill=${xvariable},color=${xvariable}),outlier.size=0.5, width=$sub_box) + } + } + if ("${variable}" != "${xvariable}") { + p <- p + geom_crossbar(data=dat\$data_bp_median,aes(x=a3,y=median,ymin=median,ymax=median),width=0.8*$sub_box/length(unique(dat\$data_m_temp\$a2)),fatten=0,size=0.7,color="white")+ + coord_cartesian(ylim=c(min(dat\$data_m_temp\$${value}),max(dat\$data_m_temp\$${value}))) + } else { + p <- p + geom_crossbar(data=dat\$data_bp_median,aes(x=${variable},y=median,ymax=median,ymin=median),width=$sub_box,color="white",fatten=0,size=0.7) + } } -if(${outlier}){ - #ylim_zoomin <- boxplot.stats(data_m\$${value})\$stats[c(1,5)] - stats <- boxplot.stats(data_m\$${value})\$stats - ylim_zoomin <- c(stats[1]/${out_scale}, stats[5]*${out_scale}) - p <- p + coord_cartesian(ylim = ylim_zoomin) +if (${boxplot_jitter}) { + p <- p + geom_quasirandom(color="black",size=jitter_size) } -if($color){ - p <- p + scale_fill_manual(values=c(${color_v})) + +if ($scaleY) { + p <- p + $scaleY_x + # p <- p + stat_summary(fun.y = "mean", geom = "text", label="----", size= 5, color= "black") } -if(${rotate_plot}){ - p <- p + coord_flip() +if (${outlier}) { + #ylim_zoomin <- boxplot.stats(dat\$data_m\$${value})\$stats[c(1,5)] + stats <- boxplot.stats(dat\$data_m\$${value})\$stats + ylim_zoomin <- c(stats[1]/${out_scale}, stats[5]*${out_scale}) + p <- p + coord_cartesian(ylim = ylim_zoomin) } -if ("${facet}" != "NoMeAnInGTh_I_n_G_s"){ - p <- p + facet_wrap( ~ ${facet}, nrow=${nrow}, ncol=${ncol}, - scale="${scales}") + +if ($color) { + p <- p + scale_fill_manual(values=c(${color_v}))+scale_colour_manual(values=c(${color_v})) } +if (${rotate_plot}) { + p <- p + coord_flip() +} + + +if ("${facet}" != "NoMeAnInGTh_I_n_G_s") { + # p <- p + facet_wrap( ~ ${facet}, nrow=${nrow}, ncol=${ncol},scale="${scales}") + p <- p + facet_wrap( ~ ${facet},scale="${scales}") +} END `ggplot2_configure` -##cat <>${file}${mid}.r -## -##p <- p + theme_bw() + theme(legend.title=element_blank(), -## panel.grid.major = element_blank(), -## panel.grid.minor = element_blank(), -## legend.key=element_blank(), -## axis.text.x=element_text(angle=${xtics_angle},hjust=1)) -## -##top='top' -##botttom='bottom' -##left='left' -##right='right' -##none='none' -##legend_pos_par <- ${legend_pos} -## -###if ("${legend_pos}" != "right"){ -##p <- p + theme(legend.position=legend_pos_par) -###} -## -## -##p <- p${par} -## -## -##ggsave(p, filename="${file}${mid}.${ext}", dpi=$res, width=$uwid, -##height=$vhig, units=c("cm")) -## -###png(filename="${file}${mid}.png", width=$uwid, height=$vhig, -###res=$res) -###p -###dev.off() -##END if [ "$execute" == "TRUE" ]; then Rscript ${file}${mid}.r -#if [ "$?" == "0" ]; then /bin/rm -f ${file}${mid}.r; fi -fi - + if [ "$?" == "0" ]; then + /bin/rm -f ${file}${mid}.r + fi +fi \ No newline at end of file diff --git a/sp_pheatmap.sh b/sp_pheatmap.sh index fc54466..1ab4b24 100755 --- a/sp_pheatmap.sh +++ b/sp_pheatmap.sh @@ -8,48 +8,10 @@ cat < will be transferred @@ -123,24 +85,18 @@ ${txtbld}OPTIONS${txtrst}: [${txtred}Default NA${txtrst}] -Q A file to specify col-annotation with format described above. [${txtred}Default NA${txtrst}] - -Z Annotation color. One can only specify color for each column of row-annotation - or col-annotation. For example, 'class' (two values: C1, C2) and - 'group' (two values:G1, G2) are two row-annotations, - 'type' (three values, T1, T2, T3) and 'size' (four values, 1, 2, 3, 4) - are two col-annoations. - Colors can be specified as <'class=c(C1="blue", C2="yellow"), size=c("white", "green"), type=c(T1="pink", T2="black", T3="cyan")'>. - In R, one can use function to get names of all available colors. - -u The width of output picture.[${txtred}Default 20${txtrst}] - -v The height of output picture.[${txtred}Default 20${txtrst}] + -u The width of output picture.[${txtred}Default auto calculate${txtrst}] + -v The height of output picture.[${txtred}Default auto calculate${txtrst}] -E The type of output figures.[${txtred}Default pdf, accept eps/ps, tex (pictex), png, jpeg, tiff, bmp, svg and wmf)${txtrst}] -r The resolution of output picture.[${txtred}Default 300 ppi${txtrst}] -F Font size [${txtred}Default 14${txtrst}] -p Preprocess data matrix to avoid 'STDERR 0 in cor(t(mat))'. Lowercase

. - [${txtred}Default TRUE${txtrst}] + [${txtred}Default FALSE${txtrst}] -e Execute script (Default) or just output the script. [${bldred}Default TRUE${txtrst}] + -o path of Output.[Default Current path, Optinal] -i Install the required packages. Normmaly should be TRUE if this is your first time run s-plot.[${bldred}Default FALSE${txtrst}] EOF @@ -165,15 +121,14 @@ execute='TRUE' ist='FALSE' legend=' ' na_color='grey' -uwid=20 -vhig=20 +uwid='FALSE' ## modify by lindechun, old: 20 +vhig='FALSE' ## modify by lindechun, old: 20 bias=1 res=300 fontsize=14 ext='pdf' xcol='green' ycol='red' -annotation_colors='NA' mcol='yellow' mid_value_use='FALSE' mid_value='Inf' @@ -188,10 +143,11 @@ generateNA='FALSE' digits='FALSE' annotation_row='NA' annotation_col='NA' -preprocess='TRUE' +preprocess='FALSE' minimum='-Inf' +output=$(pwd) -while getopts "hf:t:a:A:b:B:H:R:c:D:T:p:I:L:d:k:u:v:E:r:F:P:Q:x:y:M:Z:X:s:m:N:Y:Z:G:C:O:e:i:" OPTION +while getopts "hf:t:a:A:b:B:H:R:c:D:T:p:I:L:d:k:u:v:E:r:F:P:Q:x:y:M:Z:X:s:m:N:Y:G:C:O:e:o:i:" OPTION do case $OPTION in h) @@ -232,9 +188,6 @@ do I) clustering_distance_cols=$OPTARG ;; - Z) - annotation_colors=$OPTARG - ;; p) preprocess=$OPTARG ;; @@ -313,6 +266,9 @@ do e) execute=$OPTARG ;; + o) + output=$OPTARG + ;; i) ist=$OPTARG ;; @@ -346,10 +302,12 @@ if test "${preprocess}" == "TRUE"; then dealWithSTD0.py -i ${file}".nostd0" >${file} fi -cat <${file}${mid}.r +cat <$output/$(basename $file)${mid}.r +source('$(cd `dirname $0`; pwd)/rFunction.R') if ($ist){ - install.packages("pheatmap", repo="http://cran.us.r-project.org") + installp("pheatmap",force = F) + # install.packages("pheatmap", repo="http://cran.us.r-project.org") } library(grid) @@ -495,33 +453,60 @@ if ("${color_type}" == "function"){ color_vector <- ${color_vector} } -ann_colors = list(${annotation_colors}) - -if (ann_colors[1][1] == "NA") { - ann_colors = NA -} - -pheatmap(data, kmean_k=$kclu, color=color_vector, -scale="${scale}", border_color=NA, -cluster_rows=${cluster_rows}, cluster_cols=${cluster_cols}, -breaks=legend_breaks, clustering_method="${clustering_method}", -clustering_distance_rows="${clustering_distance_rows}", -clustering_distance_cols="${clustering_distance_cols}", -legend_breaks=legend_breaks, show_rownames=${ytics}, show_colnames=${xtics}, -main="$title", annotation_col=annotation_col, -annotation_row=annotation_row, -annotation_colors = ann_colors, -fontsize=${fontsize}, filename="${file}${mid}.${ext}", width=${uwid}, -height=${vhig}) - +### control width and height add by lin dechun + +if (!is.numeric(${uwid})) { + if ("${annotation_row}" != "NA" || "${annotation_col}" != "NA") { + temp1=ncol(data)+max(sapply(rownames(data),nchar))/10+4 + } else { + temp1=ncol(data)+max(sapply(rownames(data),nchar))/10+2 + } + + temp2=nrow(data)+max(sapply(colnames(data),nchar))/10 + + if (temp1 > temp2){ + temp2=temp2*(8/temp1) + temp1=8 + } else{ + temp1=temp1*(8/temp2) + temp2=8 + } + + pheatmap(data, kmean_k=$kclu, color=color_vector, + scale="${scale}", border_color=NA, + cluster_rows=${cluster_rows}, cluster_cols=${cluster_cols}, + breaks=legend_breaks, clustering_method="${clustering_method}", + clustering_distance_rows="${clustering_distance_rows}", + clustering_distance_cols="${clustering_distance_cols}", + legend_breaks=legend_breaks, show_rownames=${ytics}, show_colnames=${xtics}, + main="$title", annotation_col=annotation_col, + annotation_row=annotation_row, + fontsize=${fontsize}, filename="$output/$(basename $file)${mid}.${ext}", width=temp1, + height=temp2) +}else{ + pheatmap(data, kmean_k=$kclu, color=color_vector, + scale="${scale}", border_color=NA, + cluster_rows=${cluster_rows}, cluster_cols=${cluster_cols}, + breaks=legend_breaks, clustering_method="${clustering_method}", + clustering_distance_rows="${clustering_distance_rows}", + clustering_distance_cols="${clustering_distance_cols}", + legend_breaks=legend_breaks, show_rownames=${ytics}, show_colnames=${xtics}, + main="$title", annotation_col=annotation_col, + annotation_row=annotation_row, + fontsize=${fontsize}, filename="$output/$(basename $file)${mid}.${ext}", width=${uwid}, + height=${vhig}) +} + +cat(system("/bin/rm -f Rplots.pdf",intern=TRUE)) END + if [ "$execute" == "TRUE" ]; then - Rscript ${file}${mid}.r - if [ "$?" == "0" ]; then - #/bin/rm -f ${file}${mid}.r - /bin/rm -f Rplots.pdf + Rscript $output/$(basename $file)${mid}.r + if [ "$?" == "0" ]; then + /bin/rm -f $output/$(basename $file)${mid}.r + /bin/rm -f Rplots.pdf fi fi diff --git a/swap b/swap deleted file mode 100644 index d6e1d30..0000000 --- a/swap +++ /dev/null @@ -1,15 +0,0 @@ - -b The formula for facets.[${bldred}Default no facets, - +facet_grid(level ~ .) means divide by levels of 'level' vertcally. - +facet_grid(. ~ level) means divide by levels of 'level' horizontally. - +facet_grid(lev1 ~ lev2) means divide by lev1 vertically and lev2 - horizontally. - +facet_wrap(~level, ncol=2) means wrap horizontally with 2 - columns. - Example: +facet_wrap(~Size,ncol=6,scale='free') - ${txtrst}] - -d If facet is given, you may want to specifize the order of - variable in your facet, default alphabetically. - [${txtred}Accept sth like - (one level one sentence, separate by';') - data\$size <- factor(data\$size, levels=c("l1", - "l2",...,"l10"), ordered=T) ${txtrst}] diff --git a/swap2 b/swap2 deleted file mode 100644 index 5ad5771..0000000 --- a/swap2 +++ /dev/null @@ -1,11 +0,0 @@ -$facet_o - -p <- ggplot(data, aes(x=${xval},y=${yval})) \ -+ geom_point(aes(color=${color})) \ -+ scale_colour_gradient(low="green", high="red", -name="$col_legend" ${log}) \ -+ labs(x="$xlab", y="$ylab") + labs(title="$title") - -#if ("$facet" != ""){ -# facet=$facet -p <- p ${facet} diff --git a/tips b/tips deleted file mode 100644 index e69de29..0000000 diff --git a/tutorial_markdown/2017-07-09-R-boxplot.md b/tutorial_markdown/2017-07-09-R-boxplot.md new file mode 100644 index 0000000..02593f3 --- /dev/null +++ b/tutorial_markdown/2017-07-09-R-boxplot.md @@ -0,0 +1,420 @@ +--- +title: R 学习 - 箱线图 +author: ct +layout: post +categories: + - R +tags: + - R + - Bioinfo +--- + + +## 箱线图 + +箱线图是能同时反映数据统计量和整体分布,又很漂亮的展示图。在2014年的Nature Method上有2篇Correspondence论述了使用箱线图的好处和一个在线绘制箱线图的工具。就这样都可以发两篇Nature method,没天理,但也说明了箱线图的重要意义。 + +下面这张图展示了Bar plot、Box plot、Volin plot和Bean plot对数据分布的反应。从Bar plot上只能看到数据标准差或标准误不同;Box plot可以看到数据分布的集中性不同;Violin plot和Bean plot展示的是数据真正的分布,尤其是对Biomodal数据的展示。 + +Boxplot从下到上展示的是最小值,第一四分位数 (箱子的下边线)、中位数 (箱子中间的线)、第三四分位数 (箱子上边线)、最大值,具体解读参见 http://mp.weixin.qq.com/s/t3UTI_qAIi0cy1g6ZmHtwg。 + +![]({{ site.img_url}}/splot/boxplot_nm.png) + +* Nature Method文章 + +### 一步步解析箱线图绘制 + +假设有这么一个基因表达矩阵,第一列为基因名字,后面几列为样品名字,想绘制下样品中基因表达的整体分布。 + +```r +profile="Name;2cell_1;2cell_2;2cell_3;4cell_1;4cell_2;4cell_3;zygote_1;zygote_2;zygote_3 +A;4;6;7;3.2;5.2;5.6;2;4;3 +B;6;8;9;5.2;7.2;7.6;4;6;5 +C;8;10;11;7.2;9.2;9.6;6;8;7 +D;10;12;13;9.2;11.2;11.6;8;10;9 +E;12;14;15;11.2;13.2;13.6;10;12;11 +F;14;16;17;13.2;15.2;15.6;12;14;13 +G;15;17;18;14.2;16.2;16.6;13;15;14 +H;16;18;19;15.2;17.2;17.6;14;16;15 +I;17;19;20;16.2;18.2;18.6;15;17;16 +J;18;20;21;17.2;19.2;19.6;16;18;17 +L;19;21;22;18.2;20.2;20.6;17;19;18 +M;20;22;23;19.2;21.2;21.6;18;20;19 +N;21;23;24;20.2;22.2;22.6;19;21;20 +O;22;24;25;21.2;23.2;23.6;20;22;21" +``` + +读入数据并转换为ggplot2需要的长数据表格式 (经过前面几篇的练习,这应该都很熟了) + +```r +profile_text <- read.table(text=profile, header=T, row.names=1, quote="",sep=";", check.names=F) +# 在melt时保留位置信息 +# melt格式是ggplot2画图最喜欢的格式 +# 好好体会下这个格式,虽然多占用了不少空间,但是确实很方便 + +library(ggplot2) +library(reshape2) +data_m <- melt(profile_text) +head(data_m) +``` + + variable value + 1 2cell_1 4 + 2 2cell_1 6 + 3 2cell_1 8 + 4 2cell_1 10 + 5 2cell_1 12 + 6 2cell_1 14 + + +像往常一样,就可以直接画图了。 + +```r +# variable和value为矩阵melt后的两列的名字,内部变量, variable代表了点线的属性,value代表对应的值。 +p <- ggplot(data_m, aes(x=variable, y=value),color=variable) + +geom_boxplot() + +theme(axis.text.x=element_text(angle=50,hjust=0.5, vjust=0.5)) + +theme(legend.position="none") +p +# 图会存储在当前目录的Rplots.pdf文件中,如果用Rstudio,可以不运行dev.off() +dev.off() +``` + +箱线图出来了,看上去还可以,再加点色彩。 + +![]({{ site.img_url }}/splot/boxplot_1.png) + +```r +# variable和value为矩阵melt后的两列的名字,内部变量, variable代表了点线的属性,value代表对应的值。 +p <- ggplot(data_m, aes(x=variable, y=value),color=variable) + +geom_boxplot(aes(fill=factor(variable))) + +theme(axis.text.x=element_text(angle=50,hjust=0.5, vjust=0.5)) + +theme(legend.position="none") +p +# 图会存储在当前目录的Rplots.pdf文件中,如果用Rstudio,可以不运行dev.off() +dev.off() +``` + +![]({{ site.img_url }}/splot/boxplot_2.png) + +再看看Violin plot + +```r +# variable和value为矩阵melt后的两列的名字,内部变量, variable代表了点线的属性,value代表对应的值。 +p <- ggplot(data_m, aes(x=variable, y=value),color=variable) + +geom_violin(aes(fill=factor(variable))) + +theme(axis.text.x=element_text(angle=50,hjust=0.5, vjust=0.5)) + +theme(legend.position="none") +p +# 图会存储在当前目录的Rplots.pdf文件中,如果用Rstudio,可以不运行dev.off() +dev.off() +``` + +![]({{ site.img_url }}/splot/boxplot_3.png) + +还有Jitter plot (这里使用的是ggbeeswarm包) + +```r +library(ggbeeswarm) +# 为了更好的效果,只保留其中一个样品的数据 +# grepl类似于Linux的grep命令,获取特定模式的字符串 + +data_m2 <- data_m[grepl("_3", data_m$variable),] + +# variable和value为矩阵melt后的两列的名字,内部变量, variable代表了点线的属性,value代表对应的值。 +p <- ggplot(data_m2, aes(x=variable, y=value),color=variable) + +geom_quasirandom(aes(colour=factor(variable))) + +theme_bw() + theme(panel.grid.major = element_blank(), +panel.grid.minor = element_blank(), legend.key=element_blank()) + +theme(legend.position="none") +# 也可以用geom_jitter(aes(colour=factor(variable)))代替geom_quasirandom(aes(colour=factor(variable))) +# 但个人认为geom_quasirandom给出的结果更有特色 + +ggsave(p, filename="jitterplot.pdf", width=14, height=8, units=c("cm")) +``` + +![]({{ site.img_url }}/splot/boxplot_4.png) + +### 绘制单个基因 (A)的箱线图 + +为了更好的展示效果,下面的矩阵增加了样品数量和样品的分组信息。 + +```r +profile="Name;2cell_1;2cell_2;2cell_3;2cell_4;2cell_5;2cell_6;4cell_1;4cell_2;4cell_3;4cell_4;4cell_5;4cell_6;zygote_1;zygote_2;zygote_3;zygote_4;zygote_5;zygote_6 +A;4;6;7;5;8;6;3.2;5.2;5.6;3.6;7.6;4.8;2;4;3;2;4;2.5 +B;6;8;9;7;10;8;5.2;7.2;7.6;5.6;9.6;6.8;4;6;5;4;6;4.5" + +profile_text <- read.table(text=profile, header=T, row.names=1, quote="",sep=";", check.names=F) + +data_m = data.frame(t(profile_text['A',])) +data_m$sample = rownames(data_m) +# 只挑选显示部分 +# grepl前面已经讲过用于匹配 +data_m[grepl('_[123]', data_m$sample),] +``` + + A sample + 2cell_1 4.0 2cell_1 + 2cell_2 6.0 2cell_2 + 2cell_3 7.0 2cell_3 + 4cell_1 3.2 4cell_1 + 4cell_2 5.2 4cell_2 + 4cell_3 5.6 4cell_3 + zygote_1 2.0 zygote_1 + zygote_2 4.0 zygote_2 + zygote_3 3.0 zygote_3 + +获得样品分组信息 (这个例子比较特殊,样品的分组信息就是样品名字下划线前面的部分) + +```r +# 可以利用strsplit分割,取出其前面的字符串 +# R中复杂的输出结果多数以列表的形式体现,在之前的矩阵操作教程中 +# 提到过用str函数来查看复杂结果的结构,并从中获取信息 +group = unlist(lapply(strsplit(data_m$sample,"_"), function(x) x[1])) +data_m$group = group +data_m[grepl('_[123]', data_m$sample),] +``` + + A sample group + 2cell_1 4.0 2cell_1 2cell + 2cell_2 6.0 2cell_2 2cell + 2cell_3 7.0 2cell_3 2cell + 4cell_1 3.2 4cell_1 4cell + 4cell_2 5.2 4cell_2 4cell + 4cell_3 5.6 4cell_3 4cell + zygote_1 2.0 zygote_1 zygote + zygote_2 4.0 zygote_2 zygote + zygote_3 3.0 zygote_3 zygote + +如果没有这个规律,也可以提到类似于下面的文件,指定样品所属的组的信息。 + +```r +sampleGroup_text="Sample;Group +zygote_1;zygote +zygote_2;zygote +zygote_3;zygote +zygote_4;zygote +zygote_5;zygote +zygote_6;zygote +2cell_1;2cell +2cell_2;2cell +2cell_3;2cell +2cell_4;2cell +2cell_5;2cell +2cell_6;2cell +4cell_1;4cell +4cell_2;4cell +4cell_3;4cell +4cell_4;4cell +4cell_5;4cell +4cell_6;4cell" + +#sampleGroup = read.table(text=sampleGroup_text,sep="\t",header=1,check.names=F,row.names=1) + +#data_m <- merge(data_m, sampleGroup, by="row.names") + +# 会获得相同的结果,脚本注释掉了以免重复执行引起问题。 +``` + +矩阵准备好了,开始画图了 (小提琴图做例子,其它类似) + +```r +# 调整下样品出现的顺序 +data_m$group <- factor(data_m$group, levels=c("zygote","2cell","4cell")) +# group和A为矩阵中两列的名字,group代表了值的属性,A代表基因A对应的表达值。 +# 注意看修改了的地方 +p <- ggplot(data_m, aes(x=group, y=A),color=group) + +geom_violin(aes(fill=factor(group))) + +theme(axis.text.x=element_text(angle=50,hjust=0.5, vjust=0.5)) + +theme(legend.position="none") +p +# 图会存储在当前目录的Rplots.pdf文件中,如果用Rstudio,可以不运行dev.off() +dev.off() +``` + +![]({{ site.img_url }}/splot/boxplot_5.png) + +### 长矩阵绘制箱线图 + +常规矩阵绘制箱线图要求必须是个方正的矩阵输入,而有时想比较的几个组里面检测的值数目不同。比如有三个组,GrpA组检测了6个病人,GrpB组检测了10个病人,GrpC组是12个正常人的检测数据。这时就很难形成一个行位检测值,列为样品的矩阵,长表格模式就适合与这种情况。 + +```r +long_table <- "Grp;Value +GrpA;10 +GrpA;11 +GrpA;12 +GrpB;5 +GrpB;4 +GrpB;3 +GrpB;2 +GrpC;2 +GrpC;3" + +long_table <- read.table(text=long_table,sep="\t",header=1,check.names=F) + +p <- ggplot(data_m, aes(x=Grp, y=Value),color=Grp) + +geom_violin(aes(fill=factor(Grp))) + +theme(axis.text.x=element_text(angle=50,hjust=0.5, vjust=0.5)) + +theme(legend.position="none") +p + +``` + +长表格形式自身就是常规矩阵melt后的格式,这种用来绘制箱线图就很简单了,就不举例子了。 + + +## 箱线图 - 一步绘制 + +绘图时通常会碰到两个头疼的问题: + +1. 有时需要绘制很多的图,唯一的不同就是输入文件,其它都不需要修改。如果用R脚本,需要反复替换文件名,繁琐又容易出错。 (R也有命令行参数,不熟,有经验的可以尝试下) + +2. 每次绘图都需要不断的调整参数,时间久了不用,就忘记参数怎么设置了;或者调整次数过多,有了很多版本,最后不知道用哪个了。 + +为了简化绘图、维持脚本的一致,我用`bash`对绘图命令做了一个封装,通过配置修改命令行参数,生成相应的绘图脚本,然后再绘制。 + +首先把测试数据存储到文件中方便调用。数据矩阵存储在`boxplot.normal.data`、`sampleGroup`和`boxplot.melt.data`文件中 (TAB键分割,内容在文档最后。如果你手上有自己的数据,也可以拿来用)。 + + +使用正常矩阵默认参数绘制箱线图 + +``` +# -f: 指定输入的矩阵文件,第一列为行名字,第一行为header + 列数不限,列名字不限;行数不限,行名字默认为文本 +sp_boxplot.sh -f boxplot.normal.data +``` + +箱线图出来了,但有点小乱。 + +![stat_smooth]({{ site.img_url }}/splot/boxplot_6.png) + +``` +# -f: 指定输入的矩阵文件,第一列为行名字,第一行为header + 列数不限,列名字不限;行数不限,行名字默认为文本 +# -P: none, 去掉legend (uppercase P) +# -b: X-axis旋转45度 +# -V: TRUE 绘制小提琴图 +sp_boxplot.sh -f boxplot.normal.data -P none -b 45 -V TRUE +``` + +![stat_smooth]({{ site.img_url }}/splot/boxplot_7.png) + +绘制单个基因的小提琴图加抖动图 + +``` +# -q: 指定某一行的名字,此处为基因名,绘制基因A的表达图谱 +# -Q: 指定样本分组,绘制基因A在不同样品组的表达趋势 +# -F Group: sampleGroup中第二列的名字,指代分组信息,根据需要修改 +# -J TRUE: 绘制抖动图 jitter plot +# -L: 设置X轴样品组顺序 +# -c TRUE -C "'red', 'pink', 'blue'": 指定每个箱线图的颜色 +sp_boxplot.sh -f boxplot.normal.data -q A -Q sampleGroup -F Group -V TRUE -J TRUE -L "'zygote','2cell','4cell'" -c TRUE -C "'red', 'pink', 'blue'" -P none +``` + +![stat_smooth]({{ site.img_url }}/splot/boxplot_8.png) + +使用melted矩阵默认参数绘箱线图 + +``` +# -f: 指定输入文件 +# -m TRUE: 指定输入的矩阵为melted format +# -d Expr:指定表达值所在的列 +# -F Rep: 指定子类所在列,也就是legend +# -a Group:指定X轴分组信息 +# -j TRUE: jitter plot +sp_boxplot.sh -f boxplot.melt.data -m TRUE -d Expr -F Rep -a Group -j TRUE +``` + +![stat_smooth]({{ site.img_url }}/splot/boxplot_9.png) + +``` +# 如果没有子类,则-a和-F指定为同一值 +# -R TRUE: 旋转boxplot +sp_boxplot.sh -f boxplot.melt.data -m TRUE -d Expr -a Group -F Group -J TRUE -R TRUE +``` + +![stat_smooth]({{ site.img_url }}/splot/boxplot_10.png) + +参数中最需要注意的是**引号**的使用: + +* 外层引号与内层引号不能相同 +* 凡参数值中包括了`空格`,`括号`,`逗号`等都用引号括起来作为一个整体。 + + +为了推广,也为了激起大家的热情,如果想要`sp_boxplot.sh`脚本的,还需要劳烦大家动动手,转发此文章到朋友圈,并留言索取。 + +也希望大家能一起开发,完善功能。 + + +```r +#boxplot.normal.data +Name 2cell_1 2cell_2 2cell_3 2cell_4 2cell_5 2cell_6 4cell_1 4cell_2 4cell_3 4cell_4 4cell_5 4cell_6 zygote_1 zygote_2 zygote_3 zygote_4 zygote_5 zygote_6 +A 4 6 7 5 8 6 3.2 5.2 5.6 3.6 7.6 4.8 2 4 3 2 4 2.5 +B 6 8 9 7 10 8 5.2 7.2 7.6 5.6 9.6 6.8 4 6 5 4 6 4.5 +C 8 10 11 9 12 10 7.2 9.2 9.6 7.6 11.6 8.8 6 8 7 6 8 6.5 +D 10 12 13 11 14 12 9.2 11.2 11.6 9.6 13.6 10.8 8 10 9 8 10 8.5 +E 12 14 15 13 16 14 11.2 13.2 13.6 11.6 15.6 12.8 10 12 11 10 12 10.5 +F 14 16 17 15 18 16 13.2 15.2 15.6 13.6 17.6 14.8 12 14 13 12 14 12.5 +G 15 17 18 16 19 17 14.2 16.2 16.6 14.6 18.6 15.8 13 15 14 13 15 13.5 +H 16 18 19 17 20 18 15.2 17.2 17.6 15.6 19.6 16.8 14 16 15 14 16 14.5 +I 17 19 20 18 21 19 16.2 18.2 18.6 16.6 20.6 17.8 15 17 16 15 17 15.5 +J 18 20 21 19 22 20 17.2 19.2 19.6 17.6 21.6 18.8 16 18 17 16 18 16.5 +L 19 21 22 20 23 21 18.2 20.2 20.6 18.6 22.6 19.8 17 19 18 17 19 17.5 +M 20 22 23 21 24 22 19.2 21.2 21.6 19.6 23.6 20.8 18 20 19 18 20 18.5 +N 21 23 24 22 25 23 20.2 22.2 22.6 20.6 24.6 21.8 19 21 20 19 21 19.5 +O 22 24 25 23 26 24 21.2 23.2 23.6 21.6 25.6 22.8 20 22 21 20 22 20.5 +``` + + + +```r +#boxplot.melt.data + +Gene Sample Group Expr Rep +A zygote_1 zygote 2 1 +A zygote_2 zygote 4 2 +A zygote_3 zygote 3 3 +A zygote_4 zygote 2 4 +A zygote_5 zygote 4 5 +A zygote_6 zygote 2.5 6 +A 2cell_1 2cell 4 1 +A 2cell_2 2cell 6 2 +A 2cell_3 2cell 7 3 +A 2cell_4 2cell 5 4 +A 2cell_5 2cell 8 5 +A 2cell_6 2cell 6 6 +A 4cell_1 4cell 3.2 1 +A 4cell_2 4cell 5.2 2 +A 4cell_3 4cell 5.6 3 +A 4cell_4 4cell 3.6 4 +A 4cell_5 4cell 7.6 5 +A 4cell_6 4cell 4.8 6 +``` + +```r +#sampleGroup +Sample Group +zygote_1 zygote +zygote_2 zygote +zygote_3 zygote +zygote_4 zygote +zygote_5 zygote +zygote_6 zygote +2cell_1 2cell +2cell_2 2cell +2cell_3 2cell +2cell_4 2cell +2cell_5 2cell +2cell_6 2cell +4cell_1 4cell +4cell_2 4cell +4cell_3 4cell +4cell_4 4cell +4cell_5 4cell +4cell_6 4cell +``` + +## Reference + +* {{ site.url }}/2017/06/R-Rstudio + From 71edd4014a6fce58cedc0e80681da297a5212716 Mon Sep 17 00:00:00 2001 From: Dechun Lin Date: Sun, 23 Jul 2017 23:14:33 +0800 Subject: [PATCH 2/3] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ee832b3..3c7e2a0 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ ### s-plot -===== +--- + A simple plot library based on `bash`, `R` mainly `ggplot2` to make the plot easily and flexibly. From 702b937aa93b5a4067e4aa4a401021b80c0754bf Mon Sep 17 00:00:00 2001 From: Dechun Lin Date: Sun, 23 Jul 2017 23:19:45 +0800 Subject: [PATCH 3/3] Update sp_boxplot.sh --- sp_boxplot.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sp_boxplot.sh b/sp_boxplot.sh index 553972d..b528d2a 100755 --- a/sp_boxplot.sh +++ b/sp_boxplot.sh @@ -826,4 +826,4 @@ if [ "$execute" == "TRUE" ]; then if [ "$?" == "0" ]; then /bin/rm -f ${file}${mid}.r fi -fi \ No newline at end of file +fi