Я хотел бы наложить два графика рассеяния в R, чтобы каждый набор точек имел свою собственную (другую) ось y (то есть в позициях 2 и 4 на рисунке), но точки выглядели наложенными на один и тот же рисунок.
Можно ли это сделать с помощью plot
?
Изменить пример кода, показывающего проблему
# example code for SO question
y1 <- rnorm(10, 100, 20)
y2 <- rnorm(10, 1, 1)
x <- 1:10
# in this plot y2 is plotted on what is clearly an inappropriate scale
plot(y1 ~ x, ylim = c(-1, 150))
points(y2 ~ x, pch = 2)
ggplot2
: stackoverflow.com/questions/3099219/… (поиск SO для[r] two y-axes
или[r] twoord.plot
) - есть несколько других связанных ответов, хотя (к моему удивлению, поскольку это R FAQ) ничего идентичногоОтветы:
обновление : скопирован материал, который был на вики -странице R по адресу http://rwiki.sciviews.org/doku.php?id=tips:graphics-base:2yaxes , ссылка теперь не работает: также доступно с обратной машины
Две разные оси Y на одном графике
(некоторый материал первоначально Даниэль Рэйдл, 31.03.2006, 15:26)
Обратите внимание, что существует очень мало ситуаций, когда уместно использовать два разных масштаба на одном графике. Наблюдателя графики очень легко ввести в заблуждение. Проверьте следующие два примера и комментарии по этой проблеме ( example1 , example2 из Junk Charts ), а также эту статью Стивена Фью (в которой делается вывод: «Я, конечно, не могу сделать раз и навсегда вывод, что графики с осями с двойным масштабированием никогда не полезно; только то, что я не могу придумать ситуацию, которая оправдывает их в свете других, более эффективных решений »). Также см. пункт № 4 в этом мультфильме ...
Если вы настроены, основной рецепт - создать свой первый график, настроенный так,
par(new=TRUE)
чтобы R не очищал графическое устройство, создание второго графика с помощьюaxes=FALSE
(и установкаxlab
иylab
пустое значение -ann=FALSE
также должно работать), а затем использованиеaxis(side=4)
для добавления новой оси с правой стороны иmtext(...,side=4)
добавить метку оси с правой стороны. Вот пример с небольшим количеством выдуманных данных:twoord.plot()
вplotrix
пакете автоматизирует этот процесс, как иdoubleYScale()
вlatticeExtra
пакете.Другой пример (адаптированный из сообщения в списке рассылки R Роберта Бэра):
Аналогичные рецепты могут использоваться для наложения графиков разных типов - гистограмм, гистограмм и т. Д.
источник
axis(1,pretty(range(time),10))
строчку?Как следует из названия,
twoord.plot()
в пакете plotrix графики с двумя осями ординат.источник
Один из вариантов - сделать два участка рядом.
ggplot2
предоставляет для этого хороший вариантfacet_wrap()
:источник
Если вы можете отказаться от меток шкал / осей, вы можете изменить масштаб данных до интервала (0, 1). Это работает, например, для различных треков «покачивания» на хромосомах, когда вас обычно интересуют локальные корреляции между треками, и они имеют разные масштабы (охват в тысячах, Fst 0-1).
Затем, имея фрейм данных с
chrom
,position
,coverage
иfst
столбцов, вы можете сделать что - то вроде:Преимущество этого в том, что вы не ограничены двумя тракками.
источник
Я тоже предлагаю
twoord.stackplot()
вplotrix
пакете графики с более чем двумя осями ординат.источник
Другая альтернатива, аналогичная принятому ответу @BenBolker, - это переопределение координат существующего графика при добавлении второго набора точек.
Вот минимальный пример.
Данные:
Участок:
источник