如切如磋,如琢如磨
一、折线图及柱状图
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()