Упорядочение стеков по размеру в столбчатой ​​диаграмме ggplot2 - PullRequest
12 голосов
/ 10 февраля 2012

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

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 Ответ

13 голосов
/ 10 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...