为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 R ggplot2 创建堆叠直方图作为条形码图,并具有 R 基表中的按行颜色模式

如何使用 R ggplot2 创建堆叠直方图作为条形码图,并具有 R 基表中的按行颜色模式

千巷猫影 2023-10-25 10:26:10
这个问题最初在这里发布,但尚未找到解决方案。在这里,我想询问任何解决着色问题的方法,同时保持整体绘图布局,可能使用 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  3mBC.1  70 120BC.2  65 140GC    13  68MO    46 294EB    52 410plot(test.matrix)布局_NO_颜色这正是我需要的布局,但是我无法找到一种方法来为跨列的不同行着色,它只为跨行的列着色。color.ct <- c("gold","yellowgreen","navy","royalblue","orangered")names(x = color.ct) <- rownames(test.matrix)color.ct         BC.1          BC.2            GC            MO            EB        "gold" "yellowgreen"        "navy"   "royalblue"   "orangered" plot(test.matrix, col= color.ct)布局颜色是否有任何 R 或 python 解决方案可以解决这个问题并获得与上面完全相同的绘图布局,但条形根据提供的颜色向量着色?
查看完整描述

1 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

也许可以尝试使用以下方法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())

输出:

https://img1.sycdn.imooc.com/65387cf0000120a604820351.jpg

另一种选择可以是:


#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())

输出:

https://img1.sycdn.imooc.com/65387cfe0001186504870351.jpg

查看完整回答
反对 回复 2023-10-25
  • 1 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信