相关疑难解决方法(0)

反向堆叠条形顺序

我正在使用ggplot创建一个堆积条形图,如下所示:

plot_df <- df[!is.na(df$levels), ] 
ggplot(plot_df, aes(group)) + geom_bar(aes(fill = levels), position = "fill")
Run Code Online (Sandbox Code Playgroud)

这给了我这样的东西:

在此输入图像描述

如何反转堆叠条本身的顺序,以便第1级位于底部,第5级位于每个条形的顶部?

我已经看到了很多关于这方面的问题(例如,如何使用ggplot2上的标识来控制堆积条形图的排序),并且常见的解决方案似乎是按照该级别对数据帧重新排序,因为ggplot正在使用确定顺序

所以我尝试使用dplyr进行重新排序:

plot_df <- df[!is.na(df$levels), ] %>% arrange(desc(levels))

然而,情节也是如此.不论我是按升序还是按降序排列,似乎也没有区别

这是一个可重复的例子:

group <- c(1,2,3,4, 1,2,3,4, 1,2,3,4, 1,2,3,4, 1,2,3,4, 1,2,3,4)
levels <- c("1","1","1","1","2","2","2","2","3","3","3","3","4","4","4","4","5","5","5","5","1","1","1","1")
plot_df <- data.frame(group, levels)

ggplot(plot_df, aes(group)) + geom_bar(aes(fill = levels), position = "fill")
Run Code Online (Sandbox Code Playgroud)

r bar-chart ggplot2 stacked-chart dplyr

25
推荐指数
1
解决办法
2万
查看次数

如何在geom_col/geom_area上绘制一个因子级别作为基础

我写了以下函数来制作一个定制的堆积图:

stacked_plot <- function(data, what, by = NULL, date_col = date, date_unit = NULL, type = 'area'){

  by <- enquo(by)
  what <- ensym(what)
  date_col <- ensym(date_col)
  date_unit <- enquo(date_unit)

  if (!rlang::as_string(date_col) %in% names(data)){
    return(cat('Nie odnaleziono kolumny "', as_string(date_col), '".', sep = ''))
  }

  if (!rlang::quo_is_null(date_unit)){
    data <- data %>%
      mutate(!!date_col := floor_date(!!date_col, unit = !!date_unit, week_start = 1))
  }

  if (!rlang::quo_is_null(by)) {
    data <- data %>%
      filter(!is.na(!!by)) %>%
      group_by(!!date_col, !!by) %>%
      summarise(!!what := sum(!!what, na.rm = TRUE)) %>%
      ungroup() %>% …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 forcats geom-col

5
推荐指数
1
解决办法
162
查看次数

堆叠的条形图,每个堆叠的独立填充顺序

我面临着ggplot2无法理解的,排序和堆积条形图的行为。
我已经读过一些关于它的问题(这里这里等等),但是不幸的是我找不到适合我的解决方案。也许答案很简单,但我看不到。希望这不是一个骗子。

我的主要目标是基于ordering列(这里称为ordering)使每个堆栈独立地排序。

这里有一些数据:

library(dplyr)
library(ggplot2)
dats <- data.frame(id = c(1,1,1,2,2,3,3,3,3),
                   value = c(9,6,4,5,6,4,3,4,5),
                   ordering = c(1,2,3,2,3,1,3,2,4),
                   filling = c('a','b','c','b','a','a','c','d','b')) %>% arrange(id,ordering)
Run Code Online (Sandbox Code Playgroud)

因此,有一个ID,一个值,一个要用于排序的值和一个填充,数据就像在ordering列中一样应该在图中进行排序。

我试图绘制它:的想法是绘制一个x轴为的堆叠条形图id,值为value,由填充filling,但填充的值ordering按升序排列, ordering ,每个值的最大值在底部专栏。的顺序在filling某种程度上与数据集相同,即每一列都有独立的顺序。

您可以想象它们是假数据,因此id的数量可以变化。

 id value ordering filling
1  1     9        1       a
2  1     6        2       b
3  1     4        3       c
4  2     5        2       b
5  2     6        3       a …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

5
推荐指数
2
解决办法
283
查看次数

ggplot根据数据框中的值重新排序堆积条形图

我正在制作带有ggplot2的堆积条形图,其中有关y轴的特定条形排序.

# create reproducible data
library(ggplot2)
d <- read.csv(text='Day,Location,Length,Amount
            1,4,3,1.1
            1,3,1,2
            1,2,3,4
            1,1,3,5
            2,0,0,0
            3,3,3,1.8
            3,2,1,3.54
            3,1,3,1.1',header=T)

ggplot(d, aes(x = Day, y = Length)) + geom_bar(aes(fill = Amount, order = Location), stat = "identity")

ggplot(d, aes(x = Day, y = Length)) + geom_bar(aes(fill = Amount, order = rev(Location)), stat = "identity")
Run Code Online (Sandbox Code Playgroud)

第一个ggplot图按位置顺序显示数据,其中Location = 1最接近x轴,而每个增加值的数据都堆叠在下一个上.

第二个ggplot图以不同的顺序显示数据,但它没有堆叠具有最接近x轴的最高位置值的数据,而下一个最高位置的数据堆叠在距离x轴位置的第二个位置.第一个栏目栏,就像我希望它基于之前的帖子一样.

下一个片段确实以所需的方式显示数据,但我认为这是简单和小型示例数据集的工件.堆栈顺序尚未指定,因此我认为ggplot基于Amount的值进行堆叠.

ggplot(d, aes(x = Day, y = Length)) + geom_bar(aes(fill = Amount), stat = "identity")
Run Code Online (Sandbox Code Playgroud)

我想要的是强制ggplot按照位置值递减的顺序堆叠数据(位置= 4最接近x轴,位置= 3接下来,...,位置= 1位于条形列的最顶部)调用order =或等价的参数.有什么想法或建议吗? …

r bar-chart ggplot2 stacked-chart

3
推荐指数
1
解决办法
2702
查看次数

ggplot:以相反顺序堆叠的条形图

所以我有数据框

dput(df)
structure(list(Frequency = structure(c(1L, 2L, 3L, 4L, 1L, 2L, 
3L, 4L), .Label = c("2", "3", "4", "5"), class = "factor"), Prcentage = c(1, 
33, 58, 8, 2, 40, 53, 5), label = list("Insufficient", "Average", 
    "Good", "Excellent", "Insufficient", "Average", "Good", "Excellent"), 
    name = c("implementation", "implementation", "implementation", 
    "implementation", "energy", "energy", "energy", "energy")), .Names = c("Frequency", 
"Prcentage", "label", "name"), row.names = c(NA, 8L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

并使用以下代码

# Get the levels for type in the required order
df$label = factor(df$label, levels = …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

2
推荐指数
1
解决办法
5204
查看次数

标签 统计

ggplot2 ×5

r ×5

bar-chart ×2

stacked-chart ×2

dplyr ×1

forcats ×1

geom-col ×1