#代码参考《R语言数据可视化之美-专业图表绘制指南》例4.2.1,主要代码链接参见
#https://github.com/EasyChart/Beautiful-Visualization-with-R,
#在添加了详细的注释基础上,讨论了mydata数据构建的另一种代码
rm(list = ls())
library(ggplot2)
library(RColorBrewer)
colormap <- colorRampPalette(rev(brewer.pal(11,'Spectral')))(32)
setwd("D:/Program Files/RStudio")
mydata0<-read.csv("Facting_Data.csv",check.names =FALSE)#这里的数据结构是9列数据,第1列为X变量,第2-9列为数据
N<-ncol(mydata0)-1
labels_Y<-colnames(mydata0)[1:N+1]#这里存储了原来的列名
colnames(mydata0)<-c("x",seq(1,N,1))#这里重新定义了mydata0的列名为1-9
mydata<-data.frame(x=numeric(),y=numeric(),variable=character()) #鍒涘缓绌虹殑Data.Frame
for (i in 1:N){
newdata<-data.frame(spline(mydata0[,1],mydata0[,i+1],n=300,method= "natural"))
newdata$variable<-colnames(mydata0)[i+1]
mydata<-rbind(mydata,newdata)
}#mydata有三列数据结构,第1列对应原数据300抽样后的X轴数据,第2列对应原第2-9列数据做300抽样后的数据,故总共数据是
#300*8=2400,第3列对应新的列名
# for (i in 1:N){
# newdata<-cbind.data.frame(mydata0[,1],mydata0[,i+1])
# newdata$variable<-colnames(mydata0)[i+1]
# colnames(newdata)<-c("x","y","variable")
# mydata<-rbind(mydata,newdata)
# }#这是另一种建立mydata的方法,mydata本身是把原来的数据变成按照自变量,因变量与列名(往往是第二自变量)进行分类
#因此制造mydata的方法不限于一种
Step<-5
mydata$offest<--as.numeric(mydata$variable)*Step
mydata$V1_density_offest<-mydata$y+mydata$offest#mydata多加了一列offset,注意这个值正对着原来的列名,原来的步进就是5
#因此step=5不是随便设计的;mydata$V1_density_offest这一列的算法则是第1列数据-5,第2列数据-10,以此把原来值相互接近的
#数据分开
p<-ggplot()#创建一个空的ggplot
for (i in 1:N){
p<-p+ geom_linerange(data=mydata[mydata$variable==i,],aes(x=x,ymin=offest,ymax=V1_density_offest,group=variable,color=y),size =1, alpha =1) +
#对于某个特定的i,data为mydata0对应的那1列对应的300个数据,x轴数据对应mydata的x列,variable=i的这段
#ymin对应mydata的offest列,ymax=V1_density_offest列,这里注意,因为y列原始数据都为正,因此画出的是相对准确的数据条形图,并且group等于做好了分类
#size是条形图的粗细,修改size数值可以获得更好的图形表达效果,color是按原始数据来的,所以是y列,alpha为透明度
geom_line(data=mydata[mydata$variable==i,],aes(x=x, y=V1_density_offest),color="black",size=0.5)
#绘制上边缘为V1_density_offset的上缘线
}
#ggplot() +
# geom_linerange(aes(x=x,ymin=offest,ymax=V1_density_offest,group=variable,color=y),mydata,size =1, alpha =1) +
p+scale_color_gradientn(colours=colormap)+
#geom_line(aes(x, V1_density_offest,group=variable),mydata,color="black")+
scale_y_continuous(breaks=seq(-Step*N,-Step,Step),labels=rev(labels_Y))+
#y的范围是从-40按-5步进,步进到5,标签恢复为原始的从25到60步进
xlab("Time")+
ylab("Class")+
theme(
panel.background=element_rect(fill="white",colour=NA),
panel.grid.major.x = element_line(colour = "grey80",size=.25),
panel.grid.major.y = element_line(colour = "grey60",size=.25),
axis.line = element_blank(),
text=element_text(size=13),
plot.title=element_text(size=15,hjust=.5),
legend.position="right"
)#一系列简单的修图设置