2016-05-21 3 views
0

У меня возникли некоторые проблемы с geom_barggplot2 «s:Цвет турники в geom_bar ggplot в

Вот мои данные:

set.seed(1) 
df <- data.frame(log10.p.value = -10*log10(runif(10,0,1)), y = letters[1:10], col = rep("#E0E0FF",10), stringsAsFactors = F) 
#specify color by log10.p.value 
df$col[which(df$log10.p.value > 2)] <- "#EBCCD6" 
df$col[which(df$log10.p.value > 4)] <- "#E09898" 
df$col[which(df$log10.p.value > 6)] <- "#C74747" 
df$col[which(df$log10.p.value > 8)] <- "#B20000" 
#truncate bars 
df$log10.p.value[which(df$log10.p.value > 10)] <- 10 

Как вы можете видеть каждый log10.p.value интервал присваивается другой цвет и так Я не хочу, бруски, чтобы выходить за пределы log10.p.value = 10 я установить любое такое значение 10.

Моя ggplot команда:

p <- ggplot(df, aes(y=log10.p.value,x=y,fill=as.factor(col)))+ 
    geom_bar(stat="identity",width=0.2)+coord_flip()+scale_y_continuous(limits=c(0,10),labels=c(seq(0,7.5,2.5)," >10"))+ 
    theme(axis.text=element_text(size=10))+scale_fill_manual(values=df$col,guide=FALSE) 

И фигура:

enter image description here

Проблемы:

  1. Барные цвета на графике не совпадают df$col. Например, полосы a и b цветны # EBCCD6, а не # E09898.

  2. Поскольку я вручную указываю, что текст последнего тика по оси x должен быть «> 10», дополнительное пространство создается на участке справа от этого галочки, делая столбцы, которые я усекал в 10, кажется, что они заканчиваются на 10, тогда как мое намерение состояло в том, чтобы они прошли весь путь до правого конца заговора.

+0

для меня это работает, почему вы не думаете, что это не соответствует? возможно, для windows() X11() для linux и quartz() для mac перед построением графика, чтобы у вас было большее окно? для ограничения графика в ggplot вы должны использовать coord_cartesian, как описано здесь http://stackoverflow.com/questions/25685185/limit-ggplot2-axes-without-removing-data-outside-limits-zoom –

+0

Обновлен мой ответ, чтобы включить правильный способ указания цветов через scale_colour_manual. Однако ваш график не воспроизводится, поэтому вам все равно нужно это проверить. – shreyasgm

ответ

2

Мне не удалось воспроизвести созданный граф. Выполнение кода вы предоставили генерирует следующий график:

enter image description here

Вы можете правильно определить цвета, называя вектор, который вы передаете в scale_fill_manual:

coloursv <- df$col 
names(coloursv) <- df$col 

Ко второй части ваш вопрос - вы можете убедиться, что между полосами и краем графика нет места, используя параметр expandscale_y_continuous.

Создание этих двух изменений, код для сюжета становится:

p <- ggplot(df, aes(y=log10.p.value,x=y,fill=as.factor(col)))+ 
    geom_bar(stat="identity",width=0.2) + 
    scale_y_continuous(limits=c(0,10), 
         labels=c(seq(0,7.5,2.5)," >10"), 
         expand = c(0,0)) + 
    theme(axis.text=element_text(size=10)) + 
    scale_fill_manual(values = coloursv,guide = F) + 
    coord_flip() 

enter image description here

'> 10' метка немного отсечка. Вы можете увеличить сюжетные поля, чтобы сделать его видимым, используя:

p + theme(plot.margin=unit(c(0.1,0.5,0.1,0.1),"cm")) 

enter image description here

Смежные вопросы