Suppress x axis in dotchart

110 views
Skip to first unread message

Christoph Ruehlemann

unread,
Feb 20, 2017, 1:15:59 PM2/20/17
to corplin...@googlegroups.com
Hi all,

I can't seem to figure out how to **not** draw the x axis in a dotchart; the usual arguments xaxt="n" (no error message) and axes=F (error message) don't work.
Any suggestions?

Chris

Matías Guzmán Naranjo

unread,
Feb 20, 2017, 1:29:11 PM2/20/17
to corplin...@googlegroups.com
You can't, not with R's function because R is stupid. Use this modified version. I basically uncommented the line that adds the x-axis.


dotchart.new <- function (x, labels = NULL, groups = NULL, gdata = NULL, cex = par("cex"),
                          pt.cex = cex, pch = 21, gpch = 21, bg = par("bg"), color = par("fg"),
                          gcolor = par("fg"), lcolor = "gray", xlim = range(x[is.finite(x)]),
                          main = NULL, xlab = NULL, ylab = NULL, ...)
{
    opar <- par("mai", "mar", "cex", "yaxs")
    on.exit(par(opar))
    par(cex = cex, yaxs = "i")
    if (!is.numeric(x))
        stop("'x' must be a numeric vector or matrix")
    n <- length(x)
    if (is.matrix(x)) {
        if (is.null(labels))
            labels <- rownames(x)
        if (is.null(labels))
            labels <- as.character(1L:nrow(x))
        labels <- rep_len(labels, n)
        if (is.null(groups))
            groups <- col(x, as.factor = TRUE)
        glabels <- levels(groups)
    }
    else {
        if (is.null(labels))
            labels <- names(x)
        glabels <- if (!is.null(groups))
                       levels(groups)
        if (!is.vector(x)) {
            warning("'x' is neither a vector nor a matrix: using as.numeric(x)")
            x <- as.numeric(x)
        }
    }
    plot.new()
    linch <- if (!is.null(labels))
                 max(strwidth(labels, "inch"), na.rm = TRUE)
             else 0
    if (is.null(glabels)) {
        ginch <- 0
        goffset <- 0
    }
    else {
        ginch <- max(strwidth(glabels, "inch"), na.rm = TRUE)
        goffset <- 0.4
    }
    if (!(is.null(labels) && is.null(glabels))) {
        nmai <- par("mai")
        nmai[2L] <- nmai[4L] + max(linch + goffset, ginch) +
            0.1
        par(mai = nmai)
    }
    if (is.null(groups)) {
        o <- 1L:n
        y <- o
        ylim <- c(0, n + 1)
    }
    else {
        o <- sort.list(as.numeric(groups), decreasing = TRUE)
        x <- x[o]
        groups <- groups[o]
        color <- rep_len(color, length(groups))[o]
        lcolor <- rep_len(lcolor, length(groups))[o]
        offset <- cumsum(c(0, diff(as.numeric(groups)) != 0))
        y <- 1L:n + 2 * offset
        ylim <- range(0, y + 2)
    }
    plot.window(xlim = xlim, ylim = ylim, log = "")
    lheight <- par("csi")
    if (!is.null(labels)) {
        linch <- max(strwidth(labels, "inch"), na.rm = TRUE)
        loffset <- (linch + 0.1)/lheight
        labs <- labels[o]
        mtext(labs, side = 2, line = loffset, at = y, adj = 0,
              col = color, las = 2, cex = cex, ...)
    }
    abline(h = y, lty = "dotted", col = lcolor)
    points(x, y, pch = pch, col = color, bg = bg, cex = pt.cex/cex)
    if (!is.null(groups)) {
        gpos <- rev(cumsum(rev(tapply(groups, groups, length)) +
                           2) - 1)
        ginch <- max(strwidth(glabels, "inch"), na.rm = TRUE)
        goffset <- (max(linch + 0.2, ginch, na.rm = TRUE) + 0.1)/lheight
        mtext(glabels, side = 2, line = goffset, at = gpos, adj = 0,
              col = gcolor, las = 2, cex = cex, ...)
        if (!is.null(gdata)) {
            abline(h = gpos, lty = "dotted")
            points(gdata, gpos, pch = gpch, col = gcolor, bg = bg,
                   cex = pt.cex/cex, ...)
        }
    }
    ## axis(1)
    box()
    title(main = main, xlab = xlab, ylab = ylab, ...)
    invisible()
}

--
You received this message because you are subscribed to the Google Groups "CorpLing with R" group.
To unsubscribe from this group and stop receiving emails from it, send an email to corpling-with-r+unsubscribe@googlegroups.com.
To post to this group, send email to corpling-with-r@googlegroups.com.
Visit this group at https://groups.google.com/group/corpling-with-r.
For more options, visit https://groups.google.com/d/optout.

Christoph Ruehlemann

unread,
Feb 20, 2017, 4:41:16 PM2/20/17
to corplin...@googlegroups.com
okay ... er, sure there's no easier way?
But thanks anyway,

Chris

Matías Guzmán Naranjo

unread,
Feb 20, 2017, 4:50:45 PM2/20/17
to corplin...@googlegroups.com
the problem is that teh function in question does not consider any parameters you pass to it regarding x axis, it just adds it with "axis(1)", so you need to remove that. It's quite easy though, save that function to a "function.R" file, and then from your script do "source("function.R").

Matías Guzmán Naranjo

unread,
Feb 20, 2017, 4:51:48 PM2/20/17
to corplin...@googlegroups.com
and then, instead of using dotchart, use dotchart.new, and that should work

2017-02-20 22:50 GMT+01:00 Matías Guzmán Naranjo <morte...@gmail.com>:
the problem is that teh function in question does not consider any parameters you pass to it regarding x axis, it just adds it with "axis(1)", so you need to remove that. It's quite easy though, save that function to a "function.R" file, and then from your script do "source("function.R").
Reply all
Reply to author
Forward
0 new messages