簡體   English   中英

更改ggplot中一個躲閃欄的填充顏色

[英]Change the fill color of one of the dodged bar in ggplot

我想僅為最后一組更改條形圖的順序,只是為了突出顯示它。 我使用了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"))

這是輸出:

在此輸入圖像描述

我希望圖表看起來像: 在此輸入圖像描述

有什么方法可以做到這一點嗎? 我將不勝感激任何幫助。 在ggplot中查看了只有一個條形圖的更改顏色,但它似乎與分組數據無關。

我的一般口頭禪是ggplot非常擅長繪制你給出的數據。 如果您希望它繪制不同的東西,最簡單的方法通常是修改您的數據。

z$type2 = as.character(z$type)
z$type2[z$type == "Type2" & z$Time == 2013] = "Type2 "

我在"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"))

在此輸入圖像描述

我認為省略圖例中的紅色會很困難,但是這個答案告訴我,所有需要的是添加breaks = c("Type1", "Type2")作為scale_fill_manual的參數。

怎么樣突出帶邊框的酒吧。 例如:

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)

在此輸入圖像描述

更新:回應你的評論:我認為線圖可以更容易地看到趨勢和每種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()

在此輸入圖像描述

使用圖例很容易做到這一點,盡管您可能需要謹慎對待用戶突然改變顏色。 只需在x變量中添加一個附加類別即可指示要突出顯示的位置。

x<- xHigh <- c(rep(c("Type1", "Type2"),4))
xHigh[length(xHigh)] <- "Type2_highlight"

myHighlight <- rep("No",length(x))
myHighlight[length(myHighlight)] <- "Yes"
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, xHigh = xHigh, val=y, Time = time, myHighlight = myHighlight)

ggplot(data = z, aes(x=Time,y=val)) +
  geom_bar(stat = "identity", position = "dodge", aes(fill=xHigh))+
  scale_fill_manual(values = c(Type1 = "white", Type2 = "gray51", Type2_highlight = "red"))

在此輸入圖像描述

突出顯示特定條形圖的另一個可能選項是在其周圍繪制一個框,如下所示:

ggplot(data = z, aes(x=Time,y=val)) +
  geom_bar(stat = "identity", position = "dodge", aes(fill=type))+
  scale_fill_manual(values = c(Type1 = "white", Type2 = "gray51")) +
  geom_bar(aes(linetype = xHigh)
           , fill = NA
           , stat = "identity", position = "dodge"
           , col = "red"
           , show.legend = FALSE) +
  scale_linetype_manual(values = c(Type1 = 0
                                   , Type2 = 0
                                   , Type2_highlight = 1))

在此輸入圖像描述

希望有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM