Парадные графики нескольких перьев на одном графике - PullRequest
1 голос
/ 08 апреля 2019

Я делаю стохастический анализ доминирования с различным распределением доходов, используя Парад Пена. Я могу построить Парад одного пера, используя функцию Pen из пакета ineq, но мне нужно визуальное сравнение, и мне нужно несколько строк на одном изображении. Я не знаю, как извлечь значения из функции, поэтому я не могу этого сделать.

У меня есть следующий воспроизводимый пример:

set.seed(123) 
x <- rnorm(100)
y <- rnorm(100, mean = 0.2) 
library(ineq) 
Pen(x) 
Pen(y)

Я получаю следующие участки:

<a href="https://i.stack.imgur.com/qXRBl.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/qXRBl.png" width="326" alt="https://i.stack.imgur.com/qXRBl.png" title="PlotX!"></a> <a href="https://i.stack.imgur.com/CaoFA.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/CaoFA.png" width="326" height="235" alt="https://i.stack.imgur.com/CaoFA.png" title="PlotY!"></a>

Я хочу получить когда-нибудь следующее:

       <a href="https://i.stack.imgur.com/0Zma2.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/0Zma2.png" width="560" height="335" alt="https://i.stack.imgur.com/0Zma2.png" title="PlotWanted!"></a>

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Вы можете использовать add = TRUE:

set.seed(123) 
x <- rnorm(100)
y <- rnorm(100, mean = 0.2) 
library(ineq) 
Pen(x); Pen(y, add = TRUE)

enter image description here

С help("Pen"):

добавить логическое,Следует ли добавить график к существующему графику?

Хотя решение, упомянутое MM в комментариях, является более общим решением, в данном конкретном случае оно создает занятую ось Y:

Pen(x)
par(new = TRUE) 
Pen(y)

enter image description here

Я бы обобщил совет по построению функций следующим образом:

  1. Проверьте функции построения графиковфайл справки.Если он имеет аргумент add, используйте его.
  2. В противном случае используйте par(new = TRUE) технику

Обновление

Как ММ полезно упомянуть в комментариях,их более общее решение не даст занятую ось Y, если вы вручную подавите ось Y на втором графике:

Pen(x)
par(new = TRUE) 
Pen(y, yaxt = "n")

enter image description here

1 голос
/ 08 апреля 2019

Глядя на ?ineq::Pen(), похоже, что работает plot(); следовательно, следующие работы работают для вас.

Pen(x) 
Pen(y, add=T) 

Примечание: Однако add=T обрезает часть ваших данных, поскольку на втором графике есть точки, которые выходят за пределы первого.

Обновление при использовании par(new=T):

Использование par(new=T) в основном означает наложение двух графиков друг на друга; следовательно, важно сделать их в одном масштабе. Мы можем достичь этого, установив одинаковые пределы оси. Тем не менее, при использовании аргумента add=T желательно установить пределы оси, чтобы не потерять какую-либо часть данных. Это лучший способ наложения двух сюжетов.

Pen(x, ylim=c(0,38), xlim=c(0,1))
par(new=T)
Pen(y, col="red", ylim=c(0,38), xlim=c(0,1), yaxt='n', xaxt='n')
                 <a href="https://i.stack.imgur.com/ZtPTF.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/ZtPTF.png" alt="https://i.stack.imgur.com/ZtPTF.png" title="OverlayingPlots!"></a>

По сути, вы можете сделать то же самое с add=T.

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