如何在 R 中的交互式图形中绘制具有对数刻度的等高线?

How to plot contours with a log scale in an interactive graph in R?

我有一个用 plotly 显示的等高线图:

x <- rep(seq(0.01, 0.1, length.out = 50), 50)
y <- rep(seq(0.01, 0.1, length.out = 50), each = 50)
z <- 1 / (x^2 + y^2)

my.data <- data.frame(x, y, z)

p <- plot_ly(data = my.data, x = x, y = y, z = z, type = "contour")

结果如下:

问题:如何对 z 颜色使用对数刻度?或者如何手动控制等高线层次?

我尝试了 layout(p, zaxis = list(type = "log")) 但它不起作用。

备注#1:我不想绘制log(z),这是显而易见的解决方案,但要有对数色标。

备注#2:如果 plotly 做不到,有什么交互式图形库可以做到?我需要一个将我的图形导出到 html 文件的库。

备注#3:我尝试用对数刻度的 ggplot 绘图,然后使用 ggplotly 命令,但最后,绘图只是绘制 log(z)。

备注 #4: 我尝试使用热图,按照指示手动设置色标 here,但无法正常工作。

这是我最终想出的解决方法:

ggplot(my.data, aes(x = x, y = y, fill = z)) +
  geom_tile() +
  scale_fill_gradientn(colours = c("blue",
                                   "cyan",
                                   "green",
                                   "yellow",
                                   "orange",
                                   "red"),
                       values = rescale(c(0.3, 1, 2, 5, 10, 20, 35))) +
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0))

ggplotly()

所以想法是在ggplot2中手动设置色阶,然后用ggplotly命令转换。

结果如下:

唯一剩下的问题是色标,它不是对数的。我可以很容易地改变休息时间,但我不知道如何改变颜色。我想这是 another question...

的主题

这个答案的另一个批评者是我没有在图表上使用 plotly 的离散颜色,而是连续的渐变。

我尝试使用 here 提供的解决方案,但交互式图表并未指示鼠标悬停时 z 的确切值,而是指示范围(例如“[0.3, 1)”),即无济于事,失去了互动的乐趣。

因此欢迎其他解决方案!