用R语言绘制y轴不连续的柱形图

本文介绍了如何使用R语言的plotrix包创建不连续y轴的柱形图。该函数允许手动设置断点,并提供平行线和锯齿状线两种样式,可自定义背景颜色、线条样式和角度等。通过示例展示了函数的应用效果。
摘要由CSDN通过智能技术生成

R作图包plotrix提供了不连续y轴(或者称断裂y轴)图形的绘制,原barplot函数的beside参数都不能用,图形也不怎么如意:


library(plotrix)
par(mar = c(3, 3, 1, 1))
par(mgp = c(2, 0.5, 0))
y1 <- c(75, 130, 4, 3, 5, 10, 100, 1, 150, 110)
y2 <- c(60, 120, 3, 8, 6, 12, 100, 2, 180, 90)
plotrix::gap.barplot(rbind(y1, y2), gap = c(15, 50), beside = TRUE, ylab = "Level",
    xlab = "Sample")
## Warning in plot.window(...): "beside"不是图形参数
## Warning in plot.xy(xy, type, ...): "beside"不是图形参数
## Warning in title(...): "beside"不是图形参数
## Warning in axis(1, at = xtics, labels = xaxlab, ...): "beside"不是图形参数
## Warning in axis(2, at = c(ytics[littletics], ytics[bigtics] - gapsize), :
## "beside"不是图形参数



下面是自编的函数。函数可以手动设置断点,也可以由函数自动计算。断点位置的符号表示提供了平行线和zigzag两种,并且可设置背景颜色、大小、线型、平行线旋转角度等。参数使用方法请参看函数说明。

#' 使用R基本绘图函数绘制y轴不连续的柱形图
#'
#' 绘制y轴不连续的柱形图,具有误差线添加功能。断点位置通过btm和top参数设置,如果不设置,函数可自动计算合适的断点位置。
#' @title gap.barplot function
#' @param df 长格式的data.frame,即数据框中每一列为一组绘图数据。
#' @param y.cols 用做柱形图y值的数据列(序号或名称),一列为一组。
#' @param sd.cols 与y值列顺序对应的误差值的数据列(序号或名称)。
#' @param btm 低位断点。如果btm和top均不设置,程序将自动计算和设置断点位置。
#' @param top 高位断点。
#' @param min.range 自动计算断点的阈值:最大值与最小值的最小比值
#' @param max.fold 自动计算断点时最大值与下方数据最大值的最大倍数比
#' @param ratio 断裂后上部与下部y轴长度的比例。
#' @param gap.width y轴断裂位置的相对物理宽度(非坐标轴实际刻度)
#' @param brk.type 断点类型,可设为normal或zigzag
#' @param brk.bg 断点处的背景颜色
#' @param brk.srt 断点标记线旋转角度
#' @param brk.size 断点标记线的大小(长度)
#' @param brk.col 断点标记线的颜色
#' @param brk.lwd 断点标记线的线宽
#' @param cex.error 误差线相对长度,默认为1
#' @param ... 其他传递给R基本绘图函数barplot的参数
#' @return 返回barplot的原始返回值,即柱形图的x坐标
#' @examples
#' datax <- na.omit(airquality)[,1:4]
#' cols <- cm.colors(ncol(datax))
#' layout(matrix(1:6, ncol=2))
#' set.seed(0)
#' for (ndx in 1:6){
      
#'     dt <- datax[sample(rownames(datax), 10), ]
#'     par(mar=c(0.5,2,0.5,0.5))
#'     brkt <- sample(c('normal', 'zigzag'), 1)
#'     gap.barplot(dt, col=cols, brk.type=brkt, max.fold=5, ratio=2)
#' }
#' @author ZG Zhao
#' @export
gap.barplot <- function(df, y.cols = 1:ncol(df), sd.cols = NULL, btm = NULL,
    top = NULL, min.range = 10, max.fold = 5, ratio = 1, gap.width = 1, brk.type = "normal",
    brk.bg = "white", brk.srt = 135, brk.size = 1, brk.col = "black", brk.lwd = 1,
    cex.error = 1, ...) {
      
    if (missing(df))
        stop("No data provid
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值