【问题标题】:How to plot advance hist in R如何在R中绘制提前历史
【发布时间】:2018-08-25 11:51:01
【问题描述】:

为了获得更好的结果,我正在从 Excel 转换为 R。 所以实际上我得到了一个这样的data.frame:

A B C D E F G
0 0 0 0 0 0 0
2 0 0 0 0 0 0
2 0 0 2 0 0 1
1 0 0 2 0 1 0

所以 [A:G] 是只能包含 0、1 或 2 作为数字的列的名称。 我想做的是绘制一个直方图或其他任何东西,以便有一个代表一列的条形图,它应该按百分比(在 0、1 和 2 之间)划分,所有列都在同一个图中。

从图像中我们还可以看到,在 y 轴上,我更喜欢看到 0 到 100,而不是行数,而是从百分比的角度来看。上一张图片正是我需要的(也可以自定义颜色等),但有 7 列。

非常感谢,安德里亚。

【问题讨论】:

    标签: r dataframe graph histogram bar-chart


    【解决方案1】:

    我不确定你在问什么。如果这是关于如何重现您正在展示的情节,这里是一个方法:

    library(tidyverse);
    mtcars %>%
        count(cyl, am) %>%
        mutate(am = factor(am, levels = c("1", "0")), cyl = as.factor(cyl)) %>%
        ggplot(aes(x = cyl, y = n, fill = am)) +
            geom_bar(stat = "identity", position = "fill") + 
            labs(y = "pct");
    

    我们可以根据您提供的样本数据生成类似的图:

    # Your sample data
    df <- read.table(text =
        "A B C D E F G
    0 0 0 0 0 0 0
    2 0 0 0 0 0 0
    2 0 0 2 0 0 1
    1 0 0 2 0 1 0", header = T)
    
    library(tidyverse);
    df %>%
        gather(key, value, 1:7) %>%
        count(key, value) %>%
        mutate(key = as.factor(key), value = as.factor(value)) %>%
        ggplot(aes(x = key, y = n, fill = value)) +
            geom_bar(stat = "identity", position = "fill") + 
            labs(y = "pct");
    

    【讨论】:

    • @Rufyyyyy PS。请考虑投票并关闭问题(答案左侧的复选标记)。
    • 完成,祝你有美好的一天!
    【解决方案2】:

    不确定这是否是最巧妙的方法,但我认为它可以满足您的需求。

    v <- c(0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 1, 1, 0, 0, 2, 0, 1, 0)
    mtx <- data.frame(matrix(v, 4, 7, byrow = T))
    names(mtx) <- c('A', 'B', 'C', 'D', 'E', 'F', 'G')
    
    barplot(as.matrix(mtx))
    
    new.df <- data.frame()
    for(i in c('A', 'B', 'C', 'D', 'E', 'F', 'G')){
           tmp.v <- mtx[,i]
           for(j in tmp.v){
                  tmp.df <- data.frame(C = i,
                                    Val = j)
                  new.df <- rbind(new.df, tmp.df)
           }
    
    
    }
    
    new.df$Val <- as.factor(new.df$Val)
    
    df <- new.df %>% group_by(C, Val) %>% summarize(n = n()) %>% mutate(freq = n/sum(n))
    
    df$freq <- as.factor(df$freq)
    ggplot(df, aes(C, freq, fill= Val)) + geom_bar(stat = "identity", position = "stack")
    

    Bar Plot

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-04
      • 1970-01-01
      • 2015-12-22
      • 1970-01-01
      • 2014-11-01
      • 2010-09-06
      • 1970-01-01
      相关资源
      最近更新 更多