Yshai Siboni
Yshai Siboni

Reputation: 27

Can't change x scale from Date to number

I got coronavirus df and I need to compare Israel and UK data from the time both countries had more than 10 confirmed patients, this is my code :

library(ggplot2)
library(dplyr)

#Data frame
df.raw <- read.csv(url('https://raw.githubusercontent.com/datasets/covid-19/master/data/countries-aggregated.csv'))
str(df)
df <- df.raw
df$Date <- as.Date(df$Date)
str(df)

df.israel <- df %>% filter(Country == 'Israel', Confirmed>10)
df.uk <- df %>% filter(Country == 'United Kingdom', Confirmed>10)
if(df.israel$Date[1] > df.uk$Date[1]){
  df.uk <- df.uk %>% filter(Date >= df.israel$Date[1])
} else {
  df.israel <- df.israel %>% filter(Date >= df.uk$Date[1])
}

ggplot() +
  geom_point(data = df.israel, aes(Date, Confirmed), color = 'blue') +
  geom_point(data = df.uk, aes(Date,Confirmed), color = 'red')

Now, I need that my X axis will be numeric (1,2,3 etc) but I don't know how (tried xlim, scale_x_continuous) someone knows how to do this?

My graph

Upvotes: 1

Views: 57

Answers (1)

Ronak Shah
Ronak Shah

Reputation: 389325

You can use match to get numbers instead of Date. Also it is better to get data in long format instead of creating two separate dataframes.

library(dplyr)
library(ggplot2)

df %>%
  filter(Country %in% c('Israel', 'United Kingdom') & Confirmed>10) %>%
  tidyr::pivot_longer(cols = Country) %>%
  arrange(Date) %>%
  mutate(day = match(Date, unique(Date))) %>%
  ggplot() + aes(day, Confirmed, color = value) + geom_point() + 
  scale_color_manual(values = c('blue', 'red'))

enter image description here

Upvotes: 1

Related Questions