ggplot2学习

xiaoxiao2021-02-27  222

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原理可以参考下面的回答 #https://www.zhihu.com/question/24779017/answer/38750383


分组条形图

##########"dodge"将分组条形图并排; ##########"stacked"堆叠分组条形图; ##########"fill"垂直地堆叠分组条形图并规范其高度相等 p1 <- 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格式的图片 # 参考资料 -------------------------------------------------------------------- #http://docs.ggplot2.org

坐标轴刻度设置

ggplot(data = 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)
转载请注明原文地址: https://www.6miu.com/read-8754.html

最新回复(0)