График пирамиды R очень медленный, если вводить большие числа

Я пытаюсь создать пирамиду с помощью R. Я нашел в Интернете пример кода, который делает то, что я хочу. Проблема в том, что я не работаю с маленькими числами, как в примере. Мой график имеет значения от 3 000 000 до 12 000 000, но только по 10 баров на сторону. Тем не менее, требуется постоянно создавать график с большими числами, а выходной файл PDF имеет размер около 800 МБ.

pyramid.plot(x,y,labels=groups,main="Performance",lxcol=mcol,rxcol=fcol,gap=0.5,show.values=TRUE)

Почему производительность такая плохая? Не должно масштабироваться автоматически?

Обновлять:

pdf(file='figure1.pdf')
library(plotrix)

x <-c(3105000,3400001,4168780,2842764,3543116,4224601,4222222,6432105,9222222,12345596)
y <-c(3105000,3400001,4168780,2842764,3543116,4224601,4222222,6432105,9222222,12345596)
groups <-c("g1","g2","g3","g4","g5","g6","g7","g8","g9","g11") 
pyramid.plot(x,y,labels=groups,main="Performance",gap=0.5,show.values=TRUE)
dev.off()

Как экспорт в pdf, так и экран печати занимают несколько минут.


person mrks    schedule 14.07.2011    source источник
comment
Ваш пример не воспроизводим, поэтому ответить будет сложно. Скажите, пожалуйста, следующее: 1) В каком пакете находится pyramid.plot? 2) Результаты str(x) и str(y)   -  person Andrie    schedule 14.07.2011
comment
@Andrie, быстрый поиск показал, что pyramid.plot находится в plotrix   -  person Luciano Selzer    schedule 14.07.2011
comment
Создание PDF-файла размером 800 МБ звучит как путаница в дюймах и пикселях при вызове pdf() для сохранения на диск. Я предполагаю, что это действительно медленная часть, а не вызов pyramid.plot. Но по вопросу нельзя сказать наверняка.   -  person joran    schedule 14.07.2011
comment
Я хотел бы проголосовать за все невоспроизводимые комментарии более одного раза, но я не могу. Вполне резонный вопрос, но не воспроизводимый!   -  person Ben Bolker    schedule 14.07.2011
comment
PS stackoverflow.com /вопросы/5963269/   -  person Ben Bolker    schedule 15.07.2011
comment
спасибо за замечания. Я обновил свой пост.   -  person mrks    schedule 15.07.2011


Ответы (1)


Внутри pyramid.plot пытается что-то сделать, чтобы определить оси, учитывающие зазор в середине: если вы сделаете debug(pyramid.plot) и выполните шаг за строкой, вы обнаружите, где проблема:

if (is.null(laxlab)) {
            laxlab <- seq(xlim[1] - gap, 0, by = -1)
            axis(1, at = -xlim[1]:-gap, labels = laxlab)
        }

другими словами, pyramid.plot пытается сделать ось с тиками через каждые 1 (!) юнит. Что-то вроде этого работает нормально:

pyramid.plot(x,y,labels=groups,
             main="Performance",gap=5e5,show.values=TRUE,
             laxlab=seq(0,1e7,by=1e6),raxlab=seq(0,1e7,by=1e6))

есть несколько других следов того, что pyramid.plot был разработан для демографических графиков ... вы можете написать сопровождающему пакета и попросить его немного подумать о том, чтобы немного обобщить дизайн осей ...

person Ben Bolker    schedule 15.07.2011