R изменение формата масштаба по оси Y - PullRequest
15 голосов
/ 19 января 2012

У меня есть график с $ -числениями и датами по оси 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'?

Ответы [ 2 ]

27 голосов
/ 19 января 2012

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

13 голосов
/ 19 января 2012

Используйте axis с пользовательскими метками.Сначала разделите ваши данные на 1 миллион.А затем создайте серию с нотацией MM, используя 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...