Логарифмическая метка по оси Y в R plot () или ggplot2 () - PullRequest
12 голосов
/ 28 апреля 2011

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

У него короткие, помеченные логарифмом незначительные отметки без меток, плюс длинные, отмеченные журналом основные отметки с метками.

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

Ответы [ 4 ]

11 голосов
/ 28 апреля 2011

В базе 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)
6 голосов
/ 28 апреля 2011

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

3 голосов
/ 28 апреля 2011

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

1 голос
/ 07 апреля 2018

Вот решение ggplot2:

library(ggplot2)

set.seed(20180407)

df = data.frame(x = seq(from = 1, by = 1, length.out = 20),
                y = 2^(seq(to = 1, by = -1, length.out = 20) + rnorm(20, 0, 0.7)))

ggplot(data = df, aes(x = x, y = y)) +
  geom_line() +
  scale_y_log10() +
  annotation_logticks(sides = "l") 

example_plot

Вы можете сделать так, чтобы оно выглядело даже больше, чем бумага, с которой вы связались с некоторымиТемы:

ggplot(data = df, aes(x = x, y = y)) +
  geom_line(colour = "blue") +
  geom_point(colour = "blue") +
  scale_y_log10() +
  annotation_logticks(sides = "l") +
  theme_minimal() +
  theme(panel.grid = element_blank(), 
        axis.line = element_line(),
        axis.ticks.x = element_line())

example_themed

...