Как отодвинуть метки меток от оси с помощью boxplot () - PullRequest
0 голосов
/ 10 февраля 2019

Вот игрушечный пример для демонстрации:

boxplot(1:90 ~ c({1:90} %% 3),names=c("A","B\nB","C\nC\nC"))

Если вы построите график, вы увидите мотивацию для моего запроса.Я хотел бы переместить метки для галочек для групп от оси.И по моим собственным причинам я не хочу «печатать ничего» и использовать функцию axes () ... вместо этого я хочу знать, как это сделать, передавая параметры подпрограммам, вызываемым boxplot ().Насколько я понимаю, это должно быть выполнимо, но я до сих пор оказался неудачным.

Например, представленное здесь решение слишком не элегантно для моих целей:
R, Изменить расстояние между осямигалочки и метки галочек

anyone Кто-нибудь знает, как это сделать?

1 Ответ

0 голосов
/ 25 февраля 2019

Функция boxplot() после проверки синтаксиса входных аргументов вызывает функцию "bxp".Здесь вы можете увидеть аргументы, которые ему передаются:

if (plot) {
    if (is.null(pars$boxfill) && is.null(args$boxfill)) 
        pars$boxfill <- col
    do.call("bxp", c(list(z, notch = notch, width = width, 
        varwidth = varwidth, log = log, border = border, 
        pars = pars, outline = outline, horizontal = horizontal, 
        add = add, at = at), args[namedargs]))
    invisible(z)
} 

Функция bxp в свою очередь вызывает функцию «axis» и смотрит только на «xaxt», «yaxt», «xaxp»,Аргументы «yaxp», «las», «cex.axis», «col.axis» для рисования оси:

if (axes) {
    ax.pars <- pars[names(pars) %in% c("xaxt", "yaxt", "xaxp", 
        "yaxp", "las", "cex.axis", "col.axis", "format")]
    if (is.null(show.names)) 
        show.names <- n > 1
    if (show.names) 
        do.call("axis", c(list(side = 1 + horizontal, at = at, 
            labels = z$names), ax.pars))
    do.call("Axis", c(list(x = z$stats, side = 2 - horizontal), 
        ax.pars))
}

Как видно из вышесказанного, нет параметров, которые могли бы изменитьсмещение X-меток, которые могут быть переданы в боксплот.

С ggplot по умолчанию отображает метки так, как вы хотите:

df <- data.frame( x= as.factor(c({1:90} %% 3)), y = 1:90 )
ggplot(df,aes(x=x, y=y) ) + 
  geom_boxplot()+ 
  scale_x_discrete(labels=c("A","B\nB","C\nCC\nCCC"))

enter image description here

...