gpt4 book ai didi

在 geom_tile 的颜色条指南上调整大小/手动输入中断并替换 y 轴标签

转载 作者:行者123 更新时间:2023-12-03 19:09:43 24 4
gpt4 key购买 nike

我正在重新审视大约一年前遇到的这个问题。我希望我的“颜色条”指南能够有效地显示在对数刻度上,以便在查看时得出的结论是越来越暗的蓝色值反射(reflect)了更大的意义。

使用以下代码,我生成以下图像:

pz <- ggplot(dat.m, aes(x=variable,y=Category)) +
geom_tile(aes(fill=value)) +
xlab(NULL) + ylab(NULL) +
scale_fill_gradientn(colours=c("#000066","#0000FF","#DDDDDD","white"),
values=c(0,0.05,0.050000000000001,1.0),
breaks=c(0, 0.000001, 0.01, 0.05, 1),
guide = "colourbar") +
theme_bw()+
theme(panel.background = element_blank(),
panel.border = element_blank(),
axis.ticks.x = element_blank(),
axis.ticks.y = element_blank()) +
theme(legend.position="top",
legend.text = element_text(angle=45),
axis.text.x = element_text(angle=45)
)

colourbar

或者,我可以将其显示为“图例”而不是“颜色条”:

enter image description here

但我真正想要的是这样的:

enter image description here

我曾尝试添加 'trans="log"' (scale_fill_gradientn(trans="log")),但是我的数据中有很多零会导致问题。如果您有任何想法,将不胜感激!

以前的措辞:

我正在尝试为各种分类的不同样本制作 p 值的热图。我想在这个情节上修改两件事:
  • 我想调整我的 geom_tile 图的图例以强调图例比例的下端,同时仍然保持梯度的全谱 - 类似于它是对数比例时的外观。因此,基本上从 1.0-0.05 的白色到蓝色过渡和从 0.05-0.00 的蓝色到深蓝色过渡的大小大致相等。有没有办法可以手动调整颜色条指南?
  • 我想替换 y 轴名称,以便删除我的“空”行标签。请注意,类别在此处仅表示为字母,但在我的真实数据集中,它们是长名称。我已经插入了“虚拟”数据行以将分类拆分为夹头,并命令每个块中的图块从最重要到不重要 - 我相信有一个更好的解决方案,但这是我之后想出的我在堆栈溢出中发现的其他想法的许多失败尝试!我尝试用 scale_y_discrete 标记它们,但这与上述顺序混淆了。

  • 对这些问题中的任何一个问题的帮助将不胜感激!

    sample_heatmap

    这是一个示例数据集:
    dput(dat.m)
    structure(list(Category = structure(c(12L, 11L, 10L, 9L, 8L,
    7L, 6L, 5L, 4L, 3L, 2L, 1L, 12L, 11L, 10L, 9L, 8L, 7L, 6L, 5L,
    4L, 3L, 2L, 1L, 12L, 11L, 10L, 9L, 8L, 7L, 6L, 5L, 4L, 3L, 2L,
    1L), class = "factor", .Label = c("j", "i", "empty2", "h", "empty1",
    "g", "f", "e", "d", "c", "b", "a")), variable = structure(c(1L,
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L,
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
    3L, 3L, 3L), .Label = c("b2", "c1", "c2"), class = "factor"),
    value = c(7.40214650772221e-06, 0.0075828339, 0.1825924627,
    0.0384381317, 0.0440256659, 0.3659284985, 0.9777569144, 1,
    0.0075828339, 1, 0.2193606406, 0.3659284985, 0.0004289756,
    0.0011541045, 0.0004289756, 0.4400885491, 0.6121402215, 0.6724032426,
    0.2735924085, 1, 0.018824582, 1, 0.4386503891, 0.4249526456,
    1.05094571578633e-05, 0.0027216795, 0.715979827, 0.0050376405,
    0.7473334763, 0.9053300832, 1, 1, 0.0015392848, 1, 0.039679469,
    0.0950327519)), .Names = c("Category", "variable", "value"
    ), row.names = c(NA, -36L), class = "data.frame")

    这是我的代码:
    col_blue <- c("#FFFFFF","#000099","#000066","#000033")
    ggplot(dat.m, aes(x=variable,y=Category)) +
    geom_tile(aes(fill=value)) +
    xlab(NULL) + ylab(NULL) +
    scale_fill_gradientn(colours=col_blue, values=c(1,0.05,0.01,0),guide="colorbar") +
    theme_mary(base_size=12)

    更新:

    所以现在我已经修改了代码,结果如下。我越来越接近我希望实现的目标,但我想使用颜色条的比例来更清楚地显示 0.05-0.0 的渐变。
    col_blue <- c("#FFFFFF","#000099","#000066","#000033")
    ggplot(dat.m, aes(x=variable,y=Category)) +
    geom_tile(aes(fill=value)) +
    xlab(NULL) + ylab(NULL) +
    scale_fill_gradientn(colours=col_blue, values=c(1,0.05,0.01,0), guide=FALSE) +
    scale_colour_gradientn(guide = "colourbar", limits = c(0,1),breaks=c(1,0.05,0.01,0),values=c(1,0.05,0.01,0),colours=c("#FFFFFF","#000099","#000066","#000033"))

    image2

    最佳答案

    我们可以告诉scale_fill_gradientn不显示带有 guide=FALSE 的指南,然后手动添加我们自己的限制设置为 c(0,0.1) (或任何你想要的范围)。

    ggplot(dat.m, aes(x=variable,y=Category)) +
    geom_tile(aes(fill=value)) +
    xlab(NULL) +
    ylab(NULL) +
    scale_fill_gradientn(colours=col_blue, values=c(1,0.05,0.01,0), guide=FALSE) +
    scale_colour_gradientn(guide = "colorbar", limits = c(0,0.1), colours=col_blue)

    enter image description here

    至于你的第二点,为什么不在绘图之前从源数据中删除“空”行?

    关于在 geom_tile 的颜色条指南上调整大小/手动输入中断并替换 y 轴标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20505946/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com