ggplot


如切如磋,如琢如磨

一、折线图及柱状图

1.1 成果图

1.2 代码

rm(list = ls())
setwd("B:/Temp3")
library(ggplot2)
#ls("package:ggplot2", pattern="^geom_.+")#好东西
library(readxl)
data=read_xlsx("全国疫情整理-李世昱.xlsx")#读取数据

#自定义字体---------------------------------------------
windowsFonts(zhuanshu=windowsFont("迷你繁篆书"))
windowsFonts(foxiti=windowsFont("演示佛系体"))

#读取数据-----------------------------------------------
time<-as.Date(data$报道时间,"%Y-%m-%d",tz = "NZ") #读取时间数据,tz为时区
yuefen=c(data$月份)
quezhen<-c(data$新增确诊) #读取确诊人数数据
chuyuan<-c(data$新增出院) #读取出院人数数据
siwang <-c(data$新增死亡) #读取死亡人数数据
datas=data.frame(新增出院=chuyuan,报道时间=time,
                     月份=yuefen,新增死亡=siwang,确诊人数=quezhen)

#ggplot2.-----------------------------------------------
tiff("全国疫情变化.tif",height = 3900,width = 7850,res = 550,unit="px",compression = "lzw")
plot=ggplot(data = datas,aes(x=报道时间,y=确诊人数,color=factor(月份)))+
  geom_bar(stat="identity",
           aes(x=报道时间,y=确诊人数,fill=报道时间,group=factor(1)),color="white",
           alpha=80,show.legend = FALSE)+#柱状图
  geom_line(aes(x=报道时间,y=确诊人数),size=1,color="red")+
  geom_line(aes(x=报道时间,y=新增出院),size=1)+
  geom_point(aes(x=报道时间,y=确诊人数),size=2.2,shape=2,color="red")+
  geom_point(aes(x=报道时间,y=新增出院),size=2.2,shape=1,color="black")+
  scale_radius(range = c(2,4))+#缩放文本高度,配以aes的size
  scale_color_manual(values = c('red','blue'),labels=c('新增确诊','新增出院'))+
  facet_grid(~月份,scales="free")+#拆分,按月份
  #添加新增确诊数据标签
  geom_text(check_overlap = TRUE,#防覆盖重叠
            aes(x=time,y=确诊人数,
                size=quezhen,#字体大小即数据数值大小,为防止过大,配以scale_radius缩放
                label = 确诊人数,
                vjust = -0.8, hjust = 0.5),
            color="black",#字体颜色
            show.legend=FALSE)#新增确诊人数数据标签

plot+ 
  labs(x="",y="人数(/个)",title="全国1、2月部分疫情情况")+#三个标题
  theme(
    axis.text = element_text(colour = "blue",size = 10),#坐标轴标签
    axis.title.y=element_text(family = "zhuanshu",size=18),#y轴标题
    title=element_text(family = "foxiti",size=16),#整个图表标题
    plot.background = element_rect(fill = "#f2be45"),#正张图的底色,赤金色!
    legend.title=element_blank(),#删除图例名
    legend.text = element_text(family = "zhuanshu", colour="red",size = 15),#图例字体
    legend.position = c(.1,.8),#图例在整个图的位置,x、y方向用(0~1)表示
    legend.justification = c("left", "top"),#图例位置
    legend.box.just = "left",#图例内部要素位置
    legend.margin = margin(6, 6, 6, 6),#图例距离
    legend.box.background = element_rect(),#添加图例矩形
    legend.box.margin = margin(6, 6, 6, 6),#图例内部距离
    legend.key = element_rect(fill = "grey", colour = "black"),#内部要素方框的底色
    strip.background = element_rect(color = "black", fill = "yellow"),#分割表头填充色
    strip.text = element_text(family = "foxiti",size = 13)#分割标题表头字体字号
  )
#ggsave( file = "ggplot2.png",  type = "cairo", dpi = 800)#ggplot2输出 
dev.off()

1.3 用到的数据

报道时间 新增确诊 新增出院 新增死亡 月份
1月11日 41 2 1 01月
1月12日 0 4 0 01月
1月13日 0 1 0 01月
1月16日 0 5 1 01月
1月17日 2 0 0 01月
1月18日 5 4 0 01月
1月19日 17 4 0 01月
1月20日 156 6 2 01月
1月21日 103 0 2 01月
1月22日 231 5 11 01月
1月23日 93 3 0 01月
1月24日 296 6 9 01月
1月25日 490 4 16 01月
1月26日 650 10 14 01月
1月27日 816 9 25 01月
1月28日 1770 15 25 01月
1月29日 1464 41 26 01月
1月30日 1743 29 38 01月
1月31日 2026 46 43 01月
2月1日 2115 74 46 02月
2月2日 2578 102 46 02月
2月3日 2900 136 57 02月
2月4日 3191 211 65 02月
2月5日 3932 258 67 02月
2月6日 3712 279 72 02月
2月7日 3209 443 73 02月
2月8日 3428 467 85 02月
2月9日 2640 738 91 02月
2月10日 2969 515 95 02月
2月11日 2576 669 108 02月
2月12日 2058 790 99 02月
2月13日 15196 1320 254 02月
2月14日 4052 862 14 02月
2月15日 2723 1409 141 02月
2月16日 2110 1258 143 02月
2月17日 2153 1507 105 02月
2月18日 1988 1684 99 02月
2月19日 1848 1832 138 02月
2月20日 901 1901 118 02月
2月21日 1044 1995 120 02月
2月22日 713 2542 112 02月
2月23日 1000 2045 104 02月
2月24日 605 1920 162 02月

1.4 涉及到的其他

ggplot2

官网

超喜欢:

中国传统颜色

……

二、玫瑰图

2.1 他山之石

2.1.1 效果图

2.1.2 R实现

rm(list = ls())
setwd("A:/学习材料/R/COG玫瑰图")
library(ggplot2)

#read.table()--------------------------------------
#读取数据,seq(3)sep
#分开数据的分隔符。默认sep=""。
#read.table()函数可以将1个或多个空格、tab制表符、换行符或回车符作为分隔符。
f<-read.table("cog_lab", header=T, sep="\t")
#展示数据
f

#as.vetor()----------------------------------------
#is.vector(A):判断A是否为向量;
#as.vector(A):如A是矩阵(数组),as.vector就是将矩阵转化为向量;
myLabel = as.vector(f$lab)

#添加百分比!(๑•̀ㅂ•́)و✧
myLabel = paste(myLabel, " (", round(f$mag / sum(f$mag) * 100, 2), "%) ", sep = "")

p<-ggplot(f,
          aes(x=dir,y=factor(mag),fill=dir)
          )+

  ## y轴数据直接来自于原始数据框
  geom_bar(stat='identity')+
  #极坐标转换:可以做出蜘蛛图或饼图的效果。若不设置则默认柱状图
  coord_polar()+

  #标注
  labs(x = "",
       y = "Number of Unigenes",
       title = "COG Function Classification of Unigene Sequence")+

  #axis.ticks坐标轴刻度线---------------------
  theme(axis.ticks = element_blank())+
  #图例标题-----------------------------------
  theme(legend.title = element_blank())+
  #面板背景-----------------------------------
  theme(panel.background=element_blank())+

  #设置颜色标尺
  #breaks设置中断
  #cairo 是一个让用于提供矢量图形绘图的免费库
  scale_fill_discrete(breaks = f$dir,
                      labels = myLabel
                      )
png("Test1.png",width = 8200,height = 5400,res = 600,type = "cairo")
p
dev.off()

2.2.3 控制台及实验数据

数据已通过 f 展示出来。也可以CSV、excel输入。

fir为指标

mag为数据

lab为标签

> rm(list = ls())
> setwd("A:/学习材料/R/COG玫瑰图")
> library(ggplot2)
> 
> #read.table()--------------------------------------
> #读取数据,seq(3)sep
> #分开数据的分隔符。默认sep=""。
> #read.table()函数可以将1个或多个空格、tab制表符、换行符或回车符作为分隔符。
> f<-read.table("cog_lab", header=T, sep="\t")
> #展示数据
> f
   dir mag                                                             lab
1    A   4                             [A] RNA processing and modification
2    B  10                            [B] Chromatin structure and dynamics
3   C   42                            [C] Energy production and conversion
4    D   8    [D] Cell cycle control cell division chromosome partitioning
5    E  38                         [E] Amino acid transport and metabolism
6    F  20                         [F] Nucleotide transport and metabolism
7    G  16                       [G] Carbohydrate transport and metabolism
8    H   8                           [H] Coenzyme transport and metabolism
9    I  27                              [I] Lipid transport and metabolism
10   J  45              [J] Translation ribosomal structure and biogenesis
11   K  30                                               [K] Transcription
12   L  31                        [L] Replication recombination and repair
13   M   9                      [M] Cell wall/membrane/envelope biogenesis
14   N   1                                               [N] Cell motility
15   O  55  [O] Posttranslational modification protein turnover chaperones
16   P  17                      [P] Inorganic ion transport and metabolism
17   Q  28 [Q] Secondary metabolites biosynthesis transport and catabolism
18   R 110                            [R] General function prediction only
19   S   7                                            [S] Function unknown
20   T  36                              [T] Signal transduction mechanisms
21   U  18 [U] Intracellular trafficking secretion and vesicular transport
22   V   3                                          [V] Defense mechanisms
23   Y   1                                           [Y] Nuclear structure
24   Z  10                                                [Z] Cytoskeleton
> 
> #as.vetor()----------------------------------------
> #is.vector(A):判断A是否为向量;
> #as.vector(A):如A是矩阵(数组),as.vector就是将矩阵转化为向量;
> myLabel = as.vector(f$lab)
> 
> #添加百分比!(๑•̀ㅂ•́)و✧
> myLabel = paste(myLabel, " (", round(f$mag / sum(f$mag) * 100, 2), "%) ", sep = "")
> 
> p<-ggplot(f,
+           aes(x=dir,y=factor(mag),fill=dir)
+           )+
+   
+   ## y轴数据直接来自于原始数据框
+   geom_bar(stat='identity')+
+   #极坐标转换:可以做出蜘蛛图或饼图的效果。若不设置则默认柱状图
+   coord_polar()+
+   
+   #标注
+   labs(x = "",
+        y = "Number of Unigenes",
+        title = "COG Function Classification of Unigene Sequence")+
+   
+   #axis.ticks坐标轴刻度线---------------------
+   theme(axis.ticks = element_blank())+
+   #图例标题-----------------------------------
+   theme(legend.title = element_blank())+
+   #面板背景-----------------------------------
+   theme(panel.background=element_blank())+
+   
+   #设置颜色标尺
+   #breaks设置中断
+   #cairo 是一个让用于提供矢量图形绘图的免费库
+   scale_fill_discrete(breaks = f$dir,
+                       labels = myLabel
+                       )
> png("Test2.png",width = 8200,height = 5400,res = 600,type = "cairo")
> p
> dev.off()
null device 
          1 

2.2.4 其中涉及到的函数

round控制小数点位数函数、有效数字倍数signif、设定种子数、……

#round控制小数点位数函数-----
x=3.1415926
round(x,3)

y=0.000000000013
round(y,3)
#有效数字倍数signif----
y=0.0000000000133
signif(y,3)


#ggplot2提供了22个填充色设置的标尺函数(线条颜色也一样)
ls("package:ggplot2", pattern="^scale_fill.+")

#设定种子数------------------------------------------------------
#种子是为了让结果具有重复性。如果不设定种子,生成的随机数无法重现。
set.seed(100)

rm(list = ls())
#在不设定种子数的情况下,随机生成的数不会重复。------------
r=rnorm(10)#随机生成10个随机数
r
r=rnorm(10)#再随机生成10个随机数
r
#设定了种子数后,会重复----------------------------------

set.seed(5)
m=rnorm(10)#再随机生成10个随机数
m
set.seed(5)#必须再设一次,数字相同则会产生相同的随机数。****
n=rnorm(10)
n
#括号里的数字可以是任意数字,相同数字会得到相同的随机数结果。****

? scale_fill_discrete()

输出

> #round控制小数点位数函数-----
> x=3.1415926
> round(x,3)
[1] 3.142
> 
> y=0.000000000013
> round(y,3)
[1] 0
> #有效数字倍数signif----
> y=0.0000000000133
> signif(y,3)
[1] 1.33e-11
> 
> 
> #ggplot2提供了22个填充色设置的标尺函数(线条颜色也一样)
> ls("package:ggplot2", pattern="^scale_fill.+")
 [1] "scale_fill_binned"     "scale_fill_brewer"     "scale_fill_continuous"
 [4] "scale_fill_date"       "scale_fill_datetime"   "scale_fill_discrete"  
 [7] "scale_fill_distiller"  "scale_fill_fermenter"  "scale_fill_gradient"  
[10] "scale_fill_gradient2"  "scale_fill_gradientn"  "scale_fill_grey"      
[13] "scale_fill_hue"        "scale_fill_identity"   "scale_fill_manual"    
[16] "scale_fill_ordinal"    "scale_fill_steps"      "scale_fill_steps2"    
[19] "scale_fill_stepsn"     "scale_fill_viridis_b"  "scale_fill_viridis_c" 
[22] "scale_fill_viridis_d" 
> 
>
> #设定种子数----------------------------------------------------------
> #种子是为了让结果具有重复性。如果不设定种子,生成的随机数无法重现。
> set.seed(100)
> 
> rm(list = ls())
> #在不设定种子数的情况下,随机生成的数不会重复。----------
> r=rnorm(10)#随机生成10个随机数
> r
 [1] -0.50219235  0.13153117 -0.07891709  0.88678481  0.11697127  0.31863009
 [7] -0.58179068  0.71453271 -0.82525943 -0.35986213
> r=rnorm(10)#再随机生成10个随机数
> r
 [1]  0.08988614  0.09627446 -0.20163395  0.73984050  0.12337950 -0.02931671
 [7] -0.38885425  0.51085626 -0.91381419  2.31029682
> #设定了种子数后,会重复-----------------------------------
> set.seed(5)
> m=rnorm(10)#再随机生成10个随机数
> m
 [1] -0.84085548  1.38435934 -1.25549186  0.07014277  1.71144087 -0.60290798
 [7] -0.47216639 -0.63537131 -0.28577363  0.13810822
> set.seed(5)#必须再设一次,数字相同则会产生相同的随机数。****
> n=rnorm(10)
> n
 [1] -0.84085548  1.38435934 -1.25549186  0.07014277  1.71144087 -0.60290798
 [7] -0.47216639 -0.63537131 -0.28577363  0.13810822
> #括号里的数字可以是任意数字,相同数字会得到相同的随机数结果。****

2.2.5 清爽版(无注释)

rm(list = ls())
setwd("A:/学习材料/R/COG玫瑰图")
library(ggplot2)

f<-read.table("cog_lab", header=T, sep="\t")
f
myLabel = as.vector(f$lab)
myLabel = paste(myLabel, " (", round(f$mag / sum(f$mag) * 100, 2), "%) ", sep = "")
p<-ggplot(f,aes(x=dir,y=factor(mag),fill=dir))+geom_bar(stat='identity')+coord_polar()+
labs(x = "",
       y = "Number of Unigenes",
       title = "COG Function Classification of Unigene Sequence")+
  theme(axis.ticks = element_blank())+
  theme(legend.title = element_blank())+
  theme(panel.background=element_blank())+
  scale_fill_discrete(breaks = f$dir,labels = myLabel)
png("COG.png",width = 8200,height = 5400,res = 600,type = "cairo")
p
dev.off()

文章作者: 李世昱
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 李世昱 !
评论
  目录