Заказ стеков по размеру в гистограмме 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
Порядок, в котором штрихи рисуются (снизу вверх) в штабелированном штриховом шрифте в 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]()