Подтвердить что ты не робот

Логарифмическая отметка галочки по оси R() или ggplot2()

Я видел идеальную структуру метки для графика log="y" в этой статье, рис. 3b 3c 3d.

Он имеет короткие метки с метками без пробелов с метками без ярлыков, а также длинные метки метки с метками с длинными логами.

Кто-нибудь знает, как достичь этого в R?

4b9b3361

Ответ 1

В базе R просто создавайте топоры, но вы хотите. Что-то вроде этого может начаться.

set.seed(5)
d <- data.frame(x=1:100, y=rlnorm(100, meanlog=5, sdlog=3))
with(d, {
  plot(x, y, log="y", yaxt="n")
  y1 <- floor(log10(range(y)))
  pow <- seq(y1[1], y1[2]+1)
  ticksat <- as.vector(sapply(pow, function(p) (1:10)*10^p))
  axis(2, 10^pow)
  axis(2, ticksat, labels=NA, tcl=-0.25, lwd=0, lwd.ticks=1)
})

В lattice пакет latticeExtra имеет возможность:

library(lattice)
library(latticeExtra)
xyplot(y~x, data=d, scales=list(y=list(log=10)),
       yscale.components=yscale.components.log10ticks)

Ответ 2

Для ggplot2, кажется, что единственный параметр, который вы имеете для указания тиков, - это size (т.е. ширина).

# A plot of any old data
dfr <- data.frame(x = 1:100, y = rlnorm(100))
p <- ggplot(dfr, aes(x, y)) + 
  geom_point() +
  scale_y_log10(breaks = breaks, labels = breaks)


#Tick locations
get_breaks <- function(x)
{
  lo <- floor(log10(min(x, na.rm = TRUE)))
  hi <- ceiling(log10(max(x, na.rm = TRUE)))
  as.vector(10 ^ (lo:hi) %o% 1:9)
}

breaks <- get_breaks(dfr$y)
log10_breaks <- log10(breaks)

#Some bigger ticks
p + opts(axis.ticks = theme_segment(
    size = ifelse(log10_breaks == floor(log10_breaks), 2, 1)
  ))

Ответ 3

Это сделано в пакете:: sfsmisc. См. Пример справки (axTexpr)