максимальный график указывает в R?

Я столкнулся со многими ситуациями, где я хочу вывести больше точек на печать, чем я действительно должен быть - основная задержка - то, что, когда я совместно использую свои графики с людьми или встраиваю их в бумаги, они занимают слишком много места. Это очень просто к случайным образом демонстрационным строкам в кадре данных.

если я хочу действительно случайную выборку для графика точки, легко сказать:

ggplot(x,y,data=myDf[sample(1:nrow(myDf),1000),])

Однако я задавался вопросом, были ли там более эффективными (идеально консервированный) способы указать, что число графика очков таким образом, что Ваши фактические данные точно отражаются в графике. Таким образом, вот пример. Предположим, что я вывожу что-то на печать как CCDF тяжелого хвостатого распределения, например.

ccdf <- function(myList,density=FALSE)
{
  # generates the CCDF of a list or vector
  freqs = table(myList)
  X = rev(as.numeric(names(freqs)))
  Y =cumsum(rev(as.list(freqs)));
  data.frame(x=X,count=Y)
}
qplot(x,count,data=ccdf(rlnorm(10000,3,2.4)),log='xy')

Это произведет график, где x и ось y становятся все больше плотными. Здесь это было бы идеально, чтобы иметь меньше образцов, напечатанных для большого x или значений y.

У кого-либо есть какие-либо подсказки или предложения для того, чтобы заниматься подобными проблемами?

Спасибо,-e

7
задан eytan 26 December 2009 в 17:39
поделиться

4 ответа

Вот одно из возможных решений для построения графика днизэмплинга относительно оси х, если он трансформируется в каротаж. Он преобразовывает ось х, округляет это количество и выбирает медианное значение х в этом бине:

downsampled_qplot <- function(x,y,data,rounding=0, ...) {
  # assumes we are doing log=xy or log=x
  group = factor(round(log(data$x),rounding))
  d <- do.call(rbind, by(data, group, 
    function(X) X[order(X$x)[floor(length(X)/2)],]))
  qplot(x,count,data=d, ...)
}

Используя определение ccdf() сверху, мы можем сравнить исходный график CCDF распределения с вариантом с пониженной выборкой:

myccdf=ccdf(rlnorm(10000,3,2.4))

qplot(x,count,data=myccdf,log='xy',main='original')

downsampled_qplot(x,count,data=myccdf,log='xy',rounding=1,main='rounding = 1')

downsampled_qplot(x,count,data=myccdf,log='xy',rounding=0,main='rounding = 0')

В формате PDF исходный график занимает 640К, а вариант с пониженной выборкой - 20К и 8К, соответственно.

4
ответ дан 6 December 2019 в 10:00
поделиться

Beyond Предложения Роба, одна функция построения графика, которая мне нравится, поскольку она «прореживает» для вас, - это hexbin ; пример - в галерее графиков R .

5
ответ дан 6 December 2019 в 10:00
поделиться

Я бы либо создал графические файлы (png или jpeg устройства), как уже упоминалось Rob, либо сделал бы 2D гистограмму. Альтернативой 2D гистограмме является сглаженный рассеянный график , он делает похожую графику, но имеет более плавное срезание от плотных к разреженным областям пространства.

Если вы никогда раньше не видели зависимого , то стоит посмотреть на него. В нем есть очень красивая графика, сгенерированная на R с изображениями и примерами кода.

Вот пример кода с сайта addictedtor:

2-d гистограмма:

require(gplots) 

# example data, bivariate normal, no correlation
x <- rnorm(2000, sd=4) 
y <- rnorm(2000, sd=1) 

# separate scales for each axis, this looks circular
hist2d(x,y, nbins=50, col = c("white",heat.colors(16))) 
rug(x,side=1) 
rug(y,side=2) 
box() 

smoothscatter:

library("geneplotter")  ## from BioConductor
require("RColorBrewer") ## from CRAN

x1  <- matrix(rnorm(1e4), ncol=2)
x2  <- matrix(rnorm(1e4, mean=3, sd=1.5), ncol=2)
x   <- rbind(x1,x2)

layout(matrix(1:4, ncol=2, byrow=TRUE))
op <- par(mar=rep(2,4))
smoothScatter(x, nrpoints=0)
smoothScatter(x)
smoothScatter(x, nrpoints=Inf,
              colramp=colorRampPalette(brewer.pal(9,"YlOrRd")),
              bandwidth=40)
colors  <- densCols(x)
plot(x, col=colors, pch=20)

par(op)
2
ответ дан 6 December 2019 в 10:00
поделиться

В этой ситуации я склонен использовать png-файлы, а не векторную графику, такую как pdf или eps. Файлы намного меньше, хотя и теряют разрешение.

Если это более обычный рассеянный график, то использование полупрозрачных цветов также помогает, как и решение проблемы перепланировки. Например,

x <- rnorm(10000); y <- rnorm(10000)
qplot(x, y, colour=I(alpha("blue",1/25)))
8
ответ дан 6 December 2019 в 10:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: