ggplot2:非线性双轴预防解决方法?

时间:2018-11-26 22:33:57

标签: r ggplot2

假设我们有一个时间data.frame的时间序列和一个变量,例如以立方英尺/秒(cfs)为单位的河流每小时流量的预测,而另一个data.frame作为一个表将流量与另一个流量相关联,例如,在我们的示例中,该表格将河流流量与已知流量在给定流量下的高度(又称阶段)相关联(通常为非线性关系)。 ggplot2不建议绘制两个不在1-1转换中的轴,有什么解决方法可以在单个geom_line上的单独y轴上绘制流量(以cfs为单位)和位移台(以ft为单位)来显示两个轴1个图中的流量和阶段预报,例如像NOAA的这些标准plots那样?

library(ggplot2)

#example forecast/timeseries data 
forecastleadtime_hours <- c(1,2,3,4,5,6,7,8,9)
flow_cfs <- c(65, 68, 501, 2500, 5500, 18000, 15000, 13000, 11000)
df <- data.frame(forecastleadtime_hours, flow_cfs)

# example lookup table
flow_cfs_lookup <- c(60, 500,2000, 3000, 5000, 7000, 11000, 14000, 19000, 22000, 
                     25000, 40000)

stage_feet_lookup <- c(0,1,2.5,3.5,5,6.5,8.5,10,12,13.5, 15, 18)
flowstageratingtable <- data.frame(flow_cfs_lookup, stage_feet_lookup)

ggplot() + geom_line(data = df, aes(x = forecastleadtime_hours, y = 
flow_cfs))

enter image description here

我意识到这不是理想的数据可视化,但是似乎在一种情况下,一个地块可以针对不同的利益快速回答两个问题-在x小时内预计会有多少流量,或者河水预计会上升多高在x个小时内-向公众这样的受众提供许多地块并不总是那么容易,尤其是在洪水,火灾,污染水平迅速上升等紧急情况下。

1 个答案:

答案 0 :(得分:0)

如果流量和高度成非线性关系,则无法在ggpplot中完成。

  

All secondary axes must be based on a one-to-one transformation of the primary axes