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原理可以参考下面的回答
#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)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值