如何在Plotly(R)中设置shapes的自定义X轴日期范围及轴限制?
Plotly日期轴形状填充优化方案
你当前通过硬编码日期实现了y=0到1之间的蓝色填充,但该方式缺乏扩展性,针对你的两个问题,解决方案如下:
问题1:将shapes的X轴日期设置为-∞到∞
可以通过相对定义域坐标实现,无需硬编码具体日期。把xref设为"x domain",同时将x0设为0(对应X轴定义域起始)、x1设为1(对应X轴定义域结束),这样形状会自动覆盖整个X轴的所有日期范围,无论数据的日期区间如何变化,都无需修改这部分代码。
优化后的完整代码:
library(plotly) x <- data.frame(seq(as.Date("2015-01-01"),as.Date("2015-04-10"),1)) random_y <- rnorm(100, mean = 0) data <- data.frame(x, random_y) colnames(data)=c("date","num") fig <- plot_ly(data, type = 'scatter', mode = 'lines')%>% add_trace(x = ~date, y = ~num)%>% layout(showlegend = F)%>% layout( shapes = list( type = "rect", fillcolor = "blue", line = list(color = "blue"), opacity = 0.1, y0 = 0, y1 = 1, yref="y", x0 = 0, # 对应X轴定义域起始位置 x1 = 1, # 对应X轴定义域结束位置 xref="x domain" # 使用X轴的相对定义域坐标 ) ) fig
问题2:设置轴显示范围但让形状超出该范围
只需在layout中添加xaxis参数指定想要显示的日期区间,形状依然保持覆盖整个X轴定义域的设置即可。这样图表会展示你指定的日期范围,但填充形状会延伸到整个数据的日期区间,当你拖动或缩放图表时,能看到超出当前显示范围的填充部分。
示例代码(显示2015年2月1日至28日):
library(plotly) x <- data.frame(seq(as.Date("2015-01-01"),as.Date("2015-04-10"),1)) random_y <- rnorm(100, mean = 0) data <- data.frame(x, random_y) colnames(data)=c("date","num") fig <- plot_ly(data, type = 'scatter', mode = 'lines')%>% add_trace(x = ~date, y = ~num)%>% layout( showlegend = F, xaxis = list( range = c(as.Date("2015-02-01"), as.Date("2015-02-28")) # 指定图表显示的日期范围 ), shapes = list( type = "rect", fillcolor = "blue", line = list(color = "blue"), opacity = 0.1, y0 = 0, y1 = 1, yref="y", x0 = 0, x1 = 1, xref="x domain" ) ) fig
内容的提问来源于stack exchange,提问作者PA_1987
相关产品推荐
相关产品推荐

