동일한 그래프에 두 그래프 표시
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")
하지만 제가 이렇게 하면, 그들은 같은 플롯에 함께 그려지지 않습니다.
을 할 수 있습니다.hold on
하지만 R에서 이것을 어떻게 하는지 아는 사람이 있습니까?
lines()
또는points()
기존 그래프에 추가되지만 새 창은 생성되지 않습니다.그래서 당신은 할 필요가 있습니다.
plot(x,y1,type="l",col="red")
lines(x,y2,col="green")
사용할 수도 있습니다.par
그래프는 같지만 축은 다릅니다.다음과 같은 것:
plot( x, y1, type="l", col="red" )
par(new=TRUE)
plot( x, y2, type="l", col="green" )
에 대해 자세히 ,par
R
당신은 정말 흥미로운 그래프를 생성할 수 있을 것입니다.또 다른 책은 폴 머렐의 R 그래픽스입니다.
다층 그림을 구성할 때 고려해야 합니다.ggplot
인 미학으로 를 만들고 점진적으로입니다.이 아이디어는 기본적인 미학을 가진 그래픽 객체를 만들고 점진적으로 향상시키는 것입니다.
ggplot
를 타일에데패합야니다해킹를로 패킹해야 .data.frame
.
# Data generation
x <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x,1,1)
df <- data.frame(x,y1,y2)
기본 솔루션:
require(ggplot2)
ggplot(df, aes(x)) + # basic graphical object
geom_line(aes(y=y1), colour="red") + # first layer
geom_line(aes(y=y2), colour="green") # second layer
여기서+ operator
기본 개체에 추가 도면층을 추가하는 데 사용됩니다.
와 함께ggplot
모든 플롯 단계에서 그래픽 객체에 액세스할 수 있습니다.예를 들어, 일반적인 단계별 설정은 다음과 같습니다.
g <- ggplot(df, aes(x))
g <- g + geom_line(aes(y=y1), colour="red")
g <- g + geom_line(aes(y=y2), colour="green")
g
g
그림이 생성되고 모든 단계에서 그림을 볼 수 있습니다(최소한 하나 이상의 레이어를 생성한 후).생성된 개체를 사용하여 플롯을 추가로 강화할 수도 있습니다.예를 들어 축 레이블을 추가할 수 있습니다.
g <- g + ylab("Y") + xlab("X")
g
종g
다음과 같은 모양:
업데이트(2013-11-08):
처럼, 에지적된것처럼댓글것▁as.ggplot
의 철학은 긴 형식의 데이터를 사용할 것을 제안합니다.이 답변을 참조하여 해당 코드를 확인할 수 있습니다.
당신이 찾고 있는 답은 다음과 같습니다.
plot(first thing to plot)
plot(second thing to plot,add=TRUE)
을 합니다.matplot
함수:
matplot(x, cbind(y1,y2),type="l",col=c("red","green"),lty=c(1,1))
만약에 이것을y1
그리고.y2
한 동게평니다에서 됩니다.x
점수 를 어느 에 맞게 합니다(Y을 Y더 큰 맞 조 합 니 정 다 게 값 에 축 니 y 다 합 ▁it ▁they1
또는y2
), 여기서 클립되는 다른 답변 중 일부와 달리y2
만약 그것이 더 커지면,y1
(ggplot 솔루션은 대부분 문제가 없습니다.)
또는 두 선의 x 좌표가 동일하지 않으면 첫 번째 그림에 축 한계를 설정하고 다음을 추가합니다.
x1 <- seq(-2, 2, 0.05)
x2 <- seq(-3, 3, 0.05)
y1 <- pnorm(x1)
y2 <- pnorm(x2,1,1)
plot(x1,y1,ylim=range(c(y1,y2)),xlim=range(c(x1,x2)), type="l",col="red")
lines(x2,y2,col="green")
놀랍게도 이 Q는 4살이고 아무도 언급하지 않았습니다.matplot
또는x/ylim
...
tl;dr: 사용할 항목curve
(와 함께)add=TRUE
) 또는lines
.
는 동의지않에 하지 않습니다.par(new=TRUE)
눈금 표시와 축 레이블이 이중으로 인쇄되기 때문입니다.에그
의 출력.plot(sin); par(new=T); plot( function(x) x**2 )
.
세로축 라벨이 얼마나 엉망인지 보세요!을 해야 . 야합니다설해정로다범므르위가합▁▁set▁to▁need▁would▁are▁different▁you▁ranges▁the야설 범ylim=c(lowest point between the two functions, highest point between the two functions)
제가 지금 보여드리는 것보다 덜 쉽지요. 곡선을 두 개만 추가하는 것이 아니라 여러 개를 추가하는 것이 훨씬 덜 쉽습니다.
음모에 대해 항상 제가 혼란스러워했던 것은 다음과 같은 차이점입니다.curve
그리고.lines
(만약 이것들이 두 개의 중요한 플롯 명령어의 이름이라는 것을 기억할 수 없다면, 그냥 불러보세요.)
사이에 큰 차이점이 있습니다.curve
그리고.lines
.
curve
그림은 다과같함플롯다니합수를과 합니다.curve(sin)
.lines
다음과 x및 y을 사용하여합니다.lines( x=0:10, y=sin(0:10) )
.
작은: 그고여작차은이있습이다니점기에리있다▁and니습.curve
으로 야합니다해출호다▁with▁called와 함께 불러야 .add=TRUE
하려고 는 당이하일대해에는려반, 에면신에.lines
이미 기존 플롯에 추가하는 것으로 가정합니다.
전화한 결과입니다.plot(0:2); curve(sin)
.
methods(plot)
그고확인을 확인하세요.body( plot.function )[[5]]
에 전화할 때.plot(sin)
R은 그것을 알아냅니다.sin
값이며, 는노함(노티 값)을 합니다.plot.function
메드서, 결호니다됩출을 부릅니다.curve
.그렇게curve
는 기능을 처리하기 위한 도구입니다.
그림을 두 개의 열(두 개의 그림이 서로 나란히 있음)로 분할하려면 다음과 같이 할 수 있습니다.
par(mfrow=c(1,2))
plot(x)
plot(y)
@redmode에서 설명한 바와 같이, 다음을 사용하여 동일한 그래픽 장치에 두 개의 선을 플롯할 수 있습니다.ggplot
이 답변에서 데이터는 '넓은' 형식이었습니다., 단을 사용할는 사를 합니다.ggplot
일반적으로 데이터를 '긴' 형식으로 데이터 프레임에 보관하는 것이 가장 편리합니다. 다음, 그다그다를 '그룹화 변수다른 ' 변수'로 합니다.aes
인수,색상과 변수에 가 나타납니다.tics 선인 종 류 또 는 색 상 과 같 은 따 에 달 라 며 지 라 가 례 나 타 범 납 해 니 다 당 수 수 변 선 화 은 룹 성 속 그 의 ▁the ▁will 타 , , t , 납 ety 니 나 ics tics ▁arguments ▁line 다 가 ▁proper 례 ▁colour
이 경우, 우리는 다음을 사용할 수 있습니다.colour
심미학 - 선의 색상을 데이터 세트의 다양한 변수 수준(여기서는 y1 대 y2)과 일치시킵니다.그러나 먼저 데이터를 광범위한 형식에서 긴 형식으로 녹여야 합니다. 예를 들어 '녹음'이라는 함수를 사용합니다.reshape2
꾸러미데이터를 재구성하는 다른 방법은 data.frame을 와이드 형식에서 롱 형식으로 재구성하는 것입니다.
library(ggplot2)
library(reshape2)
# original data in a 'wide' format
x <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)
df <- data.frame(x, y1, y2)
# melt the data to a long format
df2 <- melt(data = df, id.vars = "x")
# plot, using the aesthetics argument 'colour'
ggplot(data = df2, aes(x = x, y = value, colour = variable)) + geom_line()
기본 그래픽(예: 격자/그리드 그래픽이 아님)을 사용하는 경우 점/선/다각형 함수를 사용하여 새 플롯을 시작하지 않고 플롯에 추가 세부 정보를 추가하여 MATLAB의 보류 기능을 모방할 수 있습니다.다중점 레이아웃의 경우 다음을 사용할 수 있습니다.par(mfg=...)
추가할 플롯을 선택합니다.
점을 오버플로에 사용할 수 있습니다.
plot(x1, y1,col='red')
points(x2,y2,col='blue')
인 매트랩plot(x1,y1,x2,y2)
를 사용하여 R로 번역할 수 있습니다.ggplot2
예를 들어 다음과 같습니다.
x1 <- seq(1,10,.2)
df1 <- data.frame(x=x1,y=log(x1),type="Log")
x2 <- seq(1,10)
df2 <- data.frame(x=x2,y=cumsum(1/x2),type="Harmonic")
df <- rbind(df1,df2)
library(ggplot2)
ggplot(df)+geom_line(aes(x,y,colour=type))
ggplot2를 사용하여 다양한 x축 범위를 갖는 Tingting Zhao의 이중 선 그림에서 영감을 받았습니다.
표시할 값을 배열로 유지하는 대신 행렬에 저장합니다.기본적으로 전체 행렬은 하나의 데이터 세트로 처리됩니다.그러나 행렬에 행이 있는 것처럼 동일한 수의 수식어(예: col()를 그림에 추가하면 R은 각 행이 독립적으로 처리되어야 함을 알게 됩니다.예:
x = matrix( c(21,50,80,41), nrow=2 )
y = matrix( c(1,2,1,2), nrow=2 )
plot(x, y, col("red","blue")
데이터 세트의 크기가 다른 경우가 아니면 이 기능이 작동합니다.
당신은 사용할 수 있습니다.ggplotly()
여기서 ggplot2 예제 중 하나를 대화형 그림으로 전환하는 플롯 패키지의 함수이지만, 이러한 종류의 플롯은 ggplot2가 없는 것이 더 낫다고 생각합니다.
# call Plotly and enter username and key
library(plotly)
x <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)
plot_ly(x = x) %>%
add_lines(y = y1, color = I("red"), name = "Red") %>%
add_lines(y = y2, color = I("green"), name = "Green")
ggvis를 사용하여 그림을 만들 수도 있습니다.
library(ggvis)
x <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x,1,1)
df <- data.frame(x, y1, y2)
df %>%
ggvis(~x, ~y1, stroke := 'red') %>%
layer_paths() %>%
layer_paths(data = df, x = ~x, y = ~y2, stroke := 'blue')
그러면 다음 그림이 생성됩니다.
용사를 합니다.plotly
)에서 추출한 )plotly
및 y축 - 된 것 같습니다1차 y축 - y축 - y축 포함):
library(plotly)
x <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)
df=cbind.data.frame(x,y1,y2)
plot_ly(df) %>%
add_trace(x=~x,y=~y1,name = 'Line 1',type = 'scatter',mode = 'lines+markers',connectgaps = TRUE) %>%
add_trace(x=~x,y=~y2,name = 'Line 2',type = 'scatter',mode = 'lines+markers',connectgaps = TRUE,yaxis = "y2") %>%
layout(title = 'Title',
xaxis = list(title = "X-axis title"),
yaxis2 = list(side = 'right', overlaying = "y", title = 'secondary y axis', showgrid = FALSE, zeroline = FALSE))
작업 데모의 스크린샷:
우리는 또한 격자 라이브러리를 사용할 수 있습니다.
library(lattice)
x <- seq(-2,2,0.05)
y1 <- pnorm(x)
y2 <- pnorm(x,1,1)
xyplot(y1 + y2 ~ x, ylab = "y1 and y2", type = "l", auto.key = list(points = FALSE,lines = TRUE))
특정 색상의 경우
xyplot(y1 + y2 ~ x,ylab = "y1 and y2", type = "l", auto.key = list(points = F,lines = T), par.settings = list(superpose.line = list(col = c("red","green"))))
사용하다curve
수학적 기능을 위한.그리고 add=를 사용합니다.TRUE: 동일한 그림과 축을 사용합니다.
curve( log2 , to=5 , col="black", ylab="log's(.)")
curve( log , add=TRUE , col="red" )
curve( log10, add=TRUE , col="blue" )
abline( h=0 )
언급URL : https://stackoverflow.com/questions/2564258/plot-two-graphs-in-a-same-plot
'programing' 카테고리의 다른 글
ggplot2 구문이 타당할 때 RCMD 검사 "글로벌 변수에 대한 가시적 바인딩 없음" 참고 사항을 어떻게 처리할 수 있습니까? (0) | 2023.06.05 |
---|---|
대화형 Python 셸에서 마지막 결과 가져오기 (0) | 2023.06.05 |
Android:이전 활동으로 돌아가기 (0) | 2023.06.05 |
Android용 Firebase에서 암호를 잊어버림 (0) | 2023.06.05 |
테스트 사용자에 대한 iOS 앱 내 구매 샌드박스에서 구매 지우기 (0) | 2023.06.05 |