Python 如何使用R ggplot2从R基表中创建一个堆叠直方图作为带有行颜色图案的条形码打印

Python 如何使用R ggplot2从R基表中创建一个堆叠直方图作为带有行颜色图案的条形码打印,python,r,ggplot2,matrix,plot,Python,R,Ggplot2,Matrix,Plot,此问题最初已发布,尚未找到解决方案 在这里,我想问一下在保持整体布局的同时,如何解决着色问题,可能使用ggplot2或其他方法 简单地说,我想画一些类似于条形码图的东西,用条高反映行-列差异,条宽反映列之间的行和 test.matrix <- matrix(c(70, 120, 65, 140, 13, 68, 46, 294, 52, 410), ncol=2, byrow=TRUE) rownames(test.matrix) <- c("BC.1", &qu

此问题最初已发布,尚未找到解决方案

在这里,我想问一下在保持整体布局的同时,如何解决着色问题,可能使用ggplot2或其他方法

简单地说,我想画一些类似于条形码图的东西,用条高反映行-列差异,条宽反映列之间的行和

test.matrix <- matrix(c(70, 120, 65, 140, 13, 68, 46, 294, 52, 410), ncol=2, byrow=TRUE)
rownames(test.matrix) <- c("BC.1", "BC.2", "GC", "MO", "EB")
colnames(test.matrix) <- c("12m","3m")
test.matrix <- as.table(test.matrix)

test.matrix
     12m  3m
BC.1  70 120
BC.2  65 140
GC    13  68
MO    46 294
EB    52 410

plot(test.matrix)

test.matrix可以使用
ggplot2
tidyverse
功能尝试这种方法:

library(tidyverse)
#Code
test.matrix %>% as.data.frame.matrix %>% rownames_to_column('Var') %>%
  pivot_longer(-Var) %>%
  mutate(name=factor(name,levels = rev(unique(name)),ordered = T)) %>%
  ggplot(aes(x=name,y=value,fill=Var))+
  geom_bar(stat='identity',color='black',position='fill')+
  coord_flip()+
  scale_fill_manual(values=c('BC.1'="gold",'BC.2'="yellowgreen",
                             'GC'="navy",'MO'="royalblue",'EB'="orangered"))+
  theme(axis.text.x = element_blank(),
        axis.ticks.x = element_blank())
输出:

另一个选择是:

#Code 2
test.matrix %>% as.data.frame.matrix %>% rownames_to_column('Var') %>%
  pivot_longer(-Var) %>%
  mutate(name=factor(name,levels = rev(unique(name)),ordered = T)) %>%
  ggplot(aes(x=name,y=value,fill=Var))+
  geom_bar(stat='identity',color='black')+
  coord_flip()+
  facet_wrap(name~.,scales = 'free',strip.position = 'left',ncol = 1)+
  scale_fill_manual(values=c('BC.1'="gold",'BC.2'="yellowgreen",
                             'GC'="navy",'MO'="royalblue",'EB'="orangered"))+
  theme(axis.text.y = element_blank(),
        axis.ticks.y = element_blank())
输出:


这接近我需要的,但此代码不再显示列与列之间的差异。@fuchsdeluxe让我添加另一个可能的解决方案。@fuchsdeluxe我添加了一个更新。希望能对大家有用!这绝对是有用的,Thx很多!有没有办法调整x刻度,使两个面都具有相同的刻度?@fuchsluxe是的,只需从
facet\u wrap()
中删除
scales='free'
,您将拥有一个通用刻度。我希望这对你有帮助!
#Code 2
test.matrix %>% as.data.frame.matrix %>% rownames_to_column('Var') %>%
  pivot_longer(-Var) %>%
  mutate(name=factor(name,levels = rev(unique(name)),ordered = T)) %>%
  ggplot(aes(x=name,y=value,fill=Var))+
  geom_bar(stat='identity',color='black')+
  coord_flip()+
  facet_wrap(name~.,scales = 'free',strip.position = 'left',ncol = 1)+
  scale_fill_manual(values=c('BC.1'="gold",'BC.2'="yellowgreen",
                             'GC'="navy",'MO'="royalblue",'EB'="orangered"))+
  theme(axis.text.y = element_blank(),
        axis.ticks.y = element_blank())