2016-05-14 50 views
0

我需要生成一個barplot它由以下n個組:R:barplot與堆疊2個值

我有列csv文件:類別原因時間價值

  • 類別有7個可能的名字(C1 ... C7)
  • 原因有8個可能的名字(N1 ... n8)
  • 時間有2個可能的名稱(T1,T2)
  • 值是時間值

實施例的數據集:

Category Reason Time Value 
C1 R1 T1 1 
C2 R1 T2 2 
C1 R2 T1 3 
C2 R2 T2 4 
C1 R3 T1 8 
C2 R3 T2 0 

我想要實現什麼: 柱狀圖它由3個基團(即每個REASON組一個組),其中每個組包含2個堆積條(即每個CATEGORY的條),其中每個條描述頂部的T1和T2。

我想我需要爲R: bar plot with two groups, of which one is stacked類似的東西,但不幸的是我很新的R.

與此類似的圖片,其中有在我的例子來說:

  • 5類
  • 3原因
  • 4倍值
  • %的作爲時間值

Example

任何幫助表示讚賞。

+0

它是一個良好的習慣爲包括[再現的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-例如/ 5963610)在你的問題。此外:添加您嘗試過的內容以及可能的錯誤信息也非常感謝。包括這些方面將使其他人更容易幫助你,並增加你找到答案的機會。 – Jaap

+0

除了加載csv並在圖上顯示數據框之外,我不知道更多,比如如何將特定列組合在一起。 –

回答

0

我會向你介紹的ggplot包R,它可能給你一個更好的可視化問題的方法,即使它不能解決你的問題租金問題,ggplot將是在R中啓動可視化的最簡單方法。

第一代碼:

library將加載ggplotscales

library(ggplot2) 
library(scales) 

生成的僞數據上x軸在γ-設置

df = expand.grid(factor(c("C1","C2","C3","C4","C5","C6","C6","C8")), 
       factor(c("R1","R2","R3","R4","R5","R6","R7")), 
       factor(c("T1","T2"))) 

劇情與CategoryValue軸,Time作爲需要的堆疊酒吧geom_bar()ggplot可以使用facets,而不是在條形圖本身上進行分組,這會產生更清晰的結果。 scale_y_continuous()將您的y軸轉換爲百分比。

ggplot(data = df, aes(x=Reason, y=Value, fill = Time)) + 
    geom_bar(stat='identity') + 
    facet_wrap(~Category) + 
    scale_y_continuous(labels = percent) + 
    theme(panel.background = element_rect(fill = "white")) 

enter image description here

+0

我在windows上得到:庫(ggplot2)中的錯誤:沒有名爲'ggplot2'的軟件包 –

+1

您需要先安裝軟件包,然後才能使用它們。運行'install.packages(ggplot2)'和'install.packages(scales)' – Divi

+0

這個工程,我更喜歡網格風格,但有沒有辦法有一個白色的背景,並有每個原因的X軸(我不需要x軸上的1..8(這是類別),但是我需要每個組中唯一的原因) –

0

你介意分享一個你的.csv文件的版本嗎?如果沒有我的猜測看起來是這樣的......

p_csv <- read.table(file.csv, header = T, sep = ",") 

library(ggplot2) 
#using mtcars 
ggplot(data = mtcars, aes(x = as.factor(cyl))) + 
geom_bar(aes(fill = as.factor(gear))) 

我「很高興幫助更多,如果我可以看到一些測試數據:)

還沒100%你正在嘗試用做時間價值,但是這可能就足夠了。我調整你的樣本數據略微所以時間和類別將不會始終保持同步。

df <- data.frame("category" = c("C1", "C2", "C1", "C2", "C1", "C2"), 
      "reason" = c("R1", "R1", "R2", "R2", "R3", "R3"), 
      "time" = c("T1", "T1", "T1", "T2", "T2", "T2"), 
      "value" = c(1,2,3,4,8,0)) 

ggplot(data = df, aes(x = as.factor(reason), y = value)) + 
geom_bar(aes(fill = as.factor(category)), stat = "identity") + 
facet_grid(~time) 
+0

它是機密數據,但我需要使用barplot功能。我將嘗試重新創建示例csv –

+0

我已在帖子中添加了一個數據集示例。 –

+0

感謝您的努力和時間,但是您是否知道如何使用R中的barplot函數做到這一點。此外,時間值只是一個將顯示在y軸上的整數,x軸將包含不同組的名稱。 –