как показать только даты, которые соответствуют 4 самым высоким значениям на линейной диаграмме в r

avatar
pipts
8 августа 2021 в 23:27
48
1
0

У меня есть этот df, и я создал линейный график. Я пытаюсь построить только даты с 4 самыми высокими значениями.

dput(df)
structure(list(Date = c("2021-06-22", "2021-06-23", "2021-06-24", 
"2021-06-25", "2021-06-26", "2021-06-27", "2021-06-28", "2021-06-29", 
"2021-06-30", "2021-07-01", "2021-07-02", "2021-07-03", "2021-07-04", 
"2021-07-05", "2021-07-06", "2021-07-07", "2021-07-08", "2021-07-09", 
"2021-07-10", "2021-07-11", "2021-07-12", "2021-07-13", "2021-07-14", 
"2021-07-15", "2021-07-16", "2021-07-17", "2021-07-18", "2021-07-19", 
"2021-07-20", "2021-07-21"), Volume = c(30L, 30L, 30L, 30L, 30L, 
30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 
27L, 27L, 27L, 27L, 27L, 27L, 27L, 30L, 30L, 30L, 31L, 30L), 
    Percentage = c(6.67, 3.33, 10, 10, 3.33, 3.33, 6.67, 10, 
    3.33, 6.67, 10, 13.33, 13.33, 10, 6.67, 6.67, 10, 10, 3.7, 
    3.7, 3.7, 3.7, 11.11, 7.41, 11.11, 10, 13.33, 13.33, 12.9, 
    10)), row.names = c(NA, -30L), class = c("tbl_df", "tbl", 
"data.frame"))

это линейная диаграмма

ggplot(data = df, aes(x = Date, y = Percentage,group=1)) +       
  geom_line() + geom_point()
Источник
akrun
8 августа 2021 в 23:35
0

Если есть связи по наивысшим значениям,

akrun
8 августа 2021 в 23:39
0

Есть несколько повторяющихся элементов, я не уверен, что вы действительно хотели. Может быть df %>% group_by(Volume) %>% slice_max(n = 4, order_by = Percentage) %>% ungroup %>% mutate(Date = as.Date(Date)) %>% ggplot(aes(x = Date, y = Percentage,group=1)) + geom_line() + geom_point()

pipts
8 августа 2021 в 23:58
0

на моей линейной диаграмме есть несколько точек, которые находятся в самой высокой точке графика и, таким образом, указывают на более высокий процент. Я хотел бы подчеркнуть даты, которые имеют 4 самых высоких процента, показывая только эти 4 даты на оси x и никакие другие даты. По сути, я хочу, чтобы мои линейные графики были такими, какие они есть, и по оси x отображались только 4 даты, которые соответствуют 4 самым высоким процентам @akrun

Ответы (1)

avatar
Ronak Shah
9 августа 2021 в 04:14
0

Значения percentage имеют связи, поэтому я выбрал 4 случайных значения, но концептуально вы можете сделать это, используя scale_x_continuous, указав labels и breaks для дат, которые вы хотите отобразить.

library(ggplot2)
library(dplyr)

data <- summary_final_by_date %>%
  mutate(label = as.Date(ifelse(dense_rank(-Percentage) %in% 1:4, Date, '')), 
         Date  = as.Date(Date))

unique_dates <- unique(na.omit(data$label))[c(1, 4, 10, 16)]

ggplot(data, aes(x = as.numeric(Date), y = Percentage)) +       
  geom_line() + geom_point() + 
  scale_x_continuous(breaks = as.numeric(unique_dates), 
                     labels = format(unique_dates, format = "%d %b")) + 
  xlab('Date')

enter image description here