亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 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 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號