改变ggplot中只有一个条形的颜色

jja*_*iak 13 r colors bar-chart ggplot2

我想在ggplot中只为一个条形颜色.这是我的数据框:

area <- c("Pó?noc", "Po?udnie", "Wschód", "Zachód")
sale <- c(16.5, 13.5, 14, 13)
df.sale <- data.frame(area, sale)
colnames(df.sale) <- c("Obszar sprzeda?y", "Liczba sprzedanych produktów (w tys.)")
Run Code Online (Sandbox Code Playgroud)

和绘图代码:

plot.sale.bad <- ggplot(data=df.sale, aes(x=area, y=sale, fill=area)) +
  geom_bar(stat="identity") +
  scale_fill_manual(values=c("black", "red", "black", "black")) +
  xlab(colnames(df.sale)[1]) +
  ylab(colnames(df.sale)[2]) +
  ggtitle("Porównanie sprzeda?y") 
Run Code Online (Sandbox Code Playgroud)

我想只有一个彩色条和另外3个有默认颜色(暗灰色,不是黑色,对我来说看起来很糟糕).如何更改仅在条形图上的颜色或如何获取条形图的默认颜色名称而不是黑色?

pan*_*gia 16

选项1:仅更改一个条形的颜色.根据Henrick的建议,您可以使用NAs创建一个新变量,用于默认颜色和非默认颜色的字符串/因子(第一个恰好是红色):

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
Run Code Online (Sandbox Code Playgroud)

选项2:找到您喜欢的默认深灰色的名称.如果你只是删除scale_fill_manual原始代码中的那一行,这不是默认颜色(在这种情况下,你得到四个不同的粉彩),所以我假设你的意思是代码块产生的灰色,就在这一段的上方,对于那些area.color==NA.在这种情况下,您可能会查看源代码(或args,无论如何)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
Run Code Online (Sandbox Code Playgroud)

默认na.value"grey50".所以,如果你想使用scale_fill_manual,你可以这样做:

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
Run Code Online (Sandbox Code Playgroud)


Rus*_*mas 9

如果您喜欢在ggplot调用中拥有所有内容,则可以在其中使用填充ifelse语句factor(),如下所示.

这也将图例分为两类(即突出显示而非突出显示),这样您就不会重复x轴上显示的值.这也为图例中的图提供了另一个说明性维度.

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
Run Code Online (Sandbox Code Playgroud)

情节与传说

如果不需要图例,您可以添加show.legend = FALSEgeom_boxplot()调用以生成以下内容:

情节没有传说