#第11章中级绘图(与ggplot2包进行对比)
#散点图
#图1 plot()函数
attach(mtcars)
plot(wt,mpg,
     main="基本散点图",
     xlab="车重",
     ylab="每加仑英里数",pch=15)
abline(lm(mpg~wt),col="red",lwd=2,lty=1)
lines(lowess(wt,mpg),col="blue",lwd=2,lty=2)
#专门针对R,lowess和loess差异很小。这里有一个非常详细的解释:
#https : //support.bioconductor.org/p/2323/

#图2 car::scatterplot
library(car)
car::scatterplot(mpg~wt|cyl,data=mtcars,span=0.75,
                 main="增强散点图",
                 xlab="车重",
                 ylab="每加仑英里数",
                 legend.plot=TRUE,
                 boxplots="xy")
#ggplot2绘制图1
library(ggplot2)
ggplot(aes(x=wt,y=mpg),data = mtcars)+geom_point(shape=16)+
  geom_smooth(method="lm",se=FALSE,col="red",linewidth=1,lty=1)+
  geom_smooth(method="loess",se=FALSE,col="blue",linewidth=1,lty=2)+
  xlab("车重")+ylab("每加仑英里数")

#ggplot2绘制图2
mtcars$cyl <- as.factor(mtcars$cyl)#转化成因子,否则会成为连续性变量,无法分类别绘制
ggplot(aes(x=wt,y=mpg,col=cyl,shape=cyl),data = mtcars)+geom_point()+
  geom_smooth(method="lm",se=FALSE,lty=1)+
  geom_smooth(method="loess",se=FALSE,lty=2)+
  xlab("车重")+ylab("每加仑英里数")

#散点矩阵图
#图3 pairs()函数绘制
pairs(~mpg+disp+drat+wt,data = mtcars,
      main="基本散点图矩阵")

#图4 car::scatterplotMatrix()函数绘制
car::scatterplotMatrix(~mpg+disp+drat+wt,data = mtcars,
                       spread=FALSE,smooth.args=list(lty=2),
                       main="car包创建的散点图矩阵")
detach(mtcars)
#高密度散点图
set.seed(004)
n <- 10000
c1 <- matrix(rnorm(n,mean=0,sd=0.5),ncol=2)
c2 <- matrix(rnorm(n,mean=3,sd=2),ncol=2)
mydata <- rbind(c1,c2)
mydata <- as.data.frame(mydata)
names(mydata) <- c("x","y")
str(mydata)
with(mydata,
     plot(x,y,pch=19,
     main="10000 个观测点的散点图"))

#如何处理数据点重叠导致识别x与y的关系变得异常困难
#方法1 smoothScatter()
with(mydata,smoothScatter(x,y,main="利用光平滑密度估计绘制的散点图",
                          colramp = colorRampPalette(c("white", "black"))))

#方法2 hexbin包中的hexbin函数将二元变量的封箱放到六边形单元格中
library(hexbin)
with(mydata,
     {bin <- hexbin(x,y,xbins=50)
       plot(bin,main="用六边形封箱图展示的各点上\n覆盖观测点数目的散点图")
     })
#ggplot2 扰动点图 箱线图 小提琴图都能解决图形重叠的问题

library(ggplot2)
ggplot(aes(x,y),data = mydata)+geom_jitter()# 扰动点图
ggplot(aes(x,y),data = mydata)+geom_boxplot(col="red",fill="gold")# 箱线图
ggplot(aes(x,y),data = mydata)+geom_violin(fill="pink",col="black")# 小提琴图

#三维散点图
#scatterplot3d 一次性对三个定量变量的交互关系进行可视化
library(scatterplot3d)
with(mtcars,
     scatterplot3d(wt,disp,mpg,
                   pch = 16,
                   highlight.3d=TRUE,#颜色
                   type = "h",#添加连接点与水平面的垂线
                   col.axis = "blue",#3D图外框颜色
                   col.grid = "gold",#网格线颜色
                   main="基本3D scatter图"))

#添加回归面
attach(mtcars)
s3d <- scatterplot3d(wt,disp,mpg,
                     pch = 16,
                     highlight.3d=TRUE, #颜色
                     type = "h", #添加连接点与水平面的垂线
                     main="基本3D scatter图")
fit <- lm(mpg~wt+disp)
s3d$plane3d(fit)

# Hemisphere半球图
temp <- seq(-pi, 0, length = 50)
x <- c(rep(1, 50) %*% t(cos(temp)))
y <- c(cos(temp) %*% t(sin(temp)))
z <- c(sin(temp) %*% t(sin(temp)))
scatterplot3d(x, y, z, highlight.3d = TRUE, angle = 120,
              col.axis = "blue", col.grid = "lightblue", cex.axis = 1.3,
              cex.lab = 1.1, main = "Hemisphere", pch = 20)

#旋转三维散点图
#1 使用rgl::plot3d(x,y,z)
library(rgl)
attach(mtcars)
plot3d(wt,disp,mpg,col = "red",size = 5)

#2 使用car::scatter3d
attach(mtcars)
car::scatter3d(wt,disp,mpg) #默认添加线性平面

#气泡图 先创建一个二维散点图 然后用气泡大小来表示第三个变量的值
attach(mtcars)
symbols(wt,mpg,circles = disp,
        inches = 0.2,#设置最大圆圈的尺寸,默认为1
        fg="black",bg="lightblue",#圆圈的填充色和边沿色
        main = "气泡图")
text(wt,mpg,row.names(mtcars),cex=0.6)#为圆圈添加汽车的名称
detach(mtcars)
#折线图 采用ggplot2绘制
#使用数据集Orange
#三散点图
t1 <- subset(Orange,Tree==1)
str(t1)
p1 <- ggplot(aes(age,circumference),data = t1)+
  geom_point(size=2,col="forestgreen")+
  xlab("Age(days)")+ylab("circumference(mm)")+
  title("Orange Tree 1 Growth")
  
p2 <- ggplot(aes(age,circumference),data = t1)+
  geom_line(linewidth=1,col="forestgreen")+geom_point(size=2.5)+
  xlab("Age(days)")+ylab("circumference(mm)")+
  title("Orange Tree 1 Growth")  
library(cowplot)
plot_grid(p1,p2,ncol=2)

#用pplot2展示物种橘树的生长情况
ggplot(Orange,aes(age,circumference,col=Tree))+
  geom_line(aes(linetype=Tree))+
  geom_point(size=2.5)+
  xlab("Age(days)")+ylab("circumference(mm)")+
  theme(legend.position = c(0.1,0.7))+
  scale_colour_manual(values = c("red","blue","black","grey","gold"))+
  ggtitle("Orange Tree 1 Growth")+
  theme_bw() #背景透明

#有关背景的代码
p <- ggplot(Orange,aes(age,circumference,col=Tree))  
p=p+theme_bw()#背景透明
p=p+theme(panel.grid.major = element_blank())#去掉主刻度
p=p+theme(panel.grid.minor = element_blank())#去掉次刻度
p=p+theme(panel.border = element_blank())#去掉外框线
#一次性实现透明 去掉主次刻度和外框线
p=p+theme(panel.background = element_rect(fill = "transparent"))

#相关图
options(digits = 2)
str(mtcars)
mtcars$cyl <- as.numeric(mtcars$cyl)
cor(mtcars)
library(corrgram) 
#表达式 corrgram(x,order=,panel=,text.panel=,diag.panel=)
corrgram::corrgram(mtcars,
                   order = TRUE,#order = TRUE矩阵行和列通过主成分分析法进行重排序
                   lower.panel = panel.shade,
                   upper.panel = panel.pie,
                   text.panel = panel.txt,
                   main = "mtcars各变量相关系数图")
#颜色表示相关性 越深相关性越大
#左下角:蓝色和↗表示两个变量呈正相关 红色和↘表示两个变量呈负相关
#右上角:从12点方向开始 正相关性顺时针 负相关性逆时针
#panel=有不同选择 panel.ellipse panel.pts panel.conf

corrgram::corrgram(mtcars,
                   order = TRUE,#order = TRUE矩阵行和列通过主成分分析法进行重排序
                   lower.panel = panel.pts,
                   upper.panel = panel.ellipse,
                   text.panel = panel.txt,
                   main = "mtcars各变量相关系数图")

#控制颜色
cols <- colorRampPalette(c("gold","red","green","blue"))
corrgram::corrgram(mtcars,col.regions = cols,
                   order = TRUE,#order = TRUE矩阵行和列通过主成分分析法进行重排序
                   lower.panel = panel.pie,
                   upper.panel = NULL,
                   text.panel = panel.txt,
                   main = "mtcars各变量相关系数图")
#ggplot2给热图添加显著性标记
library(tidyverse)
library(magrittr)
library(Hmisc)
#定义函数
cors <- function(df) {
  m <- Hmisc::rcorr(as.matrix(df)) 
  mdf <- map(m, ~data.frame(.x)) 
  return(mdf)
}

df_cor <- function(df){
  cors(df) %>% 
    map(~rownames_to_column(.x, var="ID1")) %>%
    map(~pivot_longer(.x, -ID1,"ID2")) %>%
    bind_rows(.id = "id") %>%
    pivot_wider(names_from = id, values_from = value) %>% 
    mutate(p_if = ifelse(P <.05, P, NA), # P <0.05 返回P值
           r_if = ifelse(P <.05, r, NA),        # p <0.05 返回r值
           p_signif=symnum(P, corr = FALSE, na = FALSE,  
                           cutpoints = c(0, 0.01, 0.05, 0.1, 1), 
                           symbols = c("**", "*", ".", " ")))   # 将P值转化为*
}  
#计算相关性
corda <- df_cor(mtcars) %>% select(1,2,3) %>% 
  pivot_wider(.,names_from = ID2,values_from = r) %>% 
  column_to_rownames(var="ID1")

corda[upper.tri(corda)] <- NA # 取上部分
#导出相关性表格
corda %>% write.table(file="cor.xls",sep="\t",quote = F,col.names = NA)
#导出p_value
P_value <- df_cor(mtcars) %>% select(1,2,P) %>% 
  pivot_wider(.,names_from = ID2,values_from = P) %>% 
  column_to_rownames(var="ID1")

P_value[upper.tri(P_value)] <- NA

P_value %>% write.table(file="P_value.xls",sep="\t",quote = F,col.names = NA)
#数据整合
p <- corda %>% rownames_to_column(var="ID1") %>% 
  pivot_longer(-ID1) %>% drop_na() %>% 
  set_colnames(c("ID1","ID2","Pearson's\nCorrclation")) %>% 
  left_join(.,df_cor(mtcars) %>% select(1,2,p_signif),by=c("ID1","ID2"))

p$ID1 <- factor(p$ID1,levels = unique(p$ID1))
p$ID2 <- factor(p$ID2,levels = unique(p$ID2))
#数据可视化 绘图
p %>% ggplot(aes(ID1,ID2,color=`Pearson's\nCorrclation`,fill=`Pearson's\nCorrclation`)) +
  geom_tile(col="grey", fill="white",size=0.2)+
  geom_point(aes(size = abs(`Pearson's\nCorrclation`)),shape=21)+
  geom_text(aes(label=p_signif),size=5,color="white",hjust=0.5,vjust=0.7)+
  labs(x = NULL, y = NULL)+ 
  theme(axis.text.y=element_text(color="black",face="bold",family="Tims"),
        panel.grid = element_blank(),
        axis.ticks = element_blank(),
        panel.background = element_blank(),
        axis.text.x=element_text(color="black",face="bold",family="Tims",angle = 90,vjust=0.5,hjust=1),
        legend.title = element_text(color="black",family="Tims",face="bold",size=8),
        legend.text=element_text(color="black",size=8))+
  scale_color_gradientn(colours = RColorBrewer::brewer.pal(11,"RdBu"))+
  scale_fill_gradientn(colours = RColorBrewer::brewer.pal(11,"RdBu"))+
  scale_x_discrete(expand=c(0,0),position = "bottom") +
  scale_y_discrete(expand=c(0,0),position="right")+
  scale_size(range=c(1,8), guide=NULL)+
  guides(color = guide_colorbar(direction = "vertical",reverse = F,barwidth = unit(.5, "cm"),
                                barheight = unit(7.2,"cm")))

#马赛克图 以Titanic数据集为例
library(vcd)
ftable(Titanic)
vcd::mosaic(~Class+Sex+Age+Survived,data=Titanic,shade=TRUE,legend=TRUE)
#根据模拟模型的皮尔逊残差值对图形上色

#ggplot2给热图添加显著性标记代码来源
#https://mp.weixin.qq.com/s/omJcvlxfiXZzLbqKIp_3yA

R语言实战-第十一章中级绘图(与ggplot2包进行对比)相关推荐

  1. R语言实战笔记--第九章 方差分析

    R语言实战笔记–第九章 方差分析 标签(空格分隔): R语言 方差分析 术语 组间因子,组内因子,水平:组间因子和组同因子的区别是,组间因子对所有测试对象进行分组,而组内因子则把所有测试对象归为同一组 ...

  2. R语言实战 前三章 统计 数据框 经典画图

    目录 导论 案例1 stat 案例2 packages 第一章 R语言介绍 基本的操作命令 保存图片 第二章 创建数据集 2.1. 合并 2.2. 向量 2.2.1. 赋值 2.2.2. 删除 2.2 ...

  3. R语言实战第一,二章SQL版

    星辰大海 这是之前使用R语言完成的一道简单的数据统计题目链接: https://zhuanlan.zhihu.com/p/27092971 完成之后心理还是有点小得意的.但和答案一对比就发现问题了,自 ...

  4. r 语言 ggplot上添加平均值_R语言中ggplot2包作数据分布情况下的统计图实例学习(一)

    1.小提琴图 小提琴图可以可视化一组或几组数字变量的分布. 问题:您想制作一个小提琴图来比较不同组的密度估计.用gcookbook包与ggplot2包分别绘制. 解决问题: 使用geom_violin ...

  5. R语言实战-第十七章 R in action-chapter17

    本章目的:基于一组预测变量预测一个分类结果 (如:根据关键词.图像.来源等判断一份邮件是否是病毒邮件) 本章用到的package: #rpart rpart.plot party 实现决策树模型及其可 ...

  6. 《时间序列分析及应用.R语言》第十一章阅读笔记

    第11章 11.1干预分析 library(TSA) win.graph(width = 4.875,height = 2.5,pointsize = 8) data(airmiles) plot(l ...

  7. R语言 数据挖掘:R语言实战 第六章 关联分析

    关注微信公共号:小程在线 关注CSDN博客:程志伟的博客 举例说明关联规则里面的核心概念--支持度.置信度.提升度 假设有10000个消费者,购买了1000个尿布,2000个啤酒,500个面包,这其中 ...

  8. R语言实战-读书笔记(第1 章 R语言介绍)

    *R语言实战所有学习笔记,如涉及侵权,请联系撤稿.* **标题号与书中标题号对应** R语言实战 第1章 R语言介绍     1.2 R的获取与安装         R可以在CRAN(Comprehe ...

  9. R语言实战笔记--第十四章 主成分和因子分析

    R语言实战笔记–第十四章 主成分和因子分析 标签(空格分隔): R语言 主成分分析 因子分析 原理及区别 主成分分析与因子分析很接近,其目的均是为了降维,以更简洁的数据去解释结果,但这两种方法其实是相 ...

  10. R语言mad(c(1 2 3 4)),R语言--数据管理-R语言实战笔记-第四五章

    第四.第五章都是说的数据管理,合并在一起做个总结,在个人看来,数据管理是一件非常繁琐的事情,但是,每个统计的前提都是一个合适的数据样本,对的,"合适",做到合适可不是一个简单的事情 ...

最新文章

  1. How to Use tomcat on Linux
  2. 吴恩达老师深度学习视频课笔记:构建机器学习项目(机器学习策略)(1)
  3. modbus报文解析实例_万字长文!春招面试总结,鹅厂T3Android高频面试真题+解析...
  4. java中executeQuery()方法
  5. .net 简单实现MD5
  6. 文本编辑器实现复制、剪切、粘贴、撤销、重做操作
  7. 宜昌宝塔河项目_宜昌城区首个垃圾分类定时定点投放点启用 厨余垃圾破袋投放...
  8. LeetCode 1219. 黄金矿工(回溯)
  9. python中if控制语句_Python中流程控制语句之IF语句
  10. Android TextView文字横向自动滚动(跑马灯)
  11. 多校#5-1005-Instring-HDU5785-manacher+维护
  12. 餐饮为什么很难做到薄利多销?
  13. 在云上搭建大规模实时数据流处理系统
  14. Linux命令行打开不了发行光盘RHEL_6.3 i386 Disc 1
  15. 使用PL/SQL Developer 远程连接Oracle数据库出现 “无监听程序“错误 的解决办法
  16. 《Kotlin从零到精通Android开发》面世啦
  17. 虚拟机上装oracle,cmd窗口输入法有问题,按了U,I,O,P,J,K,L,M这些键为什么不是UIOPJK
  18. 大话设计模式系列之面向对象基础(一)
  19. PyCharm使用技巧:Ctrl + /(多行注释)
  20. python函数参数用法之——双星号

热门文章

  1. 瞄准视频版权检测算法,爱奇艺CCF大数据与计算智能大赛开题了
  2. 基于Java语言完成:使用URL下载指定的文件保存到指定的文件夹中
  3. 《产品经理必懂的技术那点事儿》读书笔记
  4. 访学有感------------南京访学一周小记
  5. 【sql:练习题2】查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩...
  6. 20190221——周婕纶 Intellijidea Project structureTomcat
  7. 等保2.0 Linux主机测评
  8. 2021年全球乳果糖浓溶液收入大约154.7百万美元,预计2028年达到172百万美元
  9. 软件测试/测试开发丨app自动化测试之Appium WebView 技术原理
  10. 供应商维护银行帐户的一点心得