R语言 如何使用position_dodge2()来保持条形图的宽度?

jhkqcmku  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(176)

ggplot中的position_dodge2有一个我看不懂的行为。这个问题以前有人问过,也在tidyverse的页面上的position FAQ中,但我不明白这里发生了什么。
我有一个简单的数据集,其中包含一个数值型的Cost值,以及两个因素SEX和RACE。我制作了一个基本的条形图,如下所示:

ggplot(healthdata) +
geom_col(aes(x = RACE, y = Costs, fill=SEX), position = "dodge")

我需要确保RACE 5的宽度和其他的相同,所以我按照每个源代码所说的那样使用position_dodge2,并将preserve参数设置为“single”。然而,这就是我得到的输出。有人能帮助我理解这一点吗?

ggplot(healthdata) +
geom_col(aes(x = RACE, y = HealthcareCosts, fill=SEX), position = position_dodge2(preserve = "single"))

为什么缩放比例到处都是?我可以调整参数“padding”来使条形变粗,但我不明白将"dodge"更改为position_dodge2(preserve = "single")是如何导致图形发生这种变化的。第二种情况下的许多条中最高的条与第一种情况下的条的高度相匹配。那么,所有额外的条是什么呢?我在this page上遵循了第二个示例中的说明。

2w3rbyxf

2w3rbyxf1#

您的示例使用的是geom_col,而参考使用的是geom_bar,它们有一些关键区别- geom_colMap每个元素,但执行总成本的汇总。当使用position_dodge(preserve = "single")时,它保留每个元素的单个打印。要使其与我怀疑的内容相匹配,请执行汇总,然后使用geom_bar将其导入ggplot

mtcars |>
    group_by(cyl,vs) |>
    mutate(total = sum(mpg)) |>
    ungroup() |>
    select(cyl, vs, total) |>
    distinct() |> #important for only graphing single element 
    ggplot(aes(x = factor(cyl), y = total, fill = factor(vs))) +
    geom_bar(position = position_dodge2(preserve = "single"), stat = "identity")

相关问题