0

我正在处理以下脚本,我想按条形图的值按降序重新排序条形图。

library(tidyverse)
library(lubridate)
library(ggplot2)

#df <- read_csv('dataframe.csv')
    
    df %>%
      mutate(date=mdy(date), year=year(date), year = year + (date >= mdy(paste0("10/01/", year))))%>%
      group_by(year) %>%
      summarize(avg = mean(flow)) -> df
    
    
    y <- df$avg
    x <- ymd(sprintf("%d-01-01",df$year))
    d <- data.frame(x = x, y = y)
    
    # interpolate values from zero to y and create corresponding number of x values
    vals <- lapply(d$y, function(y) seq(0, y, by = 0.1))
    y <- unlist(vals)
    mid <- rep(d$x, lengths(vals))
    d2 <- data.frame(x = mid - 100,
                     xend = mid + 100,
                     y = y,
                     yend = y)
    
    ggplot(data = d2, aes(x = x, xend = xend, y = y, yend = yend, color = y)) +
      geom_segment(size = 2)

结果 在此处输入图像描述

我想按值降序重新排序条形图

数据集可以通过以下链接找到

https://drive.google.com/file/d/11PVub9avzMFhUz02cHfceGh9DrlVQDbD/view?usp=sharing

我正在寻找的输出是这样的。 在此处输入图像描述

请协助。

4

2 回答 2

2

要排列数据,您需要调整因子水平。您可以arrange基于avg列的数据并更改year为因子。

library(dplyr)
library(ggplot2)

df %>%
  arrange(desc(avg)) %>%
  mutate(year = factor(year, unique(year))) %>%
  ggplot() + aes(year, avg) + geom_col(aes(fill = 'red')) + guides(fill=FALSE)

在此处输入图像描述


或者 :

df %>%
  arrange(desc(avg)) %>%
  mutate(year = factor(year, unique(year))) %>%
  ggplot() + aes(year, avg, fill = avg) + geom_col()

在此处输入图像描述

于 2020-11-27T12:59:00.417 回答
1

尝试这个:

library(scales)

#Custom Transform function
dttrans <- function(a, b, breaks = b$breaks, format = b$format) {
  a <- as.trans(a)
  b <- as.trans(b)
  
  name <- paste(a$name, b$name, sep = "-")
  
  trans <- function(x) a$trans(b$trans(x))
  inv <- function(x) b$inverse(a$inverse(x))
  
  trans_new(name, trans, inv, breaks, format = format)
  }

ggplot(data = d2, aes(x = x, xend = xend, y = y, yend = yend, color = y)) +
  geom_segment(size = 2) +
  scale_x_continuous(trans = dttrans("reverse", "date"))

致谢:米科·马蒂拉

在此处输入图像描述

于 2020-11-27T11:50:52.837 回答