gpt4 book ai didi

r - 使用 ggplot2 包将图例添加到 "geom_bar"

转载 作者:行者123 更新时间:2023-12-03 23:48:11 25 4
gpt4 key购买 nike

我是R的新手,所以请原谅我的无知。我制作了一个伪堆叠条形图,其中我使用 geom_bar 绘制了 4 组条形图。三种橡树(QUAG、QUKE、QUCH)有 4 个健康状态类别(活、死、感染和草皮死)。

我的代码如下:

x <- as.data.frame(list(variable=c("QUAG", "QUKE", "QUCH"), alive = c(627,208,109),  infected = c(102,27,0), dead = c(133,112,12), sod.dead=c(49,8,0)))

x.plot = ggplot(x, aes(variable, alive)) + geom_bar(fill="gray85") +
geom_bar(aes(variable,dead), fill="gray65") +
geom_bar(aes(variable, infected), fill="gray38") +
geom_bar(aes(variable, sod.dead), fill="black")+
opts(panel.background = theme_rect(fill='gray100'))
x.plot

现在我想制作一个图例,显示哪种灰色阴影与树状态相关,即“gray65”是“死树”等。过去一个小时我一直在尝试,但无法让它工作。

最佳答案

我看到@Brandon Bertelsen 发布了一个很好的答案。我想添加一些代码来解决原始帖子中提到的其他细节:

  • 在您 reshape 数据并将健康状况映射到 fill 之后, ggplot 将自动创建图例。
  • 我建议使用 scale_fill_manual()获得原始帖子中提到的确切灰色。
  • theme_bw()是一个方便的功能,可以让您的绘图快速获得黑白外观。
  • 可以通过使用 levels 指定所需顺序来控制因子水平/颜色的绘制顺序。 factor() 的论点.
  • 闪避的条形图(而不是堆叠的)可能对此数据集有一些优势。

  • library(reshape2)
    library(ggplot2)

    x <- as.data.frame(list(variable=c("QUAG", "QUKE", "QUCH"),
    alive=c(627, 208, 109), infected=c(102, 27, 0),
    dead=c(133, 112, 12), sod.dead=c(49, 8, 0)))

    # Put data into 'long form' with melt from the reshape2 package.
    dat = melt(x, id.var="variable", variable.name="status")

    head(dat)
    # variable status value
    # 1 QUAG alive 627
    # 2 QUKE alive 208
    # 3 QUCH alive 109
    # 4 QUAG infected 102
    # 5 QUKE infected 27
    # 6 QUCH infected 0

    # By manually specifying the levels in the factor, you can control
    # the stacking order of the associated fill colors.
    dat$status = factor(as.character(dat$status),
    levels=c("sod.dead", "dead", "infected", "alive"))

    # Create a named character vector that relates factor levels to colors.
    grays = c(alive="gray85", dead="gray65", infected="gray38", sod.dead="black")

    plot_1 = ggplot(dat, aes(x=variable, y=value, fill=status)) +
    theme_bw() +
    geom_bar(position="stack") +
    scale_fill_manual(values=grays)

    ggsave(plot=plot_1, filename="plot_1.png", height=5, width=5)

    enter image description here
    # You may also want to try a dodged barplot.
    plot_2 = ggplot(dat, aes(x=variable, y=value, fill=status)) +
    theme_bw() +
    geom_bar(position="dodge") +
    scale_fill_manual(values=grays)

    ggsave(plot=plot_2, filename="plot_2.png", height=4, width=5)

    enter image description here

    关于r - 使用 ggplot2 包将图例添加到 "geom_bar",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13353396/

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