簡體   English   中英

繪制多條相同圖形和相同比例的曲線

[英]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只是一次設置的限制,可能包括所有系列組合的范圍內,然后在使用pointslines來添加單獨的系列。)要使用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)

pointslines很方便

  • y2是稍后生成的,或者
  • 新數據不具有相同的x但仍應進入相同的坐標系。

由於y共享相同的x ,因此您也可以使用matplot

matplot (x, cbind (y1, y2), pch = 19)

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM