Нарисуйте вертикальное окончание линии бара ошибки в точечной диаграмме - PullRequest
5 голосов
/ 27 февраля 2012

Я рисую dotplot(), используя lattice или Dotplot(), используя Hmisc. Когда я использую параметры по умолчанию, я могу построить график ошибок без маленьких вертикальных окончаний

- о -

но я бы хотел получить

| -О- |

Я знаю, что могу получить

| -О- |

когда я использую centipede.plot () из plotrix или segplot () из latticeExtra, но эти решения не дают мне таких хороших опций кондиционирования, как Dotplot(). Я пытался поиграть с par.settings из plot.line, который хорошо работает для изменения цвета линии ошибок, ширины и т. Д., Но до сих пор мне не удалось добавить вертикальные окончания:

require(Hmisc)
mean = c(1:5)
lo = mean-0.2
up = mean+0.2
d = data.frame (name = c("a","b","c","d","e"), mean, lo, up)
Dotplot(name ~ Cbind(mean,lo,up),data=d,ylab="",xlab="",col=1,cex=1,
        par.settings = list(plot.line=list(col=1),
                       layout.heights=list(bottom.padding=20,top.padding=20)))

enter image description here

Пожалуйста, не давайте мне решения, использующие ggplot2 ...

1 Ответ

6 голосов
/ 27 февраля 2012

У меня была такая же потребность в прошлом, с barchart() вместо Dotplot().

Тогда я решил создать настраиваемую функцию панели, которая: (1) сначала выполняет исходную функцию панели; и (2) затем использует panel.arrows() для добавления строки ошибок (используя двуглавую стрелку, в которой края головки образуют угол 90 градусов с валом).

Вот как это может выглядеть с Dotplot():

# Create the customized panel function
mypanel.Dotplot <- function(x, y, ...) {
    panel.Dotplot(x,y,...)
        tips <- attr(x, "other")
        panel.arrows(x0 = tips[,1], y0 = y, 
                     x1 = tips[,2], y1 = y, 
                     length = 0.15, unit = "native",
                     angle = 90, code = 3)
}

# Use almost the same call as before, replacing the default panel function 
# with your customized function.
Dotplot(name ~ Cbind(mean,lo,up),data=d,ylab="",xlab="",col=1,cex=1,
        panel = mypanel.Dotplot,
        par.settings = list(plot.line=list(col=1),
                       layout.heights=list(bottom.padding=20,top.padding=20)))

enter image description here

...