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

R, изменяющий формат шкалы по оси Y

У меня есть график, который имеет $-амности и даты на оси y и x соответственно. В настоящее время сумма в долларах составляет от 0 до 15 миллионов долларов. Что-то вроде этого:

x <- rnorm(20)^2 * 1000000
plot(x)

R работает как '1.0e+07' вместо '10,000,000', а также ориентирует текст вертикально, а не горизонтально.

Мои вопросы:

1) как бы получить масштабный текст в горизонтальной ориентации?

2) как бы мне заставить R использовать 10MM вместо '10,000,000' или '1.0e+07'?

4b9b3361

Ответ 1

1) См. параметр scipen в ?options, который является штрафом против использования научной нотации. Для лучшего управления вам нужно нарисовать ось вручную с помощью ярлыков, которые вы хотите.

2) См. las в ?par, который контролирует грубую ориентацию меток оси.

Для 1):

x <- rnorm(20)^2 * 10000000
layout(matrix(1:2, ncol = 2))
plot(x)
getOption("scipen")
opt <- options("scipen" = 20)
getOption("scipen")
plot(x)
options(opt)
layout(1)

который дает

enter image description here

Чтобы построить собственную ось, попробуйте

plot(x / 10000000, axes = FALSE)
axis(1)
pts <- pretty(x / 10000000)
axis(2, at = pts, labels = paste(pts, "MM", sep = ""))
box()

Что дает

enter image description here

Где мы используем pretty() для выбора симпатичных местоположений для тиков, так же как R будет, а затем добавить пользовательскую ось. Обратите внимание, как мы подавляем рисование оси в вызове plot(), а затем добавляем назад оси и рамку графика с вызовами axis() и box().

Для 2) комбинирования с 1)

opt <- options("scipen" = 20)
op <- par(mar = c(5,7,4,2) + 0.1) ## extra margin to accommodate tick labs
x <- rnorm(20)^2 * 10000000
plot(x, las = 1, ylab = "")       ## no y-axis label 
title(ylab = "label", line = 5.5) ## need to plot the axis label
par(op)
options(opt)

Что дает

enter image description here

Обратите внимание на то, как мы используем las в вызове plot(), и нам нужно создать дополнительное пространство в поле для размещения ярлыков меток. Нам также нужно нанести ярлык вручную, иначе R будет прикрепляться к ярлыкам меток.

Для ярлыков пользовательской оси добавьте вызов las = 1 к вызову axis():

op <- par(mar = c(5,5,4,2) + 0.1)
plot(x / 10000000, axes = FALSE, ylab = "")
axis(1)
pts <- pretty(x / 10000000)
axis(2, at = pts, labels = paste(pts, "MM", sep = ""), las = 1)
title(ylab = "my label", line = 4)
box()
par(op)

Что производит

enter image description here

Ответ 2

Используйте axis с пользовательскими ярлыками. Во-первых, разделите свои данные на 1 миллион. А затем создайте серию с обозначением ММ, используя paste()

y <-rnorm(20)^2 * 1000000 /1000000
x <-11:30

plot(x,y, yaxt="n")
my.axis <-paste(axTicks(2),"MM",sep="")
axis(2,at=axTicks(2), labels=my.axis)

Текст теперь горизонтальный. Но если вы столкнулись с проблемой использования, las = 1, чтобы заставить метки горизонтальными.

axis(2,at=axTicks(2), labels=my.axis, las=1)

enter image description here