• 边际图和组合折线图


    边际图和组合折线图

    #加载 R 包,其中 ggplot2 用于作图,gtable 用于提取图像属性,grid 用于合并图像
    library(ggplot2)
    library(gtable)
    library(grid)

    定义函数,用于组合 ggplot2 绘图结果构建双坐标轴,参考自:

    https://stackoverflow.com/questions/36754891/ggplot2-adding-secondary-y-axis-on-top-of-a-plot

    y2_plot <- function(p1, p2) {
    p1 <- ggplotGrob(p1)
    p2 <- ggplotGrob(p2)

    Get the location of the plot panel in p1.

    These are used later when transformed elements of p2 are put back into p1

    pp <- c(subset(p1$layout, name == ‘panel’, se = t:r))

    Overlap panel for second plot on that of the first plot

    p1 <- gtable_add_grob(p1, p2 g r o b s [ [ w h i c h ( p 2 grobs[[which(p2 grobs[[which(p2layout n a m e = = ′ p a n e l ′ ) ] ] , p p name == 'panel')]], pp name==panel)]],ppt, pp l , p p l, pp l,ppb, pp$l)

    Then proceed as before:

    ggplot contains many labels that are themselves complex grob;

    usually a text grob surrounded by margins.

    When moving the grobs from, say, the left to the right of a plot,

    Make sure the margins and the justifications are swapped around.

    The function below does the swapping.

    Taken from the cowplot package:

    https://github.com/wilkelab/cowplot/blob/master/R/switch_axis.R

    hinvert_title_grob <- function(grob){

    # Swap the widths
    widths <- grob$widths
    grob$widths[1] <- widths[3]
    grob$widths[3] <- widths[1]
    grob$vp[[1]]$layout$widths[1] <- widths[3]
    grob$vp[[1]]$layout$widths[3] <- widths[1]
    
    # Fix the justification
    grob$children[[1]]$hjust <- 1 - grob$children[[1]]$hjust 
    grob$children[[1]]$vjust <- 1 - grob$children[[1]]$vjust 
    grob$children[[1]]$x <- unit(1, 'npc') - grob$children[[1]]$x
    grob
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    }

    Get the y axis title from p2

    index <- which(p2 l a y o u t layout layoutname == ‘ylab-l’) # Which grob contains the y axis title?
    ylab <- p2$grobs[[index]] # Extract that grob
    ylab <- hinvert_title_grob(ylab) # Swap margins and fix justifications

    Put the transformed label on the right side of p1

    p1 <- gtable_add_cols(p1, p2 w i d t h s [ p 2 widths[p2 widths[p2layout[index, ] l ] , p p l], pp l],ppr)
    p1 <- gtable_add_grob(p1, ylab, pp t , p p t, pp t,ppr + 1, pp b , p p b, pp b,ppr + 1, clip = ‘off’, name = ‘ylab-r’)

    Get the y axis from p2 (axis line, tick marks, and tick mark labels)

    index <- which(p2 l a y o u t layout layoutname == ‘axis-l’) # Which grob
    yaxis <- p2$grobs[[index]] # Extract the grob

    yaxis is a complex of grobs containing the axis line, the tick marks, and the tick mark labels.

    The relevant grobs are contained in axis$children:

    axis$children[[1]] contains the axis line;

    axis$children[[2]] contains the tick marks and tick mark labels.

    First, move the axis line to the left

    yaxis c h i l d r e n [ [ 1 ] ] children[[1]] children[[1]]x <- unit.c(unit(0, ‘npc’), unit(0, ‘npc’))

    Second, swap tick marks and tick mark labels

    ticks <- yaxis c h i l d r e n [ [ 2 ] ] t i c k s children[[2]] ticks children[[2]]tickswidths <- rev(ticks w i d t h s ) t i c k s widths) ticks widths)ticksgrobs <- rev(ticks$grobs)

    Third, move the tick marks

    ticks g r o b s [ [ 1 ] ] grobs[[1]] grobs[[1]]x <- ticks g r o b s [ [ 1 ] ] grobs[[1]] grobs[[1]]x - unit(1, ‘npc’) + unit(3, ‘pt’)

    Fourth, swap margins and fix justifications for the tick mark labels

    ticks g r o b s [ [ 2 ] ] < − h i n v e r t t i t l e g r o b ( t i c k s grobs[[2]] <- hinvert_title_grob(ticks grobs[[2]]<hinverttitlegrob(ticksgrobs[[2]])

    Fifth, put ticks back into yaxis

    yaxis$children[[2]] <- ticks

    Put the transformed yaxis on the right side of p1

    p1 <- gtable_add_cols(p1, p2 w i d t h s [ p 2 widths[p2 widths[p2layout[index, ] l ] , p p l], pp l],ppr)
    p1 <- gtable_add_grob(p1, yaxis, pp t , p p t, pp t,ppr + 1, pp b , p p b, pp b,ppr + 1, clip = ‘off’, name = ‘axis-r’)
    grid.newpage()
    grid.draw(p1)
    }

    #使用的 R 自带的 mtcars 数据集,绘制“mpg-disp”与“mpg-drat”折线图,并尝试组合展示
    #“mpg-disp”的折线图
    p1 <- ggplot(mtcars, aes(mpg, disp)) +
    geom_line(color = ‘blue’) +
    theme(panel.grid = element_blank(), panel.background = element_rect(fill = NA, color = ‘black’),
    axis.text.y = element_text(color = ‘blue’), axis.ticks.y = element_line(color = ‘blue’),
    axis.title.y = element_text(color = ‘blue’)) +
    labs(y = ‘disp’)

    p1

    #“mpg-drat”的折线图
    p2 <- ggplot(mtcars, aes(mpg, drat)) +
    geom_line(color = ‘red’) +
    theme(panel.grid = element_blank(), panel.background = element_rect(fill = NA, color = ‘black’),
    axis.text.y = element_text(color = ‘red’), axis.ticks.y = element_line(color = ‘red’),
    axis.title.y = element_text(color = ‘red’)) +
    labs(y = ‘drat’)

    p2

    #两张图共用同一 x 轴,尝试组合到一起,组合后默认第一张图的 y 轴在左侧,第二张图的 y 轴在右侧
    y2_plot(p1, p2)

    #输出图片
    ggsave(‘p12.pdf’, y2_plot(p1, p2)[2], width = 5, height = 4)
    ggsave(‘p12.png’, y2_plot(p1, p2), width = 5, height = 4)

    setwd(“C:\Users\dell\Desktop”)
    mtcarss=read.csv(“RF.csv”)

    mtcarss

    #使用的 R 自带的 mtcars 数据集,绘制“mpg-disp”与“mpg-drat”折线图,并尝试组合展示
    #“mpg-disp”的折线图
    p1 <- ggplot(mtcarss, aes(Year, PPM)) +
    geom_line(color = ‘blue’) +
    theme(panel.grid = element_blank(), panel.background = element_rect(fill = NA, color = ‘black’,size=1.5),
    axis.text.y = element_text(size=16,color = ‘blue’), axis.ticks.y = element_line(color = ‘blue’),
    axis.title.y = element_text(size=16,color = ‘blue’),axis.text.x = element_text(size=16,color = ‘black’) , axis.title.x = element_text(size=16,color = ‘black’)) +geom_line( color = ‘blue’,size=1)+
    labs(y = ‘PPM’)

    p1

    #“mpg-drat”的折线图
    p2 <- ggplot(mtcarss, aes(Year,temp )) +
    geom_line(color = ‘red’) +
    theme(panel.grid = element_blank(), panel.background = element_rect(fill = NA, color = ‘black’,size=1.5),
    axis.text.y = element_text(size=16,color = ‘red’), axis.ticks.y = element_line(color = ‘red’),
    axis.title.y = element_text(size=16,color = ‘red’),axis.text.x = element_text(size=16,color = ‘black’) , axis.title.x = element_text(size=16,color = ‘black’)) +geom_line( color = ‘red’,size=1)+
    labs(y = ‘temp’)

    p2

    #两张图共用同一 x 轴,尝试组合到一起,组合后默认第一张图的 y 轴在左侧,第二张图的 y 轴在右侧
    y2_plot(p1, p2)

    #输出图片
    ggsave(‘p12.pdf’, y2_plot(p1, p2), width = 5, height = 4)
    ggsave(‘p121.png’, y2_plot(p1, p2), width = 5, height = 4)

    /R语言基本功:绘制带边际图的散点图
    刘老师医学统计 2020-08-25 20:35

    #install.packages(“ggpubr”) # 安装包
    library(ggpubr) # 加载包
    data(iris) # 加载数据集
    View(iris) # 预览数据集

    plots <- ggscatterhist(iris, # 包含绘图变量的数据集
    x = “Sepal.Length”, y = “Sepal.Width”, # 绘图变量
    color = “#00AFBB”, # 设置颜色
    margin.params = list(fill = “#00AFBB”)) # 设置边际图的颜色

    plots <- ggscatterhist(iris, # 包含绘图变量的数据集
    x = “Sepal.Length”, y = “Sepal.Width”, # 绘图变量
    color = “#00AFBB”, # 设置颜色
    margin.plot = “histogram”, # 设置边际图的类型
    margin.params = list(fill = “#00AFBB”)) # 设置边际图的颜色

    plots s p < − p l o t s sp <- plots sp<plotssp + # sp为散点图主图
    geom_hline(yintercept = 3, linetype = “dashed”, color = “blue”) +
    geom_vline(xintercept = 6, linetype = “dashed”, color = “red”)
    plots

    plots s p < − p l o t s sp <- plots sp<plotssp +
    stat_smooth(method=lm)
    plots

    model <- lm(Sepal.Length ~ Sepal.Width, iris)
    summary(model)

    plots s p < − p l o t s sp <- plots sp<plotssp +
    annotate(“text”, x=4.7, y=4.4, parse=TRUE,
    label=“r^2 == 0.0138 * ’ p-value = 0.1529’”)
    plots

    ggscatterhist(
    iris, x = “Sepal.Length”, y = “Sepal.Width”,
    color = “Species”, size = 2.5, alpha = 0.5,
    palette = c(“#00AFBB”, “#E7B800”, “#FC4E07”),
    margin.params = list(fill = “Species”, color = “black”, size = 0.2)
    )

    ggscatterhist(
    iris, x = “Sepal.Length”, y = “Sepal.Width”,
    color = “Species”, size = 3, alpha = 0.6,
    palette = c(“#00AFBB”, “#E7B800”, “#FC4E07”),
    margin.plot = “histogram”,
    ggtheme = theme_bw()
    )

    setwd(“C:\Users\dell\Desktop”)

    library(ggpubr)
    ggscatterhist(iris,
    x = “Sepal.Length”,
    y = “Sepal.Width”)

    ggscatterhist(iris,
    x = “Sepal.Length”,
    y = “Sepal.Width”,
    color = “Species”,
    size=4,
    palette = c(“#00AFBB”, “#E7B800”, “#FC4E07”),
    margin.plot = “boxplot”,
    ggtheme = theme_bw(),
    margin.params = list(fill=“Species”))

    #https://www.jianshu.com/p/ec9e39362f24

    ##https://www.jianshu.com/p/ece7c8848fd9

    Import the data

    file_path <- “http://www.sthda.com/sthda/RDoc/data/housetasks.txt”
    housetasks <- read.delim(file_path, row.names = 1)

    head(housetasks)
    chisq <- chisq.test(housetasks)

    ggballoonplot(housetasks,
    fill = “value”,
    size.range = c(1,15))+
    scale_fill_viridis_c(option = “C”)

  • 相关阅读:
    [ vulhub漏洞复现篇 ] ActiveMQ任意文件写入漏洞CVE-2016-3088
    Thingsboard源码安装
    C#,动态规划(DP)模拟退火(Simulated Annealing)算法与源代码
    【JavaEE】_Spring MVC项目之使用对象传参
    python中datetime和time的区别,我学了一周整理的
    《统计学习方法》第四章总结与习题
    Debian 搭建 WireGuard 服务端
    Object.entries方法的使用
    三维地图开发平台-支持离线地图开发
    Linux之sudo自动输入密码
  • 原文地址:https://blog.csdn.net/qq_39306047/article/details/127850704