Как сделать R barplot с логарифмической шкалой оси y?

Это должен быть простой вопрос... Я просто пытаюсь сделать barplot из вектора в R,но хочу, чтобы значения отображались в масштабе журнала с отметками и метками оси Y. Я могу сделать обычный барплот просто отлично, но когда я пытаюсь использовать журнал или маркировку, все идет на юг.

вот мой текущий код:

samples <- c(10,2,5,1,2,2,10,20,150,23,250,2,1,500)
barplot(samples)

ок, это работает. Затем я пытаюсь использовать log="" функция, определенная в руководстве barplot, и она никогда не работает. Вот некоторые глупые попытки, которые у меня есть попробовал:

barplot(samples, log="yes")
barplot(samples, log="TRUE")
barplot(log=samples)

кто-нибудь может помочь мне здесь? Кроме того, маркировка тоже была бы отличной. Спасибо!

2 ответов


на log аргумент хочет одно - или двухсимвольную строку, указывающую что оси должна быть логарифмической. Нет, не имеет никакого смысла, чтобы ось x барплота была логарифмической, но это общий механизм, используемый всеми "базовыми" графиками - см. ?plot.default для сведения.

так что вы хотите

barplot(samples, log="y")

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


это должно заставить вас начать возиться с ggplot2.

d<-data.frame(samples)
ggplot(data=d, aes(x=factor(1:length(samples)),y=samples)) + 
    geom_bar(stat="identity") +
    scale_y_log10()

внутри scale_y_log10() функция вы можете определить разрывы, метки и многое другое. Аналогично, вы можете пометить ось X. Например

ggplot(data=d, aes(x=factor(1:length(samples)),y=samples)) +
    geom_bar(stat="identity") +
    scale_y_log10(breaks=c(1,5,10,50,100,500,1000),
                  labels=c(rep("label",7))) +
    scale_x_discrete(labels=samples)