Solución:
Opción 1: cambiar el color de una sola barra. Siguiendo la sugerencia de Henrick, puede crear una nueva variable con NA para el color predeterminado y cadenas de caracteres / factores para colores no predeterminados (el primero resulta ser rojo):
area.color <- c(NA, "withcolor", NA, NA)
plot.sale.bad <- ggplot(data=df.sale, aes(x=area, y=sale, fill=area.color)) +
geom_bar(stat="identity") +
xlab(colnames(df.sale)[1]) +
ylab(colnames(df.sale)[2]) +
ggtitle("Porównanie sprzedaży")
plot.sale.bad
Opción 2: busque el nombre del color gris oscuro predeterminado que le guste. Este no es el color predeterminado si simplemente elimina el scale_fill_manual
línea en su código original (en ese caso, obtiene cuatro pasteles diferentes), así que supongo que se refiere al color gris producido por el fragmento de código justo encima de este párrafo, para aquellas barras donde area.color==NA
. En ese caso, puede mirar el código fuente (o args, de todos modos) para scale_fill_discrete
:
> args(scale_fill_discrete)
# function (..., h = c(0, 360) + 15, c = 100, l = 65, h.start = 0,
# direction = 1, na.value = "grey50")
# NULL
El predeterminado para na.value
es "grey50"
. Entonces, si quisieras usar scale_fill_manual
, podrías hacerlo así:
plot.sale.bad <- ggplot(data=df.sale, aes(x=area, y=sale, fill=area)) +
geom_bar(stat="identity") +
scale_fill_manual(values=c("grey50", "red", "grey50", "grey50")) +
xlab(colnames(df.sale)[1]) +
ylab(colnames(df.sale)[2]) +
ggtitle("Porównanie sprzedaży")
plot.sale.bad
Si le gusta tener todo en la llamada ggplot, puede usar un ifelse
declaración dentro factor()
para el relleno como se muestra a continuación.
Esto también separa la leyenda en dos categorías (es decir, resaltada y no resaltada) para que no repita los valores que se muestran en el eje x. Esto también proporciona otra dimensión ilustrativa de la trama en la leyenda.
plot.sale.bad2 <- ggplot(data=df.sale,
aes(x=area,
y=sale,
fill=factor(ifelse(area=="Południe","Highlighted","Normal")))) +
geom_bar(stat="identity") +
scale_fill_manual(name = "area", values=c("red","grey50")) +
xlab(colnames(df.sale)[1]) +
ylab(colnames(df.sale)[2]) +
ggtitle("Porównanie sprzedaży")
plot.sale.bad2
Si la leyenda no es necesaria, puede agregar show.legend = FALSE
al geom_bar()
llamar para producir lo siguiente: