带有 geom_raster ggplot2 的辅助轴

时间:2021-01-01 10:51:37

标签: r ggplot2

我有以下示例数据,需要将其绘制两次,一次使用 yr、mo、Var 和 long,另一次使用 yr、mo、var 和 lat。我需要对 long 和 lat 使用辅助轴,以便我可以跟踪年度变化。 我尝试了几种方法,但都没有成功。请有任何想法。

month <- month.abb[c(1,2,3,4,5,9,10,11,12,1,2,3,4,5,9,10,11,12,1,2,3,4,5,9,10,11)] # no summer 
month <- ordered(month, month.abb)
yr=  seq(1980, 2005, by = 1)
Var <- runif(26, min=-29, max=32)
longitude <- runif(26, min=37, max=81)
latitude <-runif(26, min=4, max=67) 
#Set the dataframe
df <- data.frame(month, yr, Var, longitude, latitude)

## for Long

normalizer <- max(df$yr) / max(df$longitude)


df %>%
  arrange(month) %>%
  mutate(month = factor(month, 
                     levels=c("Jan","Feb","Mar","Apr", "May", 
                           "Jun", "Jul", "Aug", "Sep", "Oct", "Nov","Dec"))) %>%
  ggplot() +
  geom_raster( aes(x=month, y=yr,fill = Var))+
  geom_point( aes(x= month, y=longitude/normalizer),size = 2)+
  #geom_point( aes(x= month, y= (5- longitude/10),size = 2))+
  scale_y_continuous("yr", sec.axis = sec_axis(trans= ~.*normalizer,name = "Long"))+
  #scale_y_continuous("yr", sec.axis = sec_axis(~ 5 -.*10, name = "Long"))+
  theme_bw()+ 
  scale_fill_gradientn(colors=c("purple4","blue","dodgerblue","lightcyan","olivedrab1", "yellow","red","#7F0000","deeppink"), 
                       breaks = breaks3) +
  xlab("") +  ylab("") 

1 个答案:

答案 0 :(得分:0)

如果删除引用未定义的breaks3的scale_fill命令并取消注释geom_point,您的代码会生成一个带有辅助轴的图:

library(tidyverse)
month <- month.abb[c(1,2,3,4,5,9,10,11,12,1,2,3,4,5,9,10,11,12,1,2,3,4,5,9,10,11)] # no summer 
month <- ordered(month, month.abb)
yr <-  seq(1980, 2005, by = 1)
Var <- runif(26, min=-29, max=32)
longitude <- runif(26, min=37, max=81)
latitude <-runif(26, min=4, max=67) 

#Set the dataframe
df <- data.frame(month, yr, Var, longitude, latitude)

# for Long
normalizer <- max(df$yr) / max(df$longitude)

df %>%
     arrange(month) %>%
     mutate(month = factor(month, 
                           levels=c("Jan","Feb","Mar","Apr", "May", 
                                    "Jun", "Jul", "Aug", "Sep", "Oct", "Nov","Dec"))) %>%
     ggplot() +
     geom_raster( aes(x=month, y=yr,fill = Var))+
     geom_point( aes(x= month, y=longitude/normalizer),size = 2)+
     geom_point( aes(x= month, y= (5- longitude/10),size = 2))+
     scale_y_continuous("yr", sec.axis = sec_axis(~ 5 -.*10, name = "Long"))

这是您想要的输出吗? enter image description here

相关问题