更改ggplot中一个躲闪栏的填充颜色

wat*_*wer 7 r ggplot2

我想仅为最后一组更改条形图的顺序,只是为了突出显示它.我用过scale_fill_manual(),但没什么用.

这是我的代码:

 x<-c(rep(c("Type1", "Type2"),4))
     y<-c(4,5,6,7,3,4,5,2)
     time<-c(2010,2010,2011,2011,2012,2012,2013,2013)
     z<-data.frame(type = x, val=y, Time = time)

     ggplot(data = z, aes(x=Time,y=val)) +
       geom_bar(stat = "identity", position = "dodge", aes(fill=type))+
       scale_fill_manual(values = c(rep(c("white", "gray51"),3),"white","red"))
Run Code Online (Sandbox Code Playgroud)

这是输出:

在此输入图像描述

我希望图表看起来像: 在此输入图像描述

有什么方法可以做到这一点吗?我将不胜感激任何帮助.我在ggplot中查看了只有一个条形图的更改颜色,但它似乎与分组数据无关.

Gre*_*gor 10

我的一般口头禅是ggplot非常擅长绘制你给出的数据.如果您希望它绘制不同的东西,最简单的方法通常是修改您的数据.

z$type2 = as.character(z$type)
z$type2[z$type == "Type2" & z$Time == 2013] = "Type2 "
Run Code Online (Sandbox Code Playgroud)

"Type2 "为你想要突出显示的行添加了一个偷偷摸摸的额外空间.它将是一个独特的因子级别并获得自己的颜色(甚至可以使用字母默认强制转换为一个很好的顺序).但它在图例标签中看起来是一样的.

ggplot(data = z, aes(x=Time,y=val)) +
    geom_bar(stat = "identity", position = "dodge", aes(fill=type2))+
    scale_fill_manual(values = c("white", "gray50", "red"))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我认为省略传说中的红色将是困难的,但这个答案告诉我,所需要的只是添加breaks = c("Type1", "Type2")作为参数scale_fill_manual.


eip*_*i10 7

怎么样突出带边框的酒吧.例如:

z$hi = with(z, ifelse(type=="Type2" & Time==2013, "Y","N"))

ggplot(data = z, aes(x=Time,y=val)) +
  geom_bar(stat = "identity", position = "dodge", 
           aes(fill=type, colour=hi), size=1) +
  scale_fill_manual(values=c("gray51","white")) +
  scale_colour_manual(values=c(NA,"red")) +
  guides(colour=FALSE)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

更新:回应您的评论:我认为线图可以更容易地看到趋势和每个趋势之间的关系type.例如:

ggplot(data = z, aes(x=Time,y=val,colour=type)) +
  geom_line() +
  geom_point() +
  geom_point(data=z[z$hi=="Y",], aes(x=Time, y=val), size=4, pch=1, 
             colour=hcl(195,100,40), stroke=1) +
  scale_y_continuous(limits=c(0,max(z$val))) +
  theme_bw()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 我想你可能会在这里用线条图更好.我添加了一个例子,你可以看到我的意思. (3认同)
  • 不,你很好。这一切似乎都不乏味。两者自然都带有`geom_bar`。我认为这两种解决方案都有一个教训-如果您想突出显示某些内容,执行ggplot的简单方法是在数据中添加一列,以指明要突出显示的内容。 (2认同)