【问题标题】:Logarithmic axis with modified ticks带有修改刻度的对数轴
【发布时间】:2020-09-16 01:44:54
【问题描述】:

我正在尝试重新创建下图,但无法摆脱 x > 3 的“半步”增量。有更好的方法吗?我现在使用ggplot2 - 让它正确,然后计划切换到plotly 进行交互式绘图。

代码

PoC 仅显示 3 条迹线:

set.seed(69)
library(data.table)
library(ggplot2)

k <- lapply(1:10, function(z){
  ret <- sample(x = (5*z):100, 
                size = 20, 
                replace = T)
  dat <- data.table(V1 =  ret[order(ret)] )
  colnames(dat) <- paste('trace', z, sep = '')
  return(dat)
  })

dat <- do.call(cbind, k)
dat$size <- c(seq(0.1, 1, 0.1), 2:11)

ggplot(dat[size >= 0.2, ], aes(x = size)) + 
  geom_line(size = 1.5, aes(y = trace1), color = '#003366') + 
  geom_line(size = 1.5, aes(y = trace2), 
            color = rgb(red = 0, green = 103, blue = 62, maxColorValue = 255)) + 
  geom_line(size = 1.5, aes(y = trace3), color = '#b20000') + 
  scale_x_log10(breaks = c(seq(0.1, 1, 0.1), 2:11))

输出

想要的情节

【问题讨论】:

  • 我不确定你所说的“半步增量”是什么意思,你能详细说明一下吗?
  • @teunbrand 我要重新创建的图表在 x 轴上没有任何“中断”,介于 2 和 3 或 4 和 5 之间,而它们确实存在于我制作的图表中。我还希望不显示 3、5、7 等的 x 轴标签,同时仍显示相应的网格标记。
  • 您在scale_x_log10(breaks = c(seq(0.1, 1, 0.1), 2:11)) 电话中要求提供 3、5、7 等。打印c(seq(0.1, 1, 0.1), 2:11),您将看到请求的休息时间。将该向量更改为您想要的中断。在不需要数字标签的地方使用minor_breaks

标签: r ggplot2 plotly axis r-plotly


【解决方案1】:

无需以ggplot2 开头。你可以直接在plotly

library(dplyr)
library(tidyr)
library(plotly)

dat %>% 
  filter(size >= 0.2) %>% 
  pivot_longer(-size) %>% 
 plot_ly(x = ~size, y = ~value, color = ~name, type = 'scatter', mode = 'lines') %>% 
  layout(xaxis = list(type = "log",
                      tickvals = as.list(c(seq(0.2,1,0.2), seq(2,10,2)))))

【讨论】:

  • 谢谢,我使用的是 ggplot2,因为需要执行此操作的计算机在安装 plotly 和 orca(用于导出为 pdf 或 svg)时出现问题:)
  • @Gautam 当然。从我的回答中只需要一件事;您可以将数据从宽转换为长,这样您就可以拥有一个 geom_line 而不是每列的多个。
【解决方案2】:

通过设置panel.grid.minor = element_blank(),可以通过主题删除次要网格线。

set.seed(69)
library(data.table)
library(ggplot2)

k <- lapply(1:10, function(z){
  ret <- sample(x = (5*z):100, 
                size = 20, 
                replace = T)
  dat <- data.table(V1 =  ret[order(ret)] )
  colnames(dat) <- paste('trace', z, sep = '')
  return(dat)
})

dat <- do.call(cbind, k)
dat$size <- c(seq(0.1, 1, 0.1), 2:11)

ggplot(dat[size >= 0.2, ], aes(x = size)) + 
  geom_line(size = 1.5, aes(y = trace1), color = '#003366') + 
  geom_line(size = 1.5, aes(y = trace2), 
            color = rgb(red = 0, green = 103, blue = 62, maxColorValue = 255)) + 
  geom_line(size = 1.5, aes(y = trace3), color = '#b20000') + 
  scale_x_log10(breaks = c(seq(0.1, 1, 0.1), 2:11)) +
  theme(panel.grid.minor = element_blank())

reprex package (v0.3.0) 于 2020 年 5 月 28 日创建

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多