R-带有ggplot2的气候仪:更改降水值以适合第二轴

时间:2019-05-22 14:29:10

标签: r ggplot2

我正在尝试创建一个气候图,以温度为线,以降水量为条形图。由于每月温度低于零,降水量条(从零开始)偏高。

我希望它们处于温度曲线的最低水平(第一个y轴上约为-25),第二个y轴此时显示为0。有没有办法将数据移动到合适的位置?

#build data frame with temperature and precipitation data
df <- as.data.frame(c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))
colnames(df) <- c("month")
df$month <- factor(df$month, levels = month.abb)
df$celsius <- c(-26.0, -24.5, -18.9, -9.8, -1.0, 7.0, 12.7, 12.3, 6.4, -1.2, -12.7, -21.9)
df$prec_mm <- c(18.7, 16.6, 18.1, 23.6, 30.0, 44.2, 59.8, 69.4, 69.9, 48.4, 35.5, 18.4)

#plot with ggplot2
library(ggplot2)

ggplot(data = df, mapping = aes(x = month, y = celsius, group = 1)) + 
geom_bar(mapping = aes(y = prec_mm/2), stat = "identity", color="blue", fill="blue", width = 0.5) + 
  geom_line(color="red", size=1.5) + 
  scale_y_continuous("Temperature [°C]", 
  sec.axis = sec_axis(~ . *2, name = "Precipitation [mm]")
  )

enter image description here

1 个答案:

答案 0 :(得分:1)

如果我很好地理解了您的问题,则希望重新缩放轴,以使第二个刻度与第一个刻度的零值对齐。为此:

  • 首先缩放数据,以使所有温度测量值均为正值。
  • 调整辅助轴刻度以匹配调整。

这是您提到的MWE:

#build data frame with temperature and precipitation data
df <- as.data.frame(c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))
colnames(df) <- c("month")
df$month <- factor(temp_churchill$month, levels = month.abb)
df$celsius <- c(-26.0, -24.5, -18.9, -9.8, -1.0, 7.0, 12.7, 12.3, 6.4, -1.2, -12.7, -21.9)
df$prec_mm <- c(18.7, 16.6, 18.1, 23.6, 30.0, 44.2, 59.8, 69.4, 69.9, 48.4, 35.5, 18.4)

#plot with ggplot2
library(ggplot2)

ggplot(data = df, mapping = aes(x = month, y = prec_mm, group = 1)) + 
  geom_bar(stat = "identity", color="blue", fill="blue", width = 0.5) + 
  geom_line(mapping = aes(y = celsius+30), color="red", size=1.5) + # Scale data to match desired scale
  scale_y_continuous("Precipitation [mm]", 
                     sec.axis = sec_axis(~ . -30, name = "Temperature [°C]") # Reverse transformation to match data
  )

enter image description here