2015-07-24 1 views
0

Вот воспроизводимый набор данных с непрерывным заполнением на основе Amount. Как видно из приведенного ниже примера, у меня также есть столбец в d по номеру flag. Я хочу, чтобы можно было визуализировать flag, изменив цвет рамки на красный цвет.ggplot geom_bar непрерывная заливка цвета отдельным цветом на основе условного

# create reproducible data 
library(ggplot2) 
d <- read.csv(text='Day,Location,Length,Amount,flag 
    1,4,3,1.1,FALSE 
    1,3,1,2,FALSE 
    1,2,3,4,FALSE 
    1,1,3,5,FALSE 
    2,0,0,0,FALSE 
    3,3,3,1.8,TRUE 
    3,2,1,3.54,FALSE 
    3,1,3,1.1,FALSE',header=T) 
ggplot(d, aes(x = Day, y = Length)) + 
geom_bar(aes(fill = Amount, order = -Location), stat = "identity") 

Я экспериментировал с alpha и что, безусловно, делает флаг нужный бар, но не может визуализировать данные так, как я хочу:

ggplot(d, aes(x = Day, y = Length)) + 
geom_bar(aes(fill = Amount, order = -Location, alpha = -flag), stat = "identity") 

alpha при использовании -flags (обратите внимание -) также столовых с легенда, что нежелательно.

Используя приведенную ниже команду возвращает ошибку, что мне нужно 2 цветовые переменные, но я только хочу 1, red:

ggplot(d, aes(x = Day, y = Length)) + 
geom_bar(aes(fill = Amount, order = -Location, alpha = -flag), stat = "identity") + 
scale_colour_manual(values = alpha(c('red'))) 

Чтобы резюмировать:

  1. Я хочу, чтобы показать бар, где flag = TRUE с красным контуром (или что-то в равной степени заметным) без изменения непрерывной шкалы, уже принятой Amount.

  2. Я хочу, чтобы в легенде отразилось, что flag = TRUE с красным цветом (или любым другим).

Я не смог найти подходящее решение, просматривая Интернет, поэтому любые мысли или предложения очень ценятся!

ответ

2

Использование colour=flag (colour - это схема в geom_bar, а заполнение заполняется). Затем добавьте + scale_colour_manual(values=c(NA, 'red')), где NA используется, если flag является ложным (без границ), а «красный» используется, если верно flag.

ggplot(d, aes(x = Day, y = Length)) + 
geom_bar(aes(fill = Amount, order = -Location, col=flag), stat = "identity") + 
    scale_colour_manual(values=c(NA, 'red')) 

(Примечание: вместо того, чтобы вы могли geom_bar(aes(...), col=ifelse(d$flag, 'red', NA)) и пропустить scale_colour_manual, но тогда вы не получите легенду).

enter image description here

Если вы хотите, чтобы увеличить ширину границы, добавить lwd=<new line width> в вашем geom_bar (за пределами aes).

+0

Это идеальное решение. Не знаю, добавили ли вы эту вторую часть в качестве редактирования или нет, но в любом случае вы читаете мой разум! Спасибо за быстрый поворот и простое решение! – James