2014-07-26 84 views
0

我正在嘗試製作一個分組條形圖...進行了一些修改。條形圖+線條圖與GGPlot一張圖

我的圖表有四個「列」:季度,人員,百分比,總計百分比。我的數據示例如下所示:

|人員| Quarter |百分比|總的百分比|

| -------- | --------- | ------------ | ------------- ----- |

| A | 1 | 40%| 50%|

| A | 2 | 45%| 50%|

| A | 3 | 55%| 50%|

| A | 4 | 60%| 50%|

| B | 1 | 35%| 42%|

等等。

我已經使用此代碼成功地使我的條形圖:

ggplot(data=point3, aes(x=Person, y=Percentage, fill=Quarter)) + 
+  geom_bar(colour="black", stat="identity", position=position_dodge(), size=.3)      
+  scale_fill_hue(name="Quarter") 
+  xlab(" ") + ylab("Percentage") 
+  theme_bw() 

不過,我想改變一些東西。首先,我想擺脫x軸。每個人有四個酒吧,我想知道如何讓每個人都有更多的空間。我遇到了麻煩,因爲X軸不包含任何類型的數字。有誰知道如何做到這一點?

其次,我想爲每個人代表他們的總比例添加一條垂直線。通過這種方式,觀衆可以很容易地看到這個人在他們的年平均水平下執行了哪個季度,以及他們在哪個季度執行過多。我曾與此使用

geom_point(data=point3, aes(x=Person, y=Total Percentage)) 

在前面的代碼結束一點點成功,但是這只是增加了第二和第三條(中間)之間的點。我做了一個mock up of this using a grouped bar chart我通過Google找到。這個只有3個酒吧,但也許你可以明白。這次我遇到的一些問題是,雖然它們的尺寸相同,但條形圖的y軸爲「性能」,而線條的y軸爲「總體性能」。 R似乎並不喜歡這樣。另外,整個x軸不是數字。

我使用了ggplot2,因爲我不知道還有什麼用,但如果你知道任何技術/軟件包來完成這項工作,我很樂意改變這一點。我也知道我可能需要重塑我的數據,這也很酷。

非常感謝。

回答

0

我不得不添加到您的示例數據,使其更「完整」,並使R友好的列名稱。

point3<-structure(list(Person = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), 
.Label = c("A", "B"), class = "factor"), 
Quarter = c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), Percentage = c(40L, 
45L, 55L, 60L, 35L, 40L, 60L, 25L), TotalPercentage = c(50L, 50L, 50L, 50L, 
42L, 42L, 42L, 42L)), .Names = c("Person", "Quarter", "Percentage", 
"TotalPercentage"), class = "data.frame", row.names = c(NA, -8L)) 

然後你就可以控制與width=position_dodge(width=)的間距。然後添加欄,我將縮小的數據框傳遞到geom_segment,並將這些因子轉換爲數字,以便能夠在x軸上展開。

ggplot(data=point3, aes(x=Person, y=Percentage, fill=factor(Quarter))) + 
    geom_bar(colour="black", stat="identity", 
     position=position_dodge(width=.80), width=.5) + 
    geom_segment(data=unique(point3[,c("Person","TotalPercentage")]), 
     aes(x=as.numeric(Person)-.4, xend=as.numeric(Person)+.4, 
     y=TotalPercentage, yend=TotalPercentage), 
     inherit.aes=F, size=1.2) + 
    scale_fill_hue(name="Quarter") + 
    xlab(" ") + ylab("Percentage") + 
    theme_bw() 

這最終看起來像

enter image description here

+0

哇,你是釘。我想弄清楚你做了什麼。我的主要問題是爲什麼每個數據輸入結尾的「L」?我有點迷失在那裏。但是,嚴重的是,這真棒。謝謝。 – tsdryt

+0

我上面發佈的示例數據是從'dput'輸出的。這就是R如何喜歡編碼整數文字。如果沒有L的話,它會工作的很好 – MrFlick

1

另一種方式來做到這一點是使用geom_errorbar:

ggplot(data=point3, aes(x=Person, y=Percentage, fill=factor(Quarter))) + 
    geom_bar(colour="black", stat="identity", position=position_dodge(width=0.9), width=.8) + 
    geom_errorbar(aes(y=TotalPercentage, ymax=TotalPercentage, ymin=TotalPercentage), linetype="solid",size=1) + 
    scale_fill_hue(name="Quarter") + 
    xlab(" ") + ylab("Percentage") + 
    theme_bw() 

enter image description here