R语言 如何在ggplot中通过变量值改变大小?

g52tjvyc  于 2023-05-26  发布在  其他
关注(0)|答案(1)|浏览(271)

我想做的是一个热图风格的图,但它也会通过另一个变量来改变它的大小,在这种情况下,我会使用热图来表示log2FC,使用大小的差异来表示p值。我找不到任何类似的东西,所以我试着创造我自己的,并想出了这个。

library(ggplot2)
data$gene_name <- as.factor(data$gene_name)

heatmap <- ggplot(data = data, mapping = aes(x = med, y = gene_name)) +
                        geom_tile(aes(fill = log2FoldChange,size = pvalue))+

 theme_bw() + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1))+
  xlab("")+
  ylab("")

但是,p值正方形的大小相同。我想要的是让图形在它的一侧(在这种情况下是水平的,并且正方形的大小随p值而变化)。有可能吗??
日期示例:

gene_name   log2FoldChange  pvalue  med
gene 1               1,13   0,0023  ATV
gene 2               2,79   0,0014  ATV
gene 3               1,27   0,0204  ATV
gene 20              0,54   0,0023  PEN
gene 21             -0,59   0,0356  PEN
gene 22              1,97   0,0243  PEN
gene 23              1,01   0,0001  PEN
p5cysglq

p5cysglq1#

geom_tile中,size美学仅控制线条的大小(在新版本的ggplot2中,现在被linewidth取代)。图块本身不能真正改变大小,因为它们对整个空间的填充是几何表示数据的一部分。您可以使用geom_shape和正方形来按大小表示p值,使用scale_size_continuous来匹配如何最好地呈现您的数据:

data <- tibble::tribble(
  ~gene_name,   ~log2FoldChange,  ~pvalue,  ~med,
  "gene 1",               1.13,   0.0023,  "ATV",
  "gene 2",               2.79,   0.0014,  "ATV",
  "gene 3",               1.27,   0.0204,  "ATV",
  "gene 20",              0.54,   0.0023,  "PEN",
  "gene 21",             -0.59,   0.0356,  "PEN",
  "gene 22",              1.97,   0.0243,  "PEN",
  "gene 23",              1.01,   0.0001,  "PEN"
)

library(ggplot2)
data$gene_name <- as.factor(data$gene_name)

ggplot(data = data, mapping = aes(x = med, y = gene_name)) +
  geom_point(aes(fill = log2FoldChange, size = pvalue), shape = 22)+
  scale_size_continuous(range = c(1, 20)) +
  theme_bw() + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1))+
  xlab("")+
  ylab("")

相关问题