gpt4 book ai didi

r - 如何使用ggplot2绘制多个区域图?

转载 作者:行者123 更新时间:2023-12-04 08:35:10 25 4
gpt4 key购买 nike

我正在尝试实现一个复杂的数据可视化,如下图所示。但是使用 R 和 ggplot2。
enter image description here
观察到:

  • 每组数据可视化上方有6个不同的组“非洲”、“亚洲”、“欧洲”等;
  • 1 套,包括每个大陆的 3 个区域地块;
  • x 轴仅出现在一组,大洋洲的最后一行
  • 图例只出现一次,在上面。
  • 图上方有两个图例 - 风险组和条件
  • 如您所见,非洲有百万人口(一张图表)、风险群体和状况。

  • 我试图用我的 2 个数据集获得相同的结果。例如,对于印度,我想要在一行中,一个症状图表和第二个合并症图表。英国和巴基斯坦也是如此。以下是创建的一些假数据集:
  • https://github.com/gabrielburcea/stackoverflow_fake_data/blob/master/fake_symptoms.csv
  • https://github.com/gabrielburcea/stackoverflow_fake_data/blob/master/fake_comorbidities%202.csv

  • 我试图通过为每个国家/地区创建小数据集来获得一些东西,然后创建 2 个图,一个用于症状,另一个用于合并症,然后将它们加在一起。但这是一项繁重的工作,还会出现许多其他问题。
    采用这种方法可能会出现问题。一个例子在这里:
    india_count_symptoms <- count_symptoms %>%
    dplyr::filter(Country == "India")

    india_count_symptoms$symptoms <- as.factor(india_count_symptoms$symptoms)
    india_count_symptoms$Count <- as.numeric(india_count_symptoms$Count)

    library(viridis)

    india_sympt_plot <- ggplot2::ggplot(india_count_symptoms, ggplot2::aes(x = age_band, y = Count, group = symptoms, fill = symptoms)) +
    ggplot2::geom_area(position = "fill", color = "white") +
    ggplot2::scale_x_discrete(limits = c("0-19", "20-39", "40-59","60+"), expand = c(0, 0)) +
    ggplot2::scale_y_continuous(expand = expansion(mult = c(0, 0.1))) +
    viridis::scale_fill_viridis(discrete = TRUE)

    india_sympt_plot
    这就是我得到的:
    enter image description here
    正如你所看到的:
    一种。年龄范围没有很好地对齐
    湾如果我采用这种方法,我最终会为每个国家的每个情节都有传说
    C。 y 轴不给我计数,它一直到 1. 并且不直观地正确。
    d.对合并症做同样的事情,然后得到与上述 3 点相同的问题。
    因此,我想采用一种更简单的方法来获得与第一张图类似的图,并表达条件:从 1 到 5 分,但针对我的 3 个国家以及症状和合并症。然而,我的真实数据集更大,有 5 个国家,但具有相同的绘图 - 症状和合并症。
    在 RStudio 中使用 ggplot2 是否有更好的方法来实现这一点?

    最佳答案

    这是一个好的开始 - 我不清楚你的一些目标,但这个答案应该能让你克服眼前的障碍。

    ## read in your data
    count_symptoms = readr::read_csv("https://github.com/gabrielburcea/stackoverflow_fake_data/raw/master/fake_symptoms.csv")

    ## as mentioned in comments, removing `position = 'fill'` lets your chart show counts.
    ## (I'm skipping the unnecessary data conversions)
    ## And I'm removing the `ggplot2::` to make the code more readable...
    ## No other changes are made

    india_count_symptoms <- count_symptoms %>%
    dplyr::filter(Country == "India")

    india_sympt_plot <- ggplot(india_count_symptoms, aes(x = age_band, y = Count, group = symptoms, fill = symptoms)) +
    geom_area(color = "white") +
    scale_x_discrete(limits = c("0-19", "20-39", "40-59","60+"), expand = c(0, 0)) +
    scale_y_continuous(expand = expansion(mult = c(0, 0.1))) +
    viridis::scale_fill_viridis(discrete = TRUE)
    enter image description here
    现在,不要为每个国家/地区制作单独的图,让我们使用 facets:
    ## same plot code as above, but we give it the whole data set
    ## and add the `facet_grid` on
    ggplot(count_symptoms, aes(x = age_band, y = Count, group = symptoms, fill = symptoms)) +
    geom_area(color = "white") +
    scale_x_discrete(limits = c("0-19", "20-39", "40-59","60+"), expand = c(0, 0)) +
    scale_y_continuous(expand = expansion(mult = c(0, 0.1))) +
    viridis::scale_fill_viridis(discrete = TRUE) +
    facet_grid(Country ~ .)
    enter image description here
    请注意,我们只有一个图例。您可以 re-position it easily as shown here .可能我要做的下一个更改是添加参数 labels = scales::comma_format在您的 scale_y_continuous .我不知道你的 x 轴标签有什么问题。
    对于完整的数字,我建议做一个 facet_grid为每一列绘图,然后使用 patchwork将它们组合成一个图像。看看你能在此基础上走多远,如果你仍然有问题,请提出一个专注于下一步的新问题。

    关于r - 如何使用ggplot2绘制多个区域图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64836417/

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