2015-12-14 202 views
0

目的創建一個堆疊面積圖或「堆疊」圈子情節

創建一個堆疊面積圖或一個「堆疊」圈圖(見圖片)。餅圖不是所期望的。

數據和酒吧情節的代碼

#Data set: 
Numbers  16% 
Frosts  2% 
Doors  6% 
Shelfs  10% 
Earning  -3% 

par(mai=c(2, 1, 1, 1), lwd=2) 
barplot(as.numeric(c(16, 2, 6, 10, -3)), col = c("lightblue"), main="Bar plot", 
     names.arg=c("Numbers","Frosts","Earning", "Doors","Shelfs"), xpd=TRUE, las=2, lwd=2, 
     axes=FALSE, axis.lty=1, cex.axis=1, cex.names=1, cex.main=1, ylim=c(-4, 18), xlim=c(0, 5)) 

兩個輸出選項

enter image description here

+2

你如何打算在圓圖中繪製負值? – heathobrien

+0

負值(負)繪製爲正值|負值|但都靠近中心,例如紅色的。另外一個文本應該顯示例如-3%,名稱如上例 – b4154

+0

使用mdata < - matrix(nrow = 5,ncol = 1,c(-3,2,6,10,16)) barplot(mdata,col = c(「lightblue 「),main =」Bar plot「, xpd = TRUE,las = 2,lwd = 2,axes = FALSE,axis.lty = 1, cex.axis = 1,cex.names = 1,cex.main = 1);創建一個沒有文字的堆積條形圖。但是使用func'text()'我不知道如何添加文本,這些文本將始終放置在每個區域的中心或頂部或底部。 – b4154

回答

2

這應該讓你大部分的方式有

library(ggplot2) 
df<- data.frame(value=as.numeric(c(16, 2, 6, 10, -3)), 
       cat=c("Numbers","Frosts","Earning","Doors","Shelfs")) 

ggplot(df[order(df$value),], aes(x=1, y=abs(value), fill=factor(ifelse(value>0, 0, 1)))) + 
    geom_bar(stat="identity", colour="grey") + 
    geom_text(aes(label=paste(cat, value)), position = "stack", vjust = 3) + 
    scale_fill_manual(values=c("white", "red")) 

Bar Plot

ggplot(df[order(df$value),], aes(x=1, y=abs(value), fill=factor(ifelse(value>0, 0, 1)))) + 
    geom_bar(stat="identity", colour="grey") + 
    geom_text(aes(label=paste(cat, value)), position = "stack", vjust = -1) + 
    scale_fill_manual(values=c("white", "red")) + 
    coord_polar() 

Circle Plot

您可能需要反覆折騰vjust值來改變標籤的位置,或計算爲他們定製Ÿ映射,但它是一個好的開始。

+0

是否有能力用灰色線填充區域,並且有類似'barplot'的某些角度?使用barplot(...,col = c(...),density = NUM​​,angle = c(....),....),您可以設置不同陰影的顏色,密度和角度。 – b4154

+0

不容易。這個鏈接包括一些黑客使其發生,但它看起來像很多努力:http://stackoverflow.com/questions/2895319/how-to-add-texture-to-fill-colors-in-ggplot2 – heathobrien

+0

謝謝!似乎非常困難:D解決方法。也許我只會使用一些灰色的顏色。 – b4154

1

的 「相關」 鏈接右邊的topmost應該給你最你需要建立一個堆積棒圖的信息,但適合你的使用它會是這樣的:

# A vertical matrix containing the values 
md <- matrix(c(-3, 16, 2, 6, 10), ncol=1) 
d <- barplot(md, col=c(2, rep(0, 4))) 

# Finding the vertical position for the labels 
ypos <- apply(md, 2, cumsum) 
ypos <- ypos - md/2 
ypos <- t(ypos) 

# I haven't checked if the values and names match 
text(d/3, ypos, adj=c(0, NA), 
    paste(c("Earning","Numbers","Frosts","Doors","Shelfs"), md, sep=": ")) 

enter image description here

1

您可以嘗試使用此工作:

library(ggplot2) 
data<-data.frame(Name=c("Earning","Frosts","Doors","Shelfs","Numbers"),Val=c(1,2,6,10,16)) 

ggplot(data,aes(x=factor(1),y=Val,fill=Name))+ 
geom_bar(stat="identity",width=1)+coord_polar() 

只要改變顏色的調色板,無論你想(當然第一個值的Val列中添加文本,如果它太大在陰謀 - 它對應於你的負值) enter image description here