如何在R中的交互式图形中使用对数刻度绘制轮廓?

时间:2016-06-22 17:03:56

标签: 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")

结果如下:

No log scale

问题:如何使用z颜色的对数比例?或者如何手动控制轮廓水平?

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

备注#1:我不想绘制log(z),这是一个明显的解决方案,但要有一个日志色标。

备注#2:如果情节无法实现,那么交互式图形库可以做什么?我需要一个将我的图形导出到html文件的库。

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

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

1 个答案:

答案 0 :(得分:0)

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

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命令对其进行转换。

结果如下:

Better

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

的主题

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

我尝试使用提供的解决方案here,但是交互式图表并未指示鼠标悬停时z的确切值,而是范围(例如&#34; [0.3,1]&#34; ),这没有帮助,使它失去了互动的兴趣。

因此欢迎替代解决方案!