这不应该这么复杂!在R中绘制数据框的问题似乎一遍又一遍地被问到,但没有一个解决方案适合我。我试图从这个数据框创建一个简单的堆叠条形图:
category a b
foo 2 0
bar 1 1
spam 0 1
a
和b
应该是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=
解决方案后,我回到了早先的尝试,我认为这是错误的,因为它只是一个巨大的传说。事实证明,传说是如此巨大,它将我的图形聚集到一边,所以它是不可见的。
答案 0 :(得分:2)
基于两个观察结果,我可以建议一种不同的方法:
那么如何根据变量(我假设的群体)绘制组织并按值着色。我使用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()