Major and minor tickmarks with plotly

断了今生、忘了曾经 提交于 2019-12-05 15:18:34

As you started to implement already, you can customize the ticks by specifying the values at which they are placed (with tickvals) and the labels (with ticktext). But you need to put a value for every tick location in tickvals, and every tickval needs a corresponding ticktext. So, the way to differentiate between major and minor ticks is by setting the ticktext to an empty string for all the minor ticks (because plotly doen't have a way to specify minor ticks per se).

tval <- sort(as.vector(sapply(seq(1,9), function(x) x*10^seq(-1,3)))) #generates a sequence of numbers in logarithmic divisions
ttxt <- rep("",length(tval))  # no label at most of the ticks
ttxt[seq(1,37,9)] <- as.character(tval)[seq(1,37,9)] # every 9th tick is labelled

p = plot_ly(x=x, y=y, mode="markers") %>%
  layout(yaxis = list(type="log",
                      zeroline=F, showline=T, 
                      ticks="outside",
                      tickvals=tval,
                      ticktext=ttxt),
         xaxis = list(showline=T, ticks="outside"))
p

sam81

I found a solution by adding a trace which is not visible and a second y axis, it's a bit of a hack, but it works:

library(plotly)
x = c(1,2,3,4,5)
y = c(0.1, 1, 10, 100, 1000)
axseq = y

minTickLoc = numeric()
    for (i in 1:5){
    bb = 1:10;
    minTickLoc = c(minTickLoc, (bb*10^(i-2)))
}


p = plot_ly(x=x, y=y, mode="markers", marker=list(opacity=0), showlegend=F) %>%    
   add_trace(x=x, y=y, mode="markers", yaxis="y2", 
             marker = list(color="black")) %>%
   layout(yaxis = list(type = "log", tickvals = axseq, 
                       ticktext = as.character(axseq), 
                       zeroline=F, showline=T, ticks="outside", 
                       ticklen=8, showgrid=T),
          yaxis2 = list(type="log", tickvals=minTickLoc, 
                        ticktext=rep("", length(minTickLoc)), 
                        zeroline=F, showline=F, ticks="outside", 
                        ticklen=3, showgrid=T),
          xaxis = list(showline=T, ticks="outside", ticklen=8))

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!