Nano Hash - криптовалюты, майнинг, программирование

R ggplot Legend с неожиданным выводом

Я работаю над R-графиком некоторых данных о COVID, отображая случаи заболевания в Китае по сравнению с совокупными случаями в других странах. Я также добавляю несколько вертикальных линий, обозначающих некоторые события. У меня большие проблемы с легендой. Я хотел бы иметь возможность показать 2 варианта: Вариант 1: а) легенда для случаев страны (Китай против других) б) легенда для отмеченных событий, показывает вертикальные линии.

ИЛИ Вариант 2. Просто используйте условные обозначения для случаев со странами (Китай и другие страны) и полагайтесь на метки для отображения информации по вертикальным линиям.

Однако то, что показывает моя легенда сюжета, показывает как информацию о стране, так и информацию о вертикальной линии в одном блоке (см. Ниже): введите здесь описание изображения

Мой код выглядит следующим образом:

library(readr)
library(ggplot2)
library(dplyr)
library(tidyr)
library(ggrepel)
devtools::install_github("RamiKrispin/coronavirus")


library(coronavirus)
update_dataset()    

summary_china <- coronavirus %>% 
  filter(type == "confirmed" & country == "China") %>%
  group_by(date) %>% summarise(total_cases = sum(cases)) %>% mutate(country = "China") %>%
  arrange(date) 

summary_not_china <- coronavirus %>% 
  filter(type == "confirmed" & country != "China") %>%
  group_by(date) %>% summarise(total_cases = sum(cases)) %>% mutate(country = "Others") %>%
  arrange(date) 

summary_by_cases <- rbind(summary_china, summary_not_china)

#confirmed cases China vs. the rest of the world
plot_companrison <- summary_by_cases %>% ggplot(show.legend = FALSE) +
  geom_line(aes(x=date,y=total_cases, color=country), show.legend = TRUE) +
  ylab("Cumulative confirmed cases")

who_events <- tribble(
  ~ date, ~ event,
  "2020-01-30", "Global health\nemergency declared",
  "2020-03-11", "Pandemic\ndeclared",
  "2020-02-13", "China reporting\nchange"
) %>%
  mutate(date = as.Date(date))


plot_companrison + 
  geom_vline( aes(xintercept = date,  color=event),  data=who_events, show.legend = FALSE) +
  geom_label_repel(aes(x=date, label=event, color=event), data=who_events, y=2e5, force=200, show.legend = FALSE) 
 
  

Как удалить события из легенды страны или создать две отдельные легенды, одну для событий и одну для стран? ТИА

22.09.2020

  • Попробуйте установить breaks в scale_color_discrete() для любых групп, которые вы хотите включить в легенду. Что-то вроде scale_color_discrete(breaks = c("China", "Other") ). 22.09.2020

Ответы:


1

Попробуйте этот подход. Но необходимо отметить, что рекомендация от @aosmith - это самый практичный способ получить то, что вы хотите (я протестировал и работает идеально. Это делает ее довольно крутой и умной дамой, опередившей меня на секунду, когда я собирался выпустить это решение). Здесь аналогичный подход, но с использованием annotate():

Сначала данные:

library(tidyverse)
library(coronavirus)
library(ggrepel)
update_dataset()
#Data
summary_china <- coronavirus %>% 
  filter(type == "confirmed" & country == "China") %>%
  group_by(date) %>% summarise(total_cases = sum(cases)) %>% mutate(country = "China") %>%
  arrange(date) 

summary_not_china <- coronavirus %>% 
  filter(type == "confirmed" & country != "China") %>%
  group_by(date) %>% summarise(total_cases = sum(cases)) %>% mutate(country = "Others") %>%
  arrange(date) 

summary_by_cases <- rbind(summary_china, summary_not_china)

#Data for events
who_events <- tribble(
  ~ date, ~ event,
  "2020-01-30", "Global health\nemergency declared",
  "2020-03-11", "Pandemic\ndeclared",
  "2020-02-13", "China reporting\nchange"
) %>%
  mutate(date = as.Date(date))

Теперь код сюжета:

#Plot
ggplot(data=summary_by_cases,aes(x=date,y=total_cases,
                                 color=country))+
  geom_line()+
  geom_vline(xintercept=who_events$date,
             color=c('red','green','blue'))+
  annotate(geom = 'label_repel',x=who_events$date,y=2e5,
                 label=who_events$event,
           color=c('red','green','blue'),force=200)

Выход:

введите здесь описание изображения

22.09.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..