Вы не получаете легенду, потому что у вас есть scale_fill_manual(values = coloursv,guide=F)
и guide=F
предотвращает заполняющий легенду к показу.
С другой стороны, scale_color_gradientn
устанавливает эстетику цвета, но у вас нет цветовой эстетики на вашем участке. Вероятно, вы имели в виду scale_fill_gradient
(в этом случае вы также не хотели бы иметь scale_fill_manual
). Однако, даже если вы переключите этот оператор на scale_fill_manual
, вы установите разрывы на значения, находящиеся вне диапазона значений в ваших данных (диапазон разрывов от -4 до 0, но диапазон данных составляет от 0,4 до 10).
Добавление df$col
не устанавливает цвета, которые могут быть нанесены на график. Он просто создает категориальную переменную с разными значениями категорий в разных диапазонах log10.p.value
. Вы могли бы назвать значения категорий что угодно, а ggplot2 имеет цветовую палитру по умолчанию, которая одинакова независимо от имен категорий и зависит только от количества категорий. Если вы хотите категориальные значения, вместо этого вы можете использовать функцию вырезания, как показано ниже.
Вот несколько примеров, иллюстрирующих различные варианты заполнения и легенды:
# Create log10.p.value categories
df$log10.p.value.cat = cut(df$log10.p.value, seq(0,10,2))
# Fill bars based on log10.p.value.cat
p1=ggplot(df, aes(y=log10.p.value, x=y, fill=log10.p.value.cat)) +
geom_bar(stat="identity", width=0.2) +
scale_y_continuous(limits=c(0,10)) +
theme(axis.text=element_text(size=10)) +
coord_flip()
Участок под это один ваш вопрос с легендой включен. Обратите внимание, что порядок цветов в scale_fill_manual
должен соответствовать порядку соответствующих значений в log10.p.value.cat
, чтобы получить желаемый цвет для каждой категории.
# Fill bars based on log10.p.value.cat with custom colors
p1a=ggplot(df, aes(y=log10.p.value, x=y, fill=log10.p.value.cat)) +
geom_bar(stat="identity", width=0.2) +
scale_y_continuous(limits=c(0,10)) +
theme(axis.text=element_text(size=10)) +
coord_flip() +
scale_fill_manual(values=c("#E0E0FF","#EBCCD6","#E09898","#C74747","#B20000"))
# Continuous fill gradient based on log10.p.value
p2=ggplot(df, aes(y=log10.p.value, x=y, fill=log10.p.value)) +
geom_bar(stat="identity", width=0.2) +
scale_y_continuous(limits=c(0,10)) +
theme(axis.text=element_text(size=10)) +
coord_flip()
# Continuous fill gradient based on log10.p.value with custom colors
p2a=ggplot(df, aes(y=log10.p.value, x=y, fill=log10.p.value)) +
geom_bar(stat="identity", width=0.2) +
scale_y_continuous(limits=c(0,10)) +
theme(axis.text=element_text(size=10)) +
coord_flip() +
scale_fill_gradientn(colours=c("#EBCCD6","#E09898","#C74747","#B20000","#E0E0FF"),
breaks=seq(0,10,2))
спасибо eipi10. Я использовал scale_fill_manual, поэтому цвета штрихов в графике соответствуют их значениям в data.frame. Итак, как мне получить это право в дополнение к заполнению легенды? – dan
Для сюжета 'p1a' установите цвета как scale_fill_manual (значения = c (" # E0E0FF "," # EBCCD6 "," # E09898 "," # C74747 "," # B20000 "))'. Ключ должен поместить цвета в том же порядке, что и соответствующие категории «log10.p.value.cat». Поскольку 'log10.p.value.cat' является фактором, вы можете получить порядок категорий с' levels (df $ log10.p.value.cat) '. Я обновил свой ответ соответственно. – eipi10