0

I am just trying to add correlation data to the ggplot I am making about daily temperature readings. Here is the code I am using currently and the error it gives me.

library(ggpubr)

S4TailGaugeDailyAvgPlot <-
  
ggplot(S4TailGaugeDailyAvgdf, aes(Date, NULL)) +
  geom_smooth(aes(x = Date, y = mean_temps4), alpha = 0.25) +
  geom_line(aes(x = Date, y = mean_temps4, color = "S4")) +
  
  geom_smooth(aes(x = Date, y = mean_temptailwater, colour = "Tailwater Gauge"), alpha = 0.25) +
  geom_line(aes(x = Date, y = mean_temptailwater, colour = "Tailwater Gauge")) +
  
  scale_colour_manual("",values = c("S4"="blue", "Tailwater Gauge"="red")) +
  theme(legend.position = "bottom") +
  xlab('Date') + ylab('Daily Average Temperature (Celcius)') +
  ggtitle("Daily Average Temperature
Site S4 vs Tailwater Gauge")

S4TailGaugeDailyAvgPlot + stat_cor(aes(mean_temps4, mean_temptailwater), method = "spearman")

S4TailGaugeDailyAvgPlot + stat_cor(aes(mean_temps4, mean_temptailwater), method = "spearman")
Error in `transformation$transform()`:
! `transform_date()` works with objects of class <Date> only
Run `rlang::last_trace()` to see where the error occurred.

Here is the data I am using.

dput(head(S4TailGaugeDailyAvgdf))
structure(list(Date = structure(c(19791, 19792, 19793, 19794, 
19795, 19796), class = "Date"), mean_temps4 = c(7.74298146565755, 
7.689453125, 7.8524668375651, 8.49865397135417, 8.65640228271484, 
8.60590494791666), mean_temptailwater = c(8.16875, 8.13695652173913, 
8.590625, 9.03854166666667, 9.00104166666667, 8.73645833333333
), mean_gaugeheighttailwater = c(70.8421875, 70.8433695652174, 
73.6369791666667, 76.0657291666667, 74.1148958333333, 71.3278125
)), row.names = c(NA, 6L), class = "data.frame")

I'm very confused why it is not working and what I am doing wrong. Any help much appreciated. Thanks.

2 Answers 2

1

I'm not sure why stat_cor is not playing well with your date scale. I would just annotate the plot yourself, e.g. like so:

S4TailGaugeDailyAvgPlot + 
  annotate(
    geom = 'text', 
    x = as.Date('2024-03-10'), 
    y = 9, 
    label = paste(
      'R =', 
      with(S4TailGaugeDailyAvgdf, round(cor(mean_temps4, mean_temptailwater), 3))
    )
  )
1

In your call to stat_cor, you're passing mean_temps4 as the X variable when the X axis in the plot relates to a Date column, meaning you've got a scale_x_date. Thus, the values are being transformed by the transform of the scale object, which expects Date values as input.

The annotate solution proposed by @Axeman is probably your best bet.

Not the answer you're looking for? Browse other questions tagged or ask your own question.