Boxplot с ограничениями оси в R - PullRequest
0 голосов
/ 04 ноября 2011

У меня есть данные в формате с разделителями табуляции с почти 400 столбцами, заполненными значениями, т.е.

         X             Y         Z               A       B               C  
        2.34          .89       1.4             .92     9.40            .82
        6.45          .04       2.55            .14     1.55            .04
        1.09          .91       4.19            .16     3.19            .56
        5.87          .70       3.47            .80     2.47            .90

Теперь я хочу визуализировать данные, используя блочный метод построения графика. Несмотря на то, что трудно просмотреть 400 в одном файле PDF, я хочу разбить их на 50 каждый.ie (50 x 8). Вот код, который я использовал:

boxplot(data[1:50],xlab="Samples",xlim=c(0.001,70),log="xy", 
        pch='.',col=rainbow(ncol(data[1:50))) 

но я получил следующую ошибку:

В plot.window (xlim = xlim, ylim = ylim, log = log, yaxs = pars $ yaxs) : пределы неограниченной оси [GScale (-inf, 4.4591,2,.); войти = 1]

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

Ответы [ 3 ]

3 голосов
/ 04 ноября 2011

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

# Simulate some data
set.seed(12345)
n.var = 400
n.obs = 200
data  = matrix(rnorm(n.var*n.obs), nrow=n.obs)

# Summarize data
breaks = seq(min(data), max(data), length.out=51)
histdata = apply(data, 2, function(x) hist(x, plot=F, breaks=breaks)$counts)

# Plot
dev.new(width=4, height=4)
image(1:n.var, breaks, t(histdata), xlab='Variable Index', ylab='Histogram Bin')

enter image description here

Это будет наиболее полезно, если все вашипеременные сравнимы или, по крайней мере, отсортированы по рациональным группам.Функции hclust и heatmap также могут быть полезны для более сложных дисплеев.Удачи!

2 голосов
/ 04 ноября 2011

Я согласен, что вам придется сделать что-то немного радикальное, чтобы различить 400 полей на одном графике.Приведенный ниже код использует два трюка: (1) поменять местами обычный порядок xy, чтобы легче было читать метки (нанесенные на ось y);(2) отправьте вывод в высокий тонкий файл PDF, чтобы вы могли просматривать его на досуге.Я также решил отсортировать переменные по среднему значению, чтобы упростить интерпретацию графика - это было бы необязательно, но я подозреваю, что в любом случае вам будет сложно найти конкретную категорию на графике из 400 блоков..

nc <- 400
z <- as.data.frame(matrix(rnorm(nc*100),ncol=nc))
library(ggplot2)
m <- melt(z)
m <- transform(m,variable=reorder(variable,value))
pdf(width=10,height=50,file="boxplot.pdf")
print(ggplot(m,aes(x=variable,y=value))+geom_boxplot()+coord_flip())
dev.off()
1 голос
/ 04 ноября 2011

Учитывая, что вы строите 400 ящиков на своем блочном графике, я не удивлен, что у вас возникли проблемы с их просмотром. Предположим, у вас есть монитор шириной 1024 пикселя. Ваше приложение сможет отображать поля шириной всего в два пикселя. Даже с большими экранами вы не увеличите количество пикселей на много (на экране с 2000 пикселями будут отображаться блоки шириной 5 пикселей).

Я бы предложил разместить ваши коробки на двух или более отдельных участках.

...