R中数据帧的堆积条形图(类别的颜色,不是计数)

时间:2018-04-17 02:51:21

标签: r ggplot2

这不应该这么复杂!在R中绘制数据框的问题似乎一遍又一遍地被问到,但没有一个解决方案适合我。我试图从这个数据框创建一个简单的堆叠条形图:

category     a    b
foo          2    0
bar          1    1
spam         0    1

ab应该是x轴标签,而foo, bar, spam应该是条形图中的堆叠颜色。

我最接近的是:

library(reshape2)

ggplot(melt(df), aes(variable, value)) + geom_bar(stat='identity', aes(fill=value))

这为我提供了x轴上的列名,但堆叠的彩色条表示每个类别的总计数而不是堆叠的颜色,foo, bar, spam各一个。

我没有附加任何特定的方法,我只想从我的数据帧中堆积条形图。

这是来自dput的文件:

structure(list(category = c("bar", "foo", "spam"), a = c(1L, 
2L, 0L), b = c(1L, 0L, 1L)), .Names = c("category", "a", "b"), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -3L), spec = structure(list(
    cols = structure(list(category = structure(list(), class = c("collector_character", 
    "collector")), a = structure(list(), class = c("collector_integer", 
    "collector")), b = structure(list(), class = c("collector_integer", 
    "collector"))), .Names = c("category", "a", "b")), default = structure(list(), class = c("collector_guess", 
    "collector"))), .Names = c("cols", "default"), class = "col_spec"))

以上作品,它(我认为)创建的方式与下面更大的df完全相同:

structure(list(tissue = c("Adipose_Subcutaneous", "Adipose_Visceral_Omentum", 
"Adrenal_Gland", "Artery_Aorta", "Artery_Coronary", "Artery_Tibial", 
"Brain_Amygdala", "Brain_Anterior_cingulate_cortex_BA24", "Brain_Caudate_basal_ganglia", 
"Brain_Cerebellar_Hemisphere", "Brain_Cerebellum", "Brain_Cortex", 
"Brain_Frontal_Cortex_BA9", "Brain_Hippocampus", "Brain_Hypothalamus", 
"Brain_Nucleus_accumbens_basal_ganglia", "Brain_Putamen_basal_ganglia", 
"Brain_Spinal_cord_cervical_c-1", "Brain_Substantia_nigra", "Breast_Mammary_Tissue", 
"Cells_EBV-transformed_lymphocytes", "Cells_Transformed_fibroblasts", 
"Colon_Sigmoid", "Colon_Transverse", "Esophagus_Gastroesophageal_Junction", 
"Esophagus_Mucosa", "Esophagus_Muscularis", "Heart_Atrial_Appendage", 
"Heart_Left_Ventricle", "Liver", "Lung", "Minor_Salivary_Gland", 
"Muscle_Skeletal", "Nerve_Tibial", "Ovary", "Pancreas", "Pituitary", 
"Prostate", "Skin_Not_Sun_Exposed_Suprapubic", "Skin_Sun_Exposed_Lower_leg", 
"Small_Intestine_Terminal_Ileum", "Spleen", "Stomach", "Testis", 
"Thyroid", "Uterus", "Vagina", "Whole_Blood"), BEB = c(8L, 1L, 
0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 5L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 
0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), CDX = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L), 
    CEU = c(8L, 8L, 1L, 2L, 0L, 2L, 0L, 2L, 2L, 0L, 0L, 2L, 0L, 
    0L, 2L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 5L, 2L, 6L, 5L, 6L, 3L, 
    0L, 0L, 6L, 0L, 1L, 5L, 2L, 0L, 2L, 0L, 5L, 5L, 0L, 0L, 2L, 
    1L, 7L, 0L, 0L, 2L), CHB = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), CLM = c(1L, 
    0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 2L, 0L, 0L, 0L, 2L, 1L, 0L, 1L, 0L, 11L, 
    0L, 2L, 1L, 0L, 1L, 1L, 0L, 0L, 3L, 0L, 0L, 0L, 0L, 3L, 0L, 
    0L, 0L), FIN = c(9L, 4L, 2L, 3L, 0L, 13L, 0L, 0L, 0L, 6L, 
    4L, 2L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 9L, 3L, 8L, 0L, 4L, 6L, 
    12L, 15L, 3L, 0L, 0L, 11L, 0L, 15L, 10L, 0L, 10L, 0L, 0L, 
    8L, 14L, 0L, 8L, 2L, 17L, 13L, 1L, 0L, 2L), GBR = c(15L, 
    11L, 2L, 14L, 1L, 14L, 0L, 0L, 6L, 0L, 3L, 1L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 3L, 1L, 4L, 4L, 6L, 2L, 20L, 18L, 8L, 6L, 
    2L, 13L, 0L, 22L, 21L, 0L, 4L, 0L, 1L, 9L, 20L, 0L, 4L, 8L, 
    9L, 11L, 0L, 0L, 10L), GIH = c(2L, 51L, 0L, 59L, 0L, 5L, 
    0L, 1L, 0L, 1L, 4L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 50L, 
    1L, 53L, 0L, 2L, 2L, 97L, 53L, 4L, 1L, 0L, 24L, 1L, 90L, 
    58L, 0L, 3L, 0L, 1L, 54L, 77L, 0L, 0L, 0L, 54L, 20L, 0L, 
    1L, 17L), IBS = c(7L, 3L, 4L, 1L, 0L, 6L, 0L, 0L, 0L, 0L, 
    0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 2L, 1L, 2L, 0L, 1L, 2L, 
    11L, 7L, 2L, 1L, 0L, 7L, 0L, 8L, 7L, 0L, 6L, 0L, 0L, 5L, 
    5L, 1L, 1L, 0L, 3L, 12L, 0L, 0L, 10L), JPT = c(0L, 0L, 0L, 
    0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 2L
    ), KHV = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 1L), MXL = c(2L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    2L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 2L, 0L, 2L, 1L, 0L, 0L, 
    0L, 0L, 2L, 0L, 0L, 0L, 0L, 4L, 0L, 0L, 0L, 1L), PEL = c(1L, 
    0L, 0L, 0L, 0L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 3L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 6L, 3L, 0L, 0L, 3L, 
    0L, 5L, 1L, 0L, 0L, 0L, 3L, 1L, 0L, 0L, 1L, 0L, 1L, 3L, 0L, 
    0L, 0L), PJL = c(5L, 2L, 1L, 1L, 0L, 4L, 0L, 0L, 0L, 0L, 
    1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 
    0L, 1L, 0L, 1L, 0L, 2L, 0L, 0L, 4L, 1L, 1L, 1L, 0L, 0L, 5L, 
    0L, 0L, 1L, 4L, 10L, 1L, 0L, 1L), PUR = c(1L, 0L, 1L, 0L, 
    0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 
    0L, 0L, 4L, 0L, 0L, 0L, 4L, 3L, 0L, 3L, 0L, 1L, 1L, 3L, 3L, 
    0L, 0L, 1L, 0L, 1L, 2L, 0L, 0L, 0L, 0L, 20L, 0L, 0L, 1L), 
    STU = c(17L, 28L, 9L, 22L, 0L, 28L, 0L, 0L, 12L, 4L, 12L, 
    2L, 0L, 4L, 4L, 1L, 0L, 0L, 0L, 13L, 0L, 6L, 26L, 10L, 9L, 
    26L, 36L, 23L, 12L, 9L, 9L, 0L, 62L, 18L, 1L, 5L, 0L, 9L, 
    44L, 57L, 0L, 18L, 1L, 0L, 21L, 9L, 0L, 9L), TSI = c(13L, 
    11L, 5L, 8L, 6L, 12L, 3L, 1L, 5L, 15L, 9L, 3L, 1L, 1L, 2L, 
    5L, 6L, 1L, 3L, 10L, 3L, 15L, 18L, 10L, 10L, 16L, 20L, 20L, 
    13L, 0L, 14L, 4L, 19L, 22L, 8L, 14L, 9L, 4L, 13L, 21L, 4L, 
    9L, 9L, 9L, 21L, 6L, 4L, 13L), Category = c("1", "2", "3", 
    "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", 
    "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", 
    "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", 
    "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", 
    "45", "46", "47", "48")), .Names = c("tissue", "BEB", "CDX", 
"CEU", "CHB", "CLM", "FIN", "GBR", "GIH", "IBS", "JPT", "KHV", 
"MXL", "PEL", "PJL", "PUR", "STU", "TSI", "Category"), row.names = c(NA, 
-48L), spec = structure(list(cols = structure(list(tissue = structure(list(), class = c("collector_character", 
"collector")), BEB = structure(list(), class = c("collector_integer", 
"collector")), CDX = structure(list(), class = c("collector_integer", 
"collector")), CEU = structure(list(), class = c("collector_integer", 
"collector")), CHB = structure(list(), class = c("collector_integer", 
"collector")), CLM = structure(list(), class = c("collector_integer", 
"collector")), FIN = structure(list(), class = c("collector_integer", 
"collector")), GBR = structure(list(), class = c("collector_integer", 
"collector")), GIH = structure(list(), class = c("collector_integer", 
"collector")), IBS = structure(list(), class = c("collector_integer", 
"collector")), JPT = structure(list(), class = c("collector_integer", 
"collector")), KHV = structure(list(), class = c("collector_integer", 
"collector")), MXL = structure(list(), class = c("collector_integer", 
"collector")), PEL = structure(list(), class = c("collector_integer", 
"collector")), PJL = structure(list(), class = c("collector_integer", 
"collector")), PUR = structure(list(), class = c("collector_integer", 
"collector")), STU = structure(list(), class = c("collector_integer", 
"collector")), TSI = structure(list(), class = c("collector_integer", 
"collector"))), .Names = c("tissue", "BEB", "CDX", "CEU", "CHB", 
"CLM", "FIN", "GBR", "GIH", "IBS", "JPT", "KHV", "MXL", "PEL", 
"PJL", "PUR", "STU", "TSI")), default = structure(list(), class = c("collector_guess", 
"collector"))), .Names = c("cols", "default"), class = "col_spec"), class = c("tbl_df", 
"tbl", "data.frame"))

我确实尝试使用'组织'而不是'类别'在fill=aes(df,中。它仍然给我一种颜色的酒吧和一个只是说'组织的传奇。

定位问题!!在我尝试aes(fill=解决方案后,我回到了早先的尝试,我认为这是错误的,因为它只是一个巨大的传说。事实证明,传说是如此巨大,它将我的图形聚集到一边,所以它是不可见的。

1 个答案:

答案 0 :(得分:2)

基于两个观察结果,我可以建议一种不同的方法:

  • 有太多的类别(48个组织)来区分填充颜色
  • 堆叠表明每个组织占总数的比例具有一定的相关性,我怀疑在这种情况下给出了非常不同的组织

那么如何根据变量(我假设的群体)绘制组织并按值着色。我使用df1作为数据框名称。

library(tidyverse)
df1 %>% 
  gather(variable, value, -tissue, -Category) %>% 
  ggplot(aes(tissue, variable)) + 
    geom_tile(aes(fill = value)) + 
    scale_fill_gradient2(midpoint = 50) + 
    coord_flip()

enter image description here