ggplot2中的X轴从线性标度转换为对数标度

时间:2019-07-09 19:26:13

标签: r ggplot2

我正在尝试在ggplot2中创建直方图,其中x轴在预定点之后从线性缩放过渡到log2缩放。换句话说,我希望x轴的线性比例达到某个阈值,然后在该阈值之后使用log2比例。

因此,在阈值之前,x轴应看起来像您通过简单操作即可获得的结果:

downloadFile() {
    const blob = new Blob(['blablabla.log'], {type: 'text/log'});
    const dataURL = window.URL.createObjectURL(blob);
    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
      window.navigator.msSaveOrOpenBlob(blob);
      return;
    }
    const link = document.createElement('a');
    link.href = dataURL;
    link.download = 'export file.log';
    link.click();
    setTimeout(() => {
      window.URL.revokeObjectURL(dataURL);
    }, 100);
  }

并且在阈值之后,x轴应该看起来像从操作中得到的:

ggplot(data,aes(x=value)) + geom_histogram()

问题是,虽然我可以分别制作这些直方图(一个以线性标度表示所有直方图,另一个以log2标度表示所有直方图),但我不知道如何转换并同时使用一个直方图。

1 个答案:

答案 0 :(得分:0)

我同意评论员的意见,认为这作为一个单一的数字是有问题的。但是,如果您有一个图来显示所有数据,然后再用插图/子图来显示一个子集,则可能会很有帮助。在这里,我使用cowplot::plot_grid组合了两个图形,但是还有其他软件包可供安排(例如gridExtra)。对于如何标记数字要格外谨慎。

library(ggplot2)
x <- rexp(1000, .05) + rep(c(0, 5), each = 500)

cowplot::plot_grid(
  ggplot(data.frame(x = x[x<5]), aes(x)) + 
    geom_histogram() +
    labs(title = "Subset, x<5, linear-scale"),

  ggplot(data.frame(x), aes(x)) + 
    geom_vline(xintercept = 5, color = "red", size = 2) +
    geom_histogram() +
    scale_x_log10() + 
    labs(title = "All data, log-scale")
)

enter image description here