Подтвердить что ты не робот

Заказ стеков по размеру в гистограмме 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(), но я не могу понять, что он должен делать с данными в том формате, который у меня есть.

4b9b3361

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