Как превратить мою легенду в горизонтальную, а не в вертикальную с помощью ggplot2?

#r #ggplot2 #phyloseq

Вопрос:

Я изо всех сил пытаюсь понять, почему legend.horizontal моя ось легенды не вращается, поэтому она не отображается вертикально? Любая помощь будет очень признательна.

 library(phyloseq)
library(ggplot2)

##phylum level 
ps_tmp <- get_top_taxa(physeq_obj = ps.phyl, n = 10, relative = TRUE, discard_other = FALSE, other_label = "Other") 
ps_tmp <- name_taxa(ps_tmp, label = "Unkown", species = T, other_label = "Other")
phyl <- fantaxtic_bar(ps_tmp, color_by = "phylum", label_by = "phylum",facet_by = "TREATMENT", other_label = "Other", order_alg = "as.is")
phyl   theme(legend.direction = "horizontal", legend.position = "bottom", )
 

Пример графика   условные обозначения, отображаемые вертикально

Комментарии:

1. Я не знаю, какой пакет вы используете, поэтому не могу протестировать, но вместо legend.direction() чего-то вроде » направляющие(заполнение = guide_legend(nrow = 1, byrow = TRUE)) » может сработать

Ответ №1:

Условные обозначения для дискретных значений сами по себе не имеют формального направления и расположены таким ggplot2 образом, чтобы они наилучшим образом соответствовали вашим данным. Вот почему такие вещи, как legend.direction здесь, не будут работать. У меня нет phyloseq пакета или доступа к вашим конкретным данным, поэтому я покажу вам, как это работает и как вы можете возиться с легендой, используя воспроизводимый пример набора данных.

 library(ggplot2)

set.seed(8675309)
df <- data.frame(x=LETTERS[1:8], y=sample(1:100, 8))

p <- ggplot(df, aes(x, y, fill=x))   geom_col()
p
 

введите описание изображения здесь

По умолчанию ggplot помещает нашу легенду справа и организует ее вертикально в один столбец. Вот что происходит, когда мы перемещаем легенду на дно:

 p   theme(legend.position="bottom")
 

введите описание изображения здесь

Теперь ggplot считает, что лучше всего поместить эту легенду в 4 столбца по 2 строки в каждом. Как уже упоминалось в u/Tech, вы можете использовать функции, чтобы указать, как выглядит легенда. guides() В этом случае мы будем указывать наличие 2 столбцов вместо 4. Нам нужно только указать количество столбцов (или строк), а ggplot вычислит остальное.

 p   theme(legend.position="bottom")  
  guides(fill=guide_legend(ncol=2))
 

введите описание изображения здесь

Итак, чтобы получить «горизонтально расположенную» легенду, вам просто нужно указать, что должна быть только одна строка:

 p   theme(legend.position="bottom")  
  guides(fill=guide_legend(nrow=1))
 

введите описание изображения здесь