[英]Plotting multiple curves same graph and same scale
這是該問題的后續措施。
我想在同一張圖上繪制多條曲線,但是我的新曲線要遵循由第一條曲線生成的相同y軸比例。
請注意以下示例:
y1 <- c(100, 200, 300, 400, 500)
y2 <- c(1, 2, 3, 4, 5)
x <- c(1, 2, 3, 4, 5)
# first plot
plot(x, y1)
# second plot
par(new = TRUE)
plot(x, y2, axes = FALSE, xlab = "", ylab = "")
這實際上是在圖形的相同坐標上繪制兩組值(因為我隱藏了第二個繪制將創建的新y軸)。
然后我的問題是在繪制第二張圖時如何保持相同的y軸比例。
(典型的方法是使用plot
只是一次設置的限制,可能包括所有系列組合的范圍內,然后在使用points
和lines
來添加單獨的系列。)要使用plot
與多次par(new=TRUE)
您需要確保您的第一個圖具有適當的ylim
以接受所有序列(在另一種情況下,您可能還需要對xlim使用相同的策略):
# first plot
plot(x, y1, ylim=range(c(y1,y2)))
# second plot EDIT: needs to have same ylim
par(new = TRUE)
plot(x, y2, ylim=range(c(y1,y2)), axes = FALSE, xlab = "", ylab = "")
下一個代碼將更緊湊地完成任務,默認情況下,您將數字作為點,但是第二個代碼為您提供典型的R型-“點”:
matplot(x, cbind(y1,y2))
matplot(x, cbind(y1,y2), pch=1)
points
或lines
很方便
y2
是稍后生成的,或者 x
但仍應進入相同的坐標系。 由於y
共享相同的x
,因此您也可以使用matplot
:
matplot (x, cbind (y1, y2), pch = 19)
(沒有pch
matplopt
將繪制y
矩陣的列號而不是點)。
您對此處想要的內容並不太清楚,因為考慮到您的示例代碼,我認為@DWin在技術上是正確的。 我認為您真正想要的是:
y1 <- c(100, 200, 300, 400, 500)
y2 <- c(1, 2, 3, 4, 5)
x <- c(1, 2, 3, 4, 5)
# first plot
plot(x, y1,ylim = range(c(y1,y2)))
# Add points
points(x, y2)
DWin的解決方案在隱式假設(基於您的示例代碼)下運行,該隱式假設要繪制覆蓋原始比例尺的第二組點。 這就是為什么他的圖像看起來像在1、101等處繪制點的原因。第二次調用plot
並不是您想要的,您想要使用points
添加到圖中。 因此,我機器上的上述代碼會產生以下結果:
但是DWin關於使用ylim
是正確的。
我的解決方案是使用ggplot2
。 它會自動處理這些類型的事情。 最大的事情是適當地安排數據。
y1 <- c(100, 200, 300, 400, 500)
y2 <- c(1, 2, 3, 4, 5)
x <- c(1, 2, 3, 4, 5)
df <- data.frame(x=rep(x,2), y=c(y1, y2), class=c(rep("y1", 5), rep("y2", 5)))
然后使用ggplot2
進行繪制
library(ggplot2)
ggplot(df, aes(x=x, y=y, color=class)) + geom_point()
這就是說將數據繪制在df
,並按class
將點分開。
生成的圖是
我不確定您想要什么,但我將使用點陣。
x = rep(x,2)
y = c(y1,y2)
fac.data = as.factor(rep(1:2,each=5))
df = data.frame(x=x,y=y,z=fac.data)
# this create a data frame where I have a factor variable, z, that tells me which data I have (y1 or y2)
然后,只需繪圖
xyplot(y ~x|z, df)
# or maybe
xyplot(x ~y|z, df)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.