放大后Plotly中ggplot2绘图的坐标轴标签消失问题求助
问题描述
使用ggplot2绘制AMZN股票价格的对数刻度折线图,转换为ggplotly交互图后,放大到一定程度时Y轴刻度标签会消失,如何让放大后刻度标签正常显示?
代码示例:
library(ggplot2) library(tidyquant) library(plotly) data("FANG") AMZN <- tq_get("AMZN", get = "stock.prices", from = "2000-01-01", to = "2016-12-31") p <- AMZN %>% ggplot(aes(x = date, y = adjusted)) + geom_line(color = palette_light()[[1]]) + scale_y_log10() + labs(title = "AMZN Line Chart", subtitle = "Log Scale", y = "Closing Price", x = "") + theme_tq() ggplotly(p)
效果演示:
放大时Y轴标签消失的效果
解决方法
方法1:在ggplot阶段指定对数刻度的breaks
在scale_y_log10()中手动设置刻度断点,让ggplotly能识别并保留这些刻度,即使放大也会显示对应区间的刻度:
p <- AMZN %>% ggplot(aes(x = date, y = adjusted)) + geom_line(color = palette_light()[[1]]) + # 根据数据范围自定义对数刻度断点 scale_y_log10(breaks = 10^seq(0, 3, by = 0.5)) + labs(title = "AMZN Line Chart", subtitle = "Log Scale", y = "Closing Price", x = "") + theme_tq() ggplotly(p)
方法2:通过ggplotly的layout强制设置Y轴刻度
转换为ggplotly后,直接修改Y轴配置,强制使用线性刻度模式或自定义刻度规则,避免放大时丢失标签:
p <- AMZN %>% ggplot(aes(x = date, y = adjusted)) + geom_line(color = palette_light()[[1]]) + scale_y_log10() + labs(title = "AMZN Line Chart", subtitle = "Log Scale", y = "Closing Price", x = "") + theme_tq() # 调整Y轴刻度模式与间隔 ggplotly(p) %>% layout(yaxis = list( tickmode = 'linear', dtick = 0.5, # 对数刻度的步长 exponentformat = 'power' # 保留幂次格式显示 ))
方法3:直接使用plotly原生绘图
绕开ggplot转ggplotly的兼容问题,直接用plotly原生绘制对数刻度折线图:
library(plotly) library(tidyquant) AMZN <- tq_get("AMZN", get = "stock.prices", from = "2000-01-01", to = "2016-12-31") plot_ly(AMZN, x = ~date, y = ~adjusted, type = 'scatter', mode = 'lines', color = I(palette_light()[[1]])) %>% layout( title = list(text = "AMZN Line Chart<br><sup>Log Scale</sup>"), yaxis = list( title = "Closing Price", type = "log", tickmode = 'linear', dtick = 0.5 ), xaxis = list(title = "") )
内容的提问来源于stack exchange,提问作者Tung
相关产品推荐
相关产品推荐

