gpt4 book ai didi

r - 将双变量绘制为 R 中的多个因子

转载 作者:行者123 更新时间:2023-12-04 10:53:44 26 4
gpt4 key购买 nike

首先,我还是个初学者。我正在尝试用 R 解释和绘制堆栈条形图。我已经查看了一些答案,但有些答案并非针对我的案例,而其他一些我根本不明白:

  • https://stats.stackexchange.com/questions/31597/graphing-a-probability-curve-for-a-logit-model-with-multiple-predictors
  • https://stats.stackexchange.com/questions/47020/plotting-logistic-regression-interaction-categorical-in-r
  • Plot the results of a multivariate logistic regression model in R

  • 我有一个数据集 dvl它有五列,Variant、Region、Time、Person 和 PrecededByPrep。我想对 Variant 与其他四个预测变量进行多变量比较。每列可以有两个可能的值之一:
  • 变体:elkieder .
  • 区域 = VLNL .
  • 时间:timeno time
  • 人:personno person
  • PrecededByPrep:10

  • 这是逻辑回归

    从我收集到的答案中,图书馆 ggplot2可能是最好的绘图库。我已经阅读了它的文档,但在我的一生中,我无法弄清楚如何绘制此图:如何比较 Variant与其他三个因素?

    我花了一段时间,但我在 Photoshop 中做了一些与我想要的相似的东西(虚构的值(value)!)。

    graph

    深灰色/浅灰色: Variant 的可能值
    y 轴:频率
    x 轴:每一列,分割为可能的值

    我知道制作单独的条形图, both stacked and grouped ,但基本上我不知道如何堆叠、分组条形图。 ggplot2可以使用,但如果它可以在没有我更喜欢的情况下完成。

    我认为这可以看作是一个示例数据集,尽管我不完全确定。我是 R 的初学者,我阅读了有关创建样本集的信息。
    t <- data.frame(Variant = sample(c("iedere","elke"),size = 50, replace = TRUE),
    Region = sample(c("VL","NL"),size = 50, replace = TRUE),
    PrecededByPrep = sample(c("1","0"),size = 50, replace = TRUE),
    Person = sample(c("person","no person"),size = 50, replace = TRUE),
    Time = sample(c("time","no time"),size = 50, replace = TRUE))

    我也希望情节在美学上令人愉悦。我想到的是:
  • 绘图颜色(即条形):col=c("paleturquoise3", "palegreen3")
  • 轴标签的粗体字体 font.lab=2但不适用于值标签(例如 ´region in bold, but VL and NL` 不是粗体)
  • #404040作为字体、轴和线条的颜色
  • 轴标签:x:factors , y: frequency
  • 最佳答案

    这是一种从“未制表”数据框开始的可能性,melt它,用 geom_bar 绘制它在 ggplot2 (对每组进行计数),使用 facet_wrap 按变量分隔图.

    创建玩具数据:

    set.seed(123)
    df <- data.frame(Variant = sample(c("iedere", "elke"), size = 50, replace = TRUE),
    Region = sample(c("VL", "NL"), size = 50, replace = TRUE),
    PrecededByPrep = sample(c("1", "0"), size = 50, replace = TRUE),
    Person = sample(c("person", "no person"), size = 50, replace = TRUE),
    Time = sample(c("time", "no time"), size = 50, replace = TRUE))

    reshape 数据:
    library(reshape2)
    df2 <- melt(df, id.vars = "Variant")

    阴谋:
    library(ggplot2)
    ggplot(data = df2, aes(factor(value), fill = Variant)) +
    geom_bar() +
    facet_wrap(~variable, nrow = 1, scales = "free_x") +
    scale_fill_grey(start = 0.5) +
    theme_bw()

    enter image description here

    有很多自定义情节的机会,例如 setting order of factor levels , rotating axis labels , wrapping facet labels on two lines (例如,对于更长的变量名称“PrecededByPrep”),或 changing spacing between facets .

    定制 (按照问题的更新和 OP 的评论)
    # labeller function used in facet_grid to wrap "PrecededByPrep" on two lines
    # see http://www.cookbook-r.com/Graphs/Facets_%28ggplot2%29/#modifying-facet-label-text
    my_lab <- function(var, value){
    value <- as.character(value)
    if (var == "variable") {
    ifelse(value == "PrecededByPrep", "Preceded\nByPrep", value)
    }
    }

    ggplot(data = df2, aes(factor(value), fill = Variant)) +
    geom_bar() +
    facet_grid(~variable, scales = "free_x", labeller = my_lab) +
    scale_fill_manual(values = c("paleturquoise3", "palegreen3")) + # manual fill colors
    theme_bw() +
    theme(axis.text = element_text(face = "bold"), # axis tick labels bold
    axis.text.x = element_text(angle = 45, hjust = 1), # rotate x axis labels
    line = element_line(colour = "gray25"), # line colour gray25 = #404040
    strip.text = element_text(face = "bold")) + # facet labels bold
    xlab("factors") + # set axis labels
    ylab("frequency")

    enter image description here

    为每个条形添加计数 (编辑以下来自 OP 的评论)。

    计算y坐标的基本原理可以在 this Q&A中找到。 .这里我使用 dplyr计算每条柱的计数(即 label 中的 geom_text )和它们的 y坐标,但这当然可以在 base 中完成R, plyrdata.table .
    # calculate counts (i.e. labels for geom_text) and their y positions.
    library(dplyr)
    df3 <- df2 %>%
    group_by(variable, value, Variant) %>%
    summarise(n = n()) %>%
    mutate(y = cumsum(n) - (0.5 * n))

    # plot
    ggplot(data = df2, aes(x = factor(value), fill = Variant)) +
    geom_bar() +
    geom_text(data = df3, aes(y = y, label = n)) +
    facet_grid(~variable, scales = "free_x", labeller = my_lab) +
    scale_fill_manual(values = c("paleturquoise3", "palegreen3")) + # manual fill colors
    theme_bw() +
    theme(axis.text = element_text(face = "bold"), # axis tick labels bold
    axis.text.x = element_text(angle = 45, hjust = 1), # rotate x axis labels
    line = element_line(colour = "gray25"), # line colour gray25 = #404040
    strip.text = element_text(face = "bold")) + # facet labels bold
    xlab("factors") + # set axis labels
    ylab("frequency")

    enter image description here

    关于r - 将双变量绘制为 R 中的多个因子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27803031/

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