График пирамиды очень медленный, если его кормить большими числами - PullRequest
2 голосов
/ 14 июля 2011

Я пытаюсь построить пирамиду с помощью 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, так и экран печати занимает несколько минут.

1 Ответ

2 голосов
/ 15 июля 2011

Внутренне, 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 был разработан для демографических графиков ... вы можете написать сопровождающему пакета и попросить его подумать об обобщениидизайн осей немного ...

...