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