2012-02-10 2 views
11

Таким образом, у меня есть нагрузку данных, которые я отобранной в качестве примера ниже:заказа стеки по размеру в ggplot2 сложены гистограммы

Sequence Abundance Length 
CAGTG 3  25 
CGCTG 82  23 
GGGAC 4  25 
CTATC 16  23 
CTTGA 14  25 
CAAGG 9  24 
GTAAT 5  24 
ACGAA 32  22 
TCGGA 10  22 
TAGGC 30  21 
TGCCG 25  21 
TCCGG 2  21 
CGCCT 22  24 
TTGGC 4  22 
ATTCC 4  23 

Я только показывает первые 4 слова каждой последовательности здесь, но на самом деле они длинны. Я рассматриваю обилие последовательностей для каждого класса размеров, который у меня есть здесь. Кроме того, я хочу визуализировать долю обилия, которую представляет определенная последовательность в своем классе размеров. В настоящее время я могу сделать столбчатую диаграмму, как это:

ggplot(tab, aes(x=Length, y=Abundance, fill=Sequence)) 
    + geom_bar(stat='identity') 
    + opts(legend.position="none") 

ggplot stacked bar graph of the sample data

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

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

Любые идеи о том, как это сделать в ggplot2? Я знаю, что в aes() есть параметр «порядок», но я не могу понять, что он должен делать с данными в том формате, который у меня есть.

+1

@ GSK3 - Я думаю, что ОП не прошу что-то немного другое здесь. Вместо того, чтобы заказывать бары по их общей высоте, я думаю, что kukimbob спрашивает, как заказывать цветные блоки * внутри * каждого бара, помещая наибольшее внизу, вниз по оси x и наименьшее вверху. (то есть упорядочение цветов внутри каждого бара может сильно различаться между полосами). –

+0

@ JoshO'Brien Это точно! Порядок на оси х отлично: от наименьшей длины до самой длинной. Я просто хочу иметь возможность манипулировать порядком цветных стеков в каждом баре. – MattLBeck

+0

А, это определенно другой вопрос. Извиняюсь. –

ответ

10

Порядок, в котором штрихи рисуются (снизу вверх) в штабелированном планшетах в ggplot2, основан на упорядочении фактора, который определяет группы. Поэтому фактор Sequence необходимо переупорядочить на основе Abundance. Но чтобы получить правильный порядок укладки, порядок должен быть отменен.

ab.tab$Sequence <- reorder(ab.tab$Sequence, ab.tab$Abundance) 
ab.tab$Sequence <- factor(ab.tab$Sequence, levels=rev(levels(ab.tab$Sequence))) 

Использование кода теперь дает сюжет вы запросили

ggplot(ab.tab, aes(x=Length, y=Abundance, fill=Sequence)) + 
    geom_bar(stat='identity') + 
    opts(legend.position="none") 

enter image description here

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

ggplot(ab.tab, aes(x=Length, y=Abundance, group=Sequence)) + 
    geom_bar(stat='identity', colour="black", fill=NA) 

enter image description here

+0

Это прекрасно работает, спасибо! И ваше предложение намного лучше, чем то, что я имею в настоящее время, поскольку такой же цвет для разных чтений в классах размеров вводит в заблуждение интерпретацию. – MattLBeck

+0

Как вы будете делать заказ на основе столбца? –

+0

@AlexT Я не считаю, что можно упорядочить категории в баре по-разному для разных баров. –