ggplot2学习

网友投稿 788 2022-09-02

ggplot2学习

ggplot2学习

ggplot学习

主要参考学习《R语言实战》,单纯留些记录方便以后自己查找

ggplot2简介

# ggplot2简介 ---------------------------------------------------------------library(ggplot2)#ggplot()初始化图形并且指顶要用到的数据来源(mtcars)和变量(wt、mpg)#geom_添加几何对象,点、线等。具体看help#lab()可以添加注释ggplot(data = mtcars, aes(x = wt, y = mpg)) + geom_point(pch = 17, color = "blue", size = 2) + #三角形、蓝色、2倍大小 geom_smooth( method = "lm", color = "red", linetype = 2, se = FALSE ) + #线性拟合、产生红色虚线、se不产生置信区间 labs(title = "Automobile Data", x = "Weight", y = "Miles Per Gallon")##---几何函数# geom_bar() 条形图 color、 fill、 alpha# geom_boxplot() 箱线图 color、 fill、 alpha、 notch、 width# geom_density() 密度图 color、 fill、 alpha、 linetype# geom_histogram() 直方图 color、 fill、 alpha、 linetype、 binwidth# geom_hline() 水平线 color、 alpha、 linetype、 size# geom_jitter() 抖动点 color、 size、 alpha、 shape# geom_line() 线图 colorvalpha、 linetype、 size# geom_point() 散点图 color、 alpha、 shape、 size# geom_rug() 地毯图 color、 side# geom_smooth() 拟合曲线 method、 formula、 color、 fill、 linetype、 size# geom_text() 文字注解 很多,参见函数的“帮助”# geom_violin() 小提琴图 color、 fill、 alpha、 linetype# geom_vline() 垂线 color、 alpha、 linetype、 size###-----几何函数参数# color 对点、线和填充区域的边界进行着色# fill 对填充区域着色,如条形和密度区域# alpha 颜色的透明度,从0(完全透明)到1(不透明)。# linetype 图案的线条( 1=实线, 2=虚线, 3=点, 4=点破折号, 5=长破折号, 6=双破折号)# size 点的尺寸和线的宽度# shape 点的形状(和pch一样, 0=开放的方形, 1=开放的圆形, 2=开放的三角形,等等),参见图3-4# position 绘制诸如条形图和点等对象的位置。对条形图来说, "dodge"将分组条形图并排, "stacked"堆叠分# 组条形图, "fill"垂直地堆叠分组条形图并规范其高度相等。对于点来说, "jitter"减少点重叠# binwidth 直方图的宽度# notch 表示方块图是否应为缺口( TRUE/FALSE)# sides 地毯图的安置( "b"=底部, "l"=左部, "t"=顶部, "r"=右部, "bl"=左下部,等等)# width 箱线图的宽度

直方图

# 直方图 ---------------------------------------------------------------------data(singer, package="lattice")ggplot(singer, aes(x = height)) + geom_histogram( color = "red",#边框颜色 fill = "yellow",#填充区颜色 alpha = 0.9,#颜色透明度 linetype = 4,#边框线条 size = 0.5,#线宽 binwidth = 0.5#直方图宽度)

箱线图

ggplot(singer, aes(x=voice.part, y=height)) + geom_boxplot()

折线图

注意X轴的数据要转换成因子型

ggplot(data=pic_data,aes(x=pic_data[,1],y=pic_data[,10],group=1))+ geom_line(colour="blue",size=1)+geom_point(colour="red",size=2,shape=17)+ labs(title = paste0(start_date,"至",end_date,"逾期未还占比"), x = "日期",y = "占比")+ geom_text( mapping = aes(label = y_labels), size = 3, colour = 'black', vjust = -0.8, hjust = .5, position = position_dodge(0.9) )+ geom_abline(slope = 0,intercept = averge_nofound,colour="red",size=1)+ Theme

分组

密度图

###密度图data(Salaries, package="car")library(ggplot2)ggplot(data = Salaries, aes(x = salary, color = rank,fill=rank)) + #color边框线,fill填充色 geom_density(alpha = .3) + scale_fill_brewer( type = "seq",palette="Greens") + #指定色系是浅绿到深绿 scale_colour_manual(values=c("red", "yellow", "blue"))#指定边框线

分组密度图方便比较各组数据的分布是否存在差异

交叉分组散点图

ggplot(Salaries, aes( x = yrs.since.phd, y = salary, color = rank, shape = sex )) + geom_point() + scale_colour_manual(values = c("red", "yellow", "blue"))#指定点的颜色#统一整个图层时就放到aes外,想分成不同组调整,并且已经有一个与x、y长度一致的分组变量了,那就放到aes里#shape表示点的形状不同~aes原理可以参考下面的回答#<- ggplot(Salaries, aes(x=rank, fill=sex)) + geom_bar(position="stack") + labs(title='position="stack"') + scale_colour_manual(values=c("yellow", "blue"))p2 <- ggplot(Salaries, aes(x=rank, fill=sex)) + geom_bar(position="dodge") + labs(title='position="dodge"')p3 <- ggplot(Salaries, aes(x=rank, fill=sex)) + geom_bar(position="fill") + labs(title='position="fill"')library(gridExtra)grid.arrange(p1, p2, p3, ncol=3)

图三可以看出比例信息

分组柱形图

daykey <- rep(c("2017-07-01","2017-07-02","2017-07-03"),time=2)data <- c(5,4,3,3,4,5)type <- rep(c("type1","type2"),each=3)pic_data <- data.frame(daykey,data,type)ggplot(data = pic_data, aes(x = daykey, y = data, fill = type)) + geom_bar(position = "dodge", stat = "identity")+ scale_fill_brewer(palette = "YlGnBu")+#黄绿蓝 geom_text(data=pic_data,size=3,vjust=-1,aes(x = daykey, y = data, group = type,label=data),position=position_dodge(0.8))

刻面图

# facet_wrap(~var,ncol=n)# 将每个var水平排列成n列的独立图# facet_wrap(~var,nrow=n)# 将每个var水平排列成n行的独立图# facet_grid(rowvar~colvar)# rowvar和colvar组合的独立图,其中rowvar表示行, colvar表示列# facet_grid(rowvar~.) 每个rowvar水平的独立图,配置成一个单列# facet_grid(.~colvar) 每个colvar水平的独立图,配置成一个单行##歌手的身高分布,把所有声部排成四行data(singer, package="lattice")library(ggplot2)ggplot(data=singer, aes(x=height)) + geom_histogram() + facet_wrap(~voice.part, nrow=4)

##不同声部身高的核密度图ggplot(data = singer, aes(x = height,fill=voice.part)) + geom_density() + facet_wrap( ~ voice.part, nrow =8)

##按照性别分别绘图ggplot(Salaries, aes( x = yrs.since.phd, y = salary, color = rank, shape = rank )) + geom_point() + facet_grid(. ~ sex) + scale_colour_manual(values = c("red", "yellow", "blue"))#指定颜色

拟合光滑曲线

# 拟合光滑曲线 ------------------------------------------------------------------x <- seq(from = -10, to = 10, by = 2)y <- x ^ 2 #plot画平滑曲线图plot(x,y) #plot函数画出散点图splinedata <- spline(x,y,100)#插值函数,有四种方法可选plot(splinedata, type = "l")text(0,50, expression(y == x^2))#添加文本,坐标为(0,50)#ggplot画,并且添加光滑曲线library(ggplot2)ggplot(data = NULL, aes(x = x, y = y)) + geom_point(color = "darkred") + annotate( "text", x = 0 , y = 50, parse = T, label = "y == x^2" ) + #添加注释 geom_smooth(se = F)#geom_smooth()函数 se:是否绘制置信区间;level置信区间水平default0.95;method:平滑函数

其他

# 改变外观 --------------------------------------------------------------------##坐标轴# scale_x_continuous()和scale_y_continuous():# breaks=指定刻度标记, labels=指定刻度标记标签, limits=控制要展示的值的范# 围# scale_x_discrete()和scale_y_discrete():# breaks=对因子的水平进行放置和排序, labels=指定这些水平的标签, limits=表# 示哪些水平应该展示# coord_flip() 颠倒x轴和y轴####改变坐标轴标签P <- ggplot(data=Salaries, aes(x=rank, y=salary, fill=sex)) + geom_boxplot() + scale_x_discrete(breaks=c("AsstProf", "AssocProf", "Prof"), labels=c("Assistant\nProfessor", "Associate\nProfessor", "Full\nProfessor")) + scale_y_continuous(breaks=c(50000, 100000, 150000, 200000), labels=c("$50K", "$100K", "$150K", "$200K"), limits=c(40000,200000)) + labs(title="Faculty Salary by Rank and Sex", x="", y="")P#####图例P + labs(title = "Faculty Salary by Rank and Gender", x = "", y = "", fill = "Gender") + #fill改变图例名称 theme( legend.position = c(.1, .8),#改变图例的位置 plot.title = element_text( size = 15, hjust =0.5, vjust = 1, color="red" ) #改变标题的位置、颜色、字体大小 ) # 在theme 设置中element_text()是一项很重要的内容# element_text(family = NULL, face = NULL, colour = NULL, size = NULL, hjust = NULL, vjust = NULL, angle = NULL, lineheight = NULL)# 参数family 表示字体样式# 参数face 表示字体格式,可取值("plain", "italic", "bold", "bold.italic")# 参数colour 表示字体颜色# 参数size 表示字体大小# 参数hjust 用于调整水平距离,可调整范围0到1之间# 参数vjust 用于调整垂直距离,可调整范围0到1之间# 参数angle 用于调整字体的倾斜度,调整范围0到360# 参数lineheight 表示线条高度##标尺气泡图ggplot(mtcars, aes(x=wt, y=mpg, size=disp)) + #size=disp生成连续性变量disp(发动机排量)的标尺 geom_point(shape=21, color="black", fill="cornsilk") + labs(x="Weight", y="Miles Per Gallon", title="Bubble Chart", size="Engine\nDisplacement")#由图可知,车辆越重、发动机排量越大,每加仑行驶距离越短##改变颜色#改变点的颜色+scale_color_manual(values=c("orange", "olivedrab", "navy"))+scale_color_brewer(palette="Set1")#help(scale_color_brewer)查看具体参数##改变点的形状+scale_shape_manual(values = c( 16, 15))#指定点的形状16圆、15方形#改变填充的颜色+scale_fill_brewer()# 主题 ----------------------------------------------------------------------##可以调整颜色、背景、代码、网格线等。前面有个plot.title的标题修改。后面如果遇到实际的场景再补# 在theme 设置中element_text()是一项很重要的内容# element_text(family = NULL, face = NULL, colour = NULL, size = NULL, hjust = NULL, vjust = NULL, angle = NULL, lineheight = NULL)# 参数family 表示字体样式# 参数face 表示字体格式,可取值("plain", "italic", "bold", "bold.italic")# 参数colour 表示字体颜色# 参数size 表示字体大小# 参数hjust 用于调整水平距离,可调整范围0到1之间# 参数vjust 用于调整垂直距离,可调整范围0到1之间# 参数angle 用于调整字体的倾斜度,调整范围0到360# 参数lineheight 表示线条高度# 多重图 ---------------------------------------------------------------------##画单独的几个图形,需要调用gridExtra包data(Salaries, package="car")library(ggplot2)p1 <- ggplot(data=Salaries, aes(x=rank)) + geom_bar()p2 <- ggplot(data=Salaries, aes(x=sex)) + geom_bar()p3 <- ggplot(data=Salaries, aes(x=yrs.since.phd, y=salary)) + geom_point()library(gridExtra)grid.arrange(p1, p2, p3, ncol=3)# 网格线-------------------------------------------------------------------- mytheme <- theme( plot.title = element_text( size = 15,hjust =0.5, vjust = 1,color="black", face = "bold"), #改变标题的位置、颜色、字体大小 panel.background=element_rect(fill="white", color="black"),# 白色背景,黑色外框 panel.grid.major.y=element_line(color="black", linetype=1),# panel.grid.minor.y=element_blank(), panel.grid.minor.x=element_blank()#垂直方向没有网格线 )# 图形保存 --------------------------------------------------------------------myplot <- ggplot(data=mtcars, aes(x=mpg)) + geom_histogram()ggsave(file="mygraph.png", plot=myplot, width=5, height=4)#在当前路径下将myplot保存为名为mygraph.png的5英寸×4英寸(12.7厘米×10.2厘米) P#NG格式的图片# 参考资料 --------------------------------------------------------------------#= overdue_order, aes(x = timeout_day, y = cumulative_ratio)) + geom_line() + geom_point(colour = "red",size = 2,shape = 17) + scale_y_continuous(limits=c(0,1),breaks=seq(from=0,to=1,by=0.05))+ labs(xlab = overdue_order$timeout_day)

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:五分钟入门文本处理三剑客grep awk sed
下一篇:一个在高并发下财务支付锁的问题分析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~