个别柱状图上的 ggplot 透明度

6

我目前正在尝试使用ggplot创建一个只有一根柱形图的条形图,并且这个柱形图是部分透明的。

我有以下代码:

dt1 <- data.table(yr=c(2010,2010,2011,2011),
                  val=c(1500,3000,2000,1100),
                  x=c("a","b","a","b"))


ggplot() + geom_bar(data=dt1, aes(x=yr, y=val,fill=x),stat="identity") +
  scale_x_continuous(breaks=dt1$yr)

这将创建一个带有堆叠数据的简单的2列图表。我尝试了以下代码来调整2011年的值以获得透明度,但是我没有太多的运气。有什么建议吗?

dt1[,alphayr:=ifelse(yr==2011,.5,1)]
ggplot() + geom_bar(data=dt1, aes(x=yr, y=val,fill=x),stat="identity", alpha=dt1$alphayr) +
scale_x_continuous(breaks=dt1$yr)

我认为你想将alpha放入aes中。ggplot() + geom_bar(data=dt1, aes(x=yr, y=val,fill=x, alpha=alphayr),stat="identity") - jazzurro
感谢您的超快速响应。我确实尝试过那个,但是我认为aes中的alpha值工作方式不同。使用0.5的值会使它非常模糊,而0.9的值也没有好多少。此外,在aes中它还会添加另一个图例。 - Dan
2个回答

11

首先,按照 @jazzurro 的建议,将alpha放入aes中。不过,您应该使用factor以获得离散比例尺。然后可以手动调整alpha比例尺。

ggplot() + geom_bar(data=dt1, aes(x=yr, y=val, fill=x, alpha=factor(alphayr)), stat="identity") +
  scale_x_continuous(breaks=dt1$yr) +
  scale_alpha_manual(values = c("0.5"=0.5, "1"=1), guide='none')

3

一道有教育意义的问答。其他读者可能不熟悉data.table语法,希望看到结果,因此我简单修改了@shadow的回答,创建了一个包含数据框的因子,并在下面显示了绘图结果。

dt1 <- data.frame(yr=c(2010,2010,2011,2011), val=c(1500,3000,2000,1100), x=c("a","b","a","b"))

创建因子

dt1$alphayr <- as.factor(ifelse(dt1$yr == "2011", 0.5, 1))

ggplot() + geom_bar(data=dt1, aes(x=yr, y=val, fill=x, alpha=factor(alphayr)), stat="identity") +
  scale_x_continuous(breaks=dt1$yr) +
  scale_alpha_manual(values = c("0.5"=0.5, "1"=1), guide='none')

enter image description here


将情节添加为对Shadow答案的编辑会更好(在我看来,data.frame部分完全没有意义)。 - eddi
@eddi。对的。我没有考虑到编辑别人的答案来包含情节。至于数据框部分,不是每个人都使用data.table(我不使用),我认为我所做的会帮助像我这样的其他人。无论如何,感谢您抽出时间发表评论。 - lawyeR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接