数据可视化——R语言使用ggplot2工具包绘制分面的曲线图
概述:R语言使用ggplot2工具包绘制分面的曲线图,即依据数据的不同属性进行分面显示,并详细设置了不同绘图参数,使得绘制的图形更美观。
使用工具:R语言中的ggplot2工具包, RcolorBrewer颜色工具包
RcolorBrewer包在我之前的博客有介绍,请参考:数据可视化——R语言使用ggplot2工具包绘制精美的条形图(https://blog.csdn.net/zhouhucheng00/article/details/85801297)
下面展示一个我的示例,主要是对各种绘图参数进行了仔细设置,使得图形更美观。示例中的数据为模拟生成的。模拟数据包括两个组别group1和group2,每个组别5个属性(Attribute_1到 Attribute_5),每个组别的每个属性都有相应的横(X_value)纵(Y_value)坐标的值。
代码如下:
rm(list=ls()) #清除工作区
library(ggplot2)
library(RColorBrewer)
#生成模型数据
Group <- c(rep("group1",30),rep("group2",30))
Attribute <- c(rep("Attribute_1",10),rep("Attribute_2",10),rep("Attribute_3",10),
rep("Attribute_1",10),rep("Attribute_2",10),rep("Attribute_3",10))
X_value <- rep(1:10,6)
Y_value <- c(1:10+rnorm(10),1:10+rnorm(10),1:10+rnorm(10),seq(2,21,by=2)+rnorm(10),seq(2,21,by=2)+rnorm(10),seq(2,21,by=2)+rnorm(10))
Data <- data.frame(Group=Group,Attribute=Attribute,X_value=X_value,Y_value=Y_value)
P <- ggplot(Data,aes(x=X_value,y=Y_value))+
facet_wrap(~Attribute,ncol=3,scales ="free_y")+ #依据Attribute进行分面绘制,ncol=3表示分三列显示,scales ="free_y"表示三个分面的Y轴范围不固定,即依据各自的数据自动分配Y轴的显示范围
geom_line(aes(color=Group),size=2)+ #绘制曲线,线的颜色由Group指定,宽度size=2
# coord_cartesian(xlim = c(0, 10))+ #限定X轴的显示范围
scale_color_manual(values = brewer.pal(12, "Paired")[c(3,5)])+ #指定下线的颜色
theme_bw()+ #让刻度线和网格线的颜色更协调一些
theme(axis.text.x=element_text(family="Times",size=14,face="plain"), #x轴刻度的数字属性设置,family指定字体簇,size指定大小,face指定字体样式(如正常/斜体/粗体等)
axis.text.y=element_text(family="Times",size=14,face="plain"), #Y轴刻度的数字属性设置
axis.title.x=element_text(family="Times",size = 16,face="bold.italic"), #x轴的标题字体属性设置
axis.title.y=element_text(family="Times",size = 16,face="bold.italic"), #x轴的标题字体属性设置
strip.text=element_text(family="Times",size = 18,face="italic"), #分面的标题字体属性设置(即对应Attribute_1,Attribute_2,Attribute_3)
panel.border = element_blank(),axis.line = element_line(colour = "black",size=0.6),#背景色置为白色,并将x=0轴和y=0轴加粗显示(size=,0.6)
legend.text=element_text(face="italic", family="Times", colour="black", #设置图例的子标题的字体属性
size=14),
legend.title=element_text(face="italic", family="Times", colour="black", #设置图例的总标题的字体属性
size=16))+
ylab("Value")+xlab("Percentage(%)") #指定x轴和y轴的标题
P
jpeg(file = "results_Value.jpg",width =4500,height = 1500,units = "px",res =300) #结果保存保存为results_Value.jpg,宽高为4500*1500像素,分辨率为300dpi
print(P)
dev.off()
效果图如下:
ggplot2中的facet_wrap()可以依据两个因子变量:变量变量(行列)设置出不同的分面效果,本例中facet_wrap(~Attribute)表示依据Attribute变量进行按列的分面进行显示。
ggplot2中的coord_cartesian()可以限定x和y的数据显示的范围。