R 条形图-两个相邻的条形图,在单独的窗口中进行条形图绘制

R 条形图-两个相邻的条形图,在单独的窗口中进行条形图绘制,r,bar-chart,R,Bar Chart,我想使用以下数据创建可视化: > 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,

我想使用以下数据创建可视化:

> 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")))
我想以一种类似于下图所示条形图的方式对其进行可视化:

但是,我希望将条形图相互放置,而不是将条形图堆叠在彼此的顶部。总共应该有4个窗口。此处的窗口指的是一组两个条形图(例如,对于Mark1和Mark2)或单个条形图(对于Martin)

更清楚地说:

Mark1和Mark2-应位于同一窗口中/上

Greg1和Greg2-如上所述

Tom1和Tom2-如上所述


Martin-由单个条形图组成的窗口这里有一种方法,可以使用来自
tidyverse
universe的包来完成此操作:

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)
库(ggplot2)
图书馆(dplyr)
图书馆(tibble)
图书馆(stringr)
图书馆(E2)
#d%
as_tible()%>%
选择(名称\u输入=Var1,
x=Var2,
数值)%%>%
mutate(name=as.factor(str\u extract)(string=name\u input,
模式=“\\D*”),
id=str\u extract(string=name\u输入,
模式='\\d'),
id=as.factor(ifelse(is.na(id),1,as.numeric(id)))%>%
ggplot(aes(x=x,y=value))+
几何图形栏(stat='identity',aes(fill=id),position='dodge')+
面网格(面=.~name)

使用
tidyverse
提取/收集
和数据框
数据
(注意
马丁
是单独的,没有
id
,使用第三种
填充
颜色):

[编辑]

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)

在你的数据中,列的“1”是通过“5”的条形图的X轴,表中的值是条的高度吗?@沙溪的肝脏很清楚,你认为你的问题中的可视化/窗口是一个单独的条形图吗?@拉胡尔。1到5是x值,表中的数字是钢筋的高度。分析僧侣——这是我的解释。不是一个完美的“措辞”。在我的代码中,我将Martin保留为默认id=1,但如果需要,可以更改。如何更改条的颜色?我想让它们保持黑色/灰色。@ShaxiLiver只需在
ggplot()
code中添加一个
+刻度填充灰色()。如何为Martin设置相同的颜色?我想在这种情况下使用绿色。
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)