2017-03-13 30 views
3

我想使用下面的數據以創建可視化:Barplot - 兩個杆彼此相鄰和barplots在單獨的窗口

> dput(data) 
structure(c(1264L, 2190L, 2601L, 1441L, 1129L, 2552L, 1820L, 306L, 
      1124L, 298L, 233L, 493L, 2316L, 461L, 294L, 238L, 15L, 89L, 152L, 
      163L, 116L, 60L, 80L, 31L, 27L, 41L, 33L, 58L, 55L, 89L, 7L, 
      7L, 13L, 23L, 54L), .Dim = c(7L, 5L), .Dimnames = list(c("Mark1", 
                    "Mark2", "Greg1", "Greg2", "Tom1", "Tom2", "Martin"), c("1", "2", "3", "4", 
                                "5"))) 

我想對其進行可視化在一定程度上類似於barplots的方式如下圖所示:

Example

然而,而不是堆積在彼此的頂部吧,我想給barplots將對方。總共應該有4個窗口。這裏的窗口是指一組兩個barplots(例如用於標記1和標記2),或在馬丁的情況下,單個的一個。

這樣可以很清楚:

Mark1和標誌2 - 應在/在同一個窗口

Greg1和Greg2上 - 如上

TOM1和Tom2 - 如上

馬丁 - 窗口由單一barplot的

+0

在你的數據,是在表中的列「1」到「5」的條形圖的x軸,與該值的條形的高度? – Rahul

+0

@沙溪肝只是要清楚,你認爲你的問題連接爲一個barplot可視化/窗口? –

+0

@Rahul - 確切地說。 1至5是x值,表中的數字是條的高度。分析僧侶 - 這是我的解釋。不是一個完美的「措辭」。 –

回答

5

下面是使用包裝從tidyverse宇宙做這件事:

library(ggplot2) 
library(dplyr) 
library(tibble) 
library(stringr) 
library(reshape2) 

# d <- your dput data 

melt(d) %>% 
    as_tibble() %>% 
    select(name_input=Var1, 
     x=Var2, 
     value) %>% 
    mutate(name=as.factor(str_extract(string = name_input, 
          pattern = '\\D*')), 
     id=str_extract(string = name_input, 
         pattern = '\\d'), 
     id=as.factor(ifelse(is.na(id),1,as.numeric(id)))) %>% 
    ggplot(aes(x=x,y=value))+ 
    geom_bar(stat = 'identity',aes(fill=id),position='dodge')+ 
    facet_grid(facets = .~name) 

ggplot result

+0

在我的代碼,我已經把馬丁是一個默認的ID = 1,但是這可以根據需要進行更改。 – Rahul

+0

如何更改酒吧的顏色?我想讓它們保持黑色/灰色。 –

+1

@ShaxiLiver只需添加'+ scale_fill_grey()'的'ggplot()'代碼 – Rahul

2

隨着tidyverseextract/gather與數據幀data(注意Martin是單獨的和沒有id,用於其中第三fill顏色):

library(tidyverse) 
library(ggplot2) 
as.data.frame(data) %>% 
    mutate(name=rownames(data)) %>% 
    extract(name, c('name','id'),'([[:alpha:]]+)(\\d?)') %>% 
    gather(variable, value, -name, -id) %>% 
    ggplot(aes(variable, value, fill=id)) + 
    geom_bar(stat='identity', position='dodge') + 
    facet_wrap(~name) 

enter image description here

[編輯]

as.data.frame(data) %>% 
    mutate(name=rownames(data)) %>% 
    extract(name, c('name','id'),'([[:alpha:]]+)(\\d?)', convert=TRUE) %>% 
    replace_na(list(id=1)) %>% 
    gather(variable, value, -name, -id) %>% 
    ggplot(aes(variable, value, fill=as.factor(id))) + 
    geom_bar(stat='identity', position='dodge') + 
    facet_wrap(~name) 

enter image description here

+0

對不起,遲到的答覆。如何爲Martin設置相同的顏色?我想在這種情況下使用綠色。 –

+1

@Shaxi肝更新根據您的要求 –