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

Не хотите, чтобы научная нотация по оси графика

Я регулярно делаю все виды диаграмм рассеяния в R, используя команду plot.

Иногда обе, иногда только одна из сюжетных осей помечена в научной нотации. Я не понимаю, когда R принимает решение переключиться на научную нотацию. Удивительно, но часто печатает числа, которые никакие здравомыслящие люди не напишут в научной нотации при маркировке сюжета, например, он называет 5 как 5e + 00. Скажем, у вас есть логарифмическая ось, достигающая 1000, научная нотация неоправданна с такими "маленькими" числами.

Я хотел бы подавить это поведение, я всегда хочу, чтобы R отображал целочисленные значения. Возможно ли это?

Я попробовал options(scipen=10), но затем он начинает писать 5.0 вместо 5, а на другой оси 5 все равно 5 и т.д. Как я могу получить чистые целочисленные значения в своих R-графиках?

Я использую R 2.12.1 в Windows 7.

4b9b3361

Ответ 1

Используйте options(scipen=5) или какое-либо другое достаточно высокое число. Опция scipen определяет, насколько вероятно, что R переключается на научную нотацию, чем выше значение, тем меньше вероятность переключения. Установите параметр перед тем, как сделать свой сюжет, если он все еще имеет научную нотацию, установите его на большее число.

Ответ 2

Вы можете использовать format или formatC, чтобы, гм, отформатировать метки оси.

Для целых чисел попробуйте

x <- 10 ^ (1:10)
format(x, scientific = FALSE)
formatC(x, digits = 0, format = "f")

Если числа преобразуются в фактические целые числа (т.е. не слишком большие), вы также можете использовать

formatC(x, format = "d")

Как вы получаете метки на вашей оси, зависит от используемой вами схемы построения.

Ответ 3

Для этого вы можете использовать команду axis(), например:

x <- 1:100000
y <- 1:100000
marks <- c(0,20000,40000,60000,80000,100000)
plot(x,y,log="x",yaxt="n",type="l")
axis(2,at=marks,labels=marks)

дает:

enter image description here

EDIT: если вы хотите, чтобы все они были в одном формате, вы можете использовать решение @Richie для их получения:

x <- 1:100000
y <- 1:100000
format(y,scientific=FALSE)
plot(x,y,log="x",yaxt="n",type="l")
axis(2,at=marks,labels=format(marks,scientific=FALSE))

Ответ 4

Попробуйте это. Я намеренно разгонял различные части, чтобы вы могли перемещать вещи.

library(sfsmisc)

#Generate the data
x <- 1:100000
y <- 1:100000

#Setup the plot area
par(pty="m", plt=c(0.1, 1, 0.1, 1), omd=c(0.1,0.9,0.1,0.9))

#Plot a blank graph without completing the x or y axis
plot(x, y, type = "n", xaxt = "n", yaxt="n", xlab="", ylab="", log = "x", col="blue")
mtext(side=3, text="Test Plot", line=1.2, cex=1.5)

#Complete the x axis
eaxis(1, padj=-0.5, cex.axis=0.8)
mtext(side=1, text="x", line=2.5)

#Complete the y axis and add the grid
aty <- seq(par("yaxp")[1], par("yaxp")[2], (par("yaxp")[2] - par("yaxp")[1])/par("yaxp")[3])
axis(2, at=aty, labels=format(aty, scientific=FALSE), hadj=0.9, cex.axis=0.8, las=2)
mtext(side=2, text="y", line=4.5)
grid()

#Add the line last so it will be on top of the grid
lines(x, y, col="blue")

enter image description here

Ответ 5

Вы можете попробовать lattice:

require(lattice)
x <- 1:100000
y <- 1:100000
xyplot(y~x, scales=list(x = list(log = 10)), type="l")

enter image description here

Ответ 6

Обычно достаточно установить ограничение по оси @max вашей переменной

a <- c(0:1000000)
b <- c(0:1000000)

plot(a, b, ylim = c(0, max(b)))

Ответ 7

В пакете R graphics есть функция axTicks, которая возвращает отметки тиков галочек, которые будут установлены функциями axis и plot. Другие ответы, заданные на этот вопрос, определяют местоположение галочек вручную, что может быть неудобно в некоторых ситуациях.

myTicks = axTicks(1)
axis(1, at = myTicks, labels = formatC(myTicks, format = 'd'))

Минимальным примером будет

plot(10^(0:10), 0:10, log = 'x', xaxt = 'n')
myTicks = axTicks(1)
axis(1, at = myTicks, labels = formatC(myTicks, format = 'd'))

В функции axTicks также есть параметр log, но в этой ситуации нет необходимости устанавливать правильное расположение галочки в логарифмической оси.