0
我想用下面的示例數據d
構造一個堆積條形圖(或箭頭圖),最好使用ggplot2
,對於每個id
。帶有一些負值和排序類別的堆疊條形圖
特點是,我想堆棧跟隨列訂購v0
第一,z1
第二和第三z2
(數據是在寬格式)。但請注意,z2
有一些負值。所以它應該以某種方式由箭頭或其他東西表示,從堆棧頂部向下(或向上,取決於z3
的值)。
有沒有辦法做到這一點?
d <- data.frame(
id=c('AAA','BBB','CCC','DDD','EEE','FFF'),
v0 =c(50 , 60 , 40 , 50 , 70 ,40),
z1 =c(20 , 15 , 5 , 40 , 5 , 40),
z2 =c(-10 , 5 , 10 ,-20 , 15 ,-15)
)
#normaly people transform the data to long format:
d %>% gather(ef_type, value,v0:d2) %>%
ggplot(aes(...) + geom_bar(...)
OBS:注意,這是從答案this related question,其中,所述列的順序並不重要不同,負值在y軸的負部分表示。
EDIT1:基於@fanli答案波紋管我嘗試下面的代碼:
d %>% select(id,v0,z1) %>% gather(ef_type, value,v0:z1) -> df
d %>% mutate(z2_start=v0+z1,z2_end=v0+z1+z2) %>% select(id,z2_start,z2_end) -> df2
ggplot(df, aes(x=id,y=value,fill=ef_type))+ geom_bar(stat = "identity") +
+ geom_segment(data=df2, aes(x=id, xend=id, y=z2_start, yend=z2_end), arrow = arrow(length = unit(0.02, "npc")))
#which results in the error:
Error: ggplot2 doesn't know how to deal with data of class uneval
涼爽。這或多或少是我想要的。 Cathegory z2不應該顯示爲條形,只能作爲箭頭,從「v0 + z1」開始,以「v0 + z1-z2」結尾 – LucasMation
這太棒了!該圖表剩下的唯一問題是,爲圖例賦予某些值會很好。可以說標籤是v0:「base level」; z1:「效果A」; z2(箭頭)「效果B」。這個ne能否以某種方式包含在圖例中? – LucasMation
你在使用reshape2 :: melt嗎?我嘗試複製您的代碼在我的電腦,但我得到一個錯誤:錯誤+ geom_bar(統計=「身份」,位置=「堆棧」): 一元運算符 – LucasMation