Я хотел бы построить y1 и y2 на одном графике.
x <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)
plot(x, y1, type = "l", col = "red")
plot(x, y2, type = "l", col = "green")
Но когда я делаю это так, они не отображаются на одном графике вместе.
В Matlab можно делать hold on
, но кто-нибудь знает, как это сделать в R?
?curve
. Использованиеadd=TRUE
.Ответы:
lines()
илиpoints()
добавит к существующему графику, но не создаст новое окно. Так что вам нужно сделатьисточник
plot(sin); curve(cos, add=TRUE)
.lines(x2,y2,...)
вместоlines(x,y2,...)
Вы также можете использовать
par
и построить на одном графике, но разные оси. Что-то следующее:Если вы подробно прочитаете о
par
вR
, вы сможете генерировать действительно интересные графики. Еще одна книга, на которую стоит обратить внимание, - R Graphics Пола Мюрреля.источник
xlab="", ylab="", ...
и несколько других во второйplot
.При построении многослойных участков следует учитывать
ggplot
пакет. Идея состоит в том, чтобы создать графический объект с базовой эстетикой и постепенно улучшать его.ggplot
стиль требует данных для упаковкиdata.frame
.Основное решение:
Здесь
+ operator
используется для добавления дополнительных слоев к базовому объекту.При этом у
ggplot
вас есть доступ к графическому объекту на каждом этапе прорисовки. Скажем, обычная пошаговая настройка может выглядеть так:g
производит сюжет, и вы можете увидеть его на каждом этапе (ну, после создания хотя бы одного слоя). Дальнейшие заговоры сюжета также производятся с созданным объектом. Например, мы можем добавить метки для осей:Финал
g
выглядит так:ОБНОВЛЕНИЕ (2013-11-08):
Как указано в комментариях,
ggplot
философия России предполагает использование данных в длинном формате. Вы можете обратиться к этому ответу , чтобы увидеть соответствующий код.источник
ggplot
обрабатывает это более естественно, чем «широкий» формат, который вы используете.ggplot
философию России ...Я думаю, что вы ищете ответ:
источник
"add" is not a graphical parameter
предупреждение, а затем просто печатает второй график поверх первого."add" is not a graphical parameter
. Мой Р естьR version 3.2.3 (2015-12-10)
. Вы можете использоватьpar(new=TRUE)
команду между этими графиками.Используйте
matplot
функцию:используйте это, если
y1
иy2
оцениваются в тех жеx
точках. Он масштабирует ось Y в зависимости от того, что больше (y1
илиy2
), в отличие от некоторых других ответов, которые здесь будут отсекаться,y2
если он станет большеy1
(решения ggplot в большинстве случаев подходят для этого).В качестве альтернативы, и если две линии не имеют одинаковые x-координаты, установите пределы оси на первом графике и добавьте:
Удивлен, что это Q 4 года, и никто не упомянул
matplot
илиx/ylim
...источник
tl; dr: Вы хотите использовать
curve
(сadd=TRUE
) илиlines
.Я не согласен с этим,
par(new=TRUE)
потому что это дважды напечатает отметки и метки осей. НапримерВыход из
plot(sin); par(new=T); plot( function(x) x**2 )
.Посмотрите, как перепутались метки вертикальной оси! Поскольку диапазоны различны вам нужно будет набор
ylim=c(lowest point between the two functions, highest point between the two functions)
, который менее легко , чем то , что я собираюсь показать вам , --- и способ менее легко , если вы хотите добавить не только две кривые, но многие.Что всегда смущало меня в заговоре, так это разница между
curve
иlines
. (Если вы не можете вспомнить, что это имена двух важных команд построения, просто спойте это.)Вот большая разница между
curve
иlines
.curve
построит функцию, какcurve(sin)
.lines
участки с точки х и у значений, например:lines( x=0:10, y=sin(0:10) )
.И вот небольшая разница:
curve
нужно вызыватьadd=TRUE
то, что вы пытаетесь сделать, хотяlines
уже предполагается, что вы добавляете к существующему сюжету.Вот результат звонка
plot(0:2); curve(sin)
.За кулисами, проверить
methods(plot)
. И проверьbody( plot.function )[[5]]
. Когда вы вызываетеplot(sin)
R, выясняется, чтоsin
это функция (а не значения y) и используетplot.function
метод, который в итоге вызываетcurve
. Такcurve
же и инструмент, предназначенный для обработки функций.источник
если вы хотите разделить график на два столбца (2 графика рядом друг с другом), вы можете сделать это следующим образом:
Ссылка Ссылка
источник
Как описано в @redmode, вы можете построить две линии в одном графическом устройстве, используя
ggplot
. В этом ответе данные были в «широком» формате. Однако при использовании,ggplot
как правило, наиболее удобно хранить данные во фрейме данных в «длинном» формате. Затем, используя различные «переменные группировки» вaes
аргументах thetic, свойства линии, такие как тип линии или цвет, будут меняться в зависимости от переменной группировки, и будут появляться соответствующие легенды.В этом случае мы можем использовать
colour
эстетику, которая сопоставляет цвет линий с различными уровнями переменной в наборе данных (здесь: y1 против y2). Но сначала нам нужно расплавить данные из широкого в длинный формат, используя, например, функцию «расплавить» изreshape2
пакета. Другие способы изменения данных описаны здесь: Изменение формы data.frame из широкого в длинный формат .источник
Если вы используете базовую графику (то есть не решетчатую / сеточную графику), то вы можете имитировать функцию удержания MATLAB, используя функции точек / линий / полигонов, чтобы добавить дополнительные детали к своим графикам без запуска нового графика. В случае макета с несколькими участками вы можете
par(mfg=...)
выбрать, к какому графику вы добавляете объекты.источник
Вы можете использовать очки за оверплот, то есть.
источник
Вместо того, чтобы хранить значения, которые будут отображены в массиве, сохраните их в матрице. По умолчанию вся матрица будет обрабатываться как один набор данных. Однако, если вы добавите к графику такое же количество модификаторов, например, col (), поскольку у вас есть строки в матрице, R обнаружит, что каждая строка должна обрабатываться независимо. Например:
Это должно работать, если ваши наборы данных не имеют разных размеров.
источник
Идиоматический Matlab
plot(x1,y1,x2,y2)
может быть переведен в R,ggplot2
например, следующим образом:Вдохновленный сюжетами двойной линии Тинтинга Чжао с различным диапазоном оси X Использование ggplot2 .
источник
Вы можете использовать
ggplotly()
функцию из пакета plotly , чтобы превратить любой из приведенных здесь примеров gggplot2 в интерактивный график, но я думаю, что этот тип графика лучше без ggplot2 :источник
Вы также можете создать свой график, используя ggvis :
Это создаст следующий сюжет:
источник
Используя
plotly
(добавление решенияplotly
с первичной и вторичной осью y - кажется, отсутствует):Скриншот из рабочего демо:
источник
Error in library(plotly) : there is no package called ‘plotly’
почему?plotly
? Вам необходимо установить пакет с помощьюinstall.packages("plotly")
команды.мы также можем использовать решетку библиотеки
Для конкретных цветов
источник