簡體   English   中英

帶兩個Y軸的4面板雙線圖

[英]4 Panel Double Line Plot with Two Y-Axes

我正在嘗試創建一個具有4個面板的圖形,每個“男性” 1個。 每個面板將有兩條線,每個y軸一條。 第一個y軸的左側為“ A”,第二個y軸的右側y軸為“ B”。 x軸除了代表每個男性有15個測量值之外,不代表其他任何內容。 我也想為每個y軸設置限制。 限制如下:

男548(40,58)和(2600,3100)男594(36,54)和(3400,3900)男331(42,60)和(3500,3700)男126(35,49)和(3000, 4200)

我不需要圖例,可以弄清楚我認為的不同線型,顏色和軸標簽。 唯一的怪癖可能是我是否希望在標為“ A”的圖的左側有一個整體軸標簽,而在標為“ B”的圖的右側是一個軸標簽,因此軸標簽並不過分。

我真的不知道從哪里開始,因為有兩個問題:4個面板,每個面板都有兩個y軸。 任何幫助是極大的贊賞!

structure(list(Male = c(594L, 594L, 594L, 594L, 594L, 594L, 594L, 
594L, 594L, 594L, 594L, 594L, 594L, 594L, 594L, 548L, 548L, 548L, 
548L, 548L, 548L, 548L, 548L, 548L, 548L, 548L, 548L, 548L, 548L, 
548L, 331L, 331L, 331L, 331L, 331L, 331L, 331L, 331L, 331L, 331L, 
331L, 331L, 331L, 331L, 331L, 126L, 126L, 126L, 126L, 126L, 126L, 
126L, 126L, 126L, 126L, 126L, 126L, 126L, 126L, 126L), A = c(53.07, 
46.91, 48.02, 43.36, 41.32, 39.69, 41.25, 43.9, 43.24, 41.48, 
37.22, 38.04, 37.5, 38.88, 37.51, 57.23, 51.97, 46.85, 51.02, 
41.56, 51.23, 44.79, 50.87, 46.6, 56.22, 46.98, 49.04, 50.07, 
46.32, 48.75, 53.62, 58.19, 51.29, 51.85, 55.28, 55.66, 54.14, 
49.4, 49.87, 44.81, 44.23, 47.99, 45.46, 44.9, 42.09, 43.36, 
44.52, 44.77, 49.08, 47.88, 39.24, 41.75, 48.63, 49.95, 43.57, 
41.94, 37.74, 40.97, 45.56, 45.65), B = c(3833.4, 3692.7, 3625, 
3630, 3589.7, 3506.9, 3501.6, 3606.2, 3580.6, 3530, 3479.7, 3512, 
3510.9, 3484.5, 3535.5, 2973.9, 2948.8, 2715.2, 2980.4, 2693.6, 
2888.4, 2718.5, 2971, 2752.2, 3008.5, 2718.4, 2860.2, 2848, 2893.3, 
2940.2, 3526.7, 3592.9, 3588.2, 3614.1, 3619.2, 3625.8, 3574.8, 
3650, 3678.2, 3655.6, 3675.3, 3681.3, 3680.7, 3647.5, 3670, 3640, 
3360.8, 3309.4, 3101.1, 3263.3, 3070, 3153.3, 3594, 4220, 3670, 
3367.9, 3156.7, 3431, 3440.5, 3276.7)), .Names = c("Male", "A", 
"B"), row.names = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 
11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 
24L, 25L, 26L, 27L, 28L, 29L, 30L, 46L, 47L, 48L, 49L, 50L, 51L, 
52L, 53L, 54L, 55L, 56L, 57L, 58L, 59L, 60L, 61L, 62L, 63L, 64L, 
65L, 66L, 67L, 68L, 69L, 70L, 71L, 72L, 73L, 74L, 75L), class = "data.frame")

我將為您提供一個Lattice / LatticeExtra解決方案,因為沒有簡單的方法來使ggplot2成為第二個y軸。 我假設您的原始數據集名為dd 那我會做

require(lattice)
require(latticeExtra)
pd<-dd
pd$Male<-factor(pd$Male)
pd$idx <- ave(rep(1, nrow(pd)), pd$Male, FUN=seq_along)
mA<-xyplot(A~idx|Male, data=pd, type="l")
mB<-xyplot(B~idx|Male, data=pd, type="l")
doubleYScale(mA, mB)

那會產生

雙Y面板圖

這里所有范圍都相同,因此您可以更直接地比較樣本。

如果您確實要為每個圖單獨設置y軸,請嘗試

free.y <- list(y=list(relation="free"))
mA <- xyplot(A~idx|Male, data=pd, type="l", scales=free.y)
mB <- xyplot(B~idx|Male, data=pd, type="l", scales=free.y)
comb <- doubleYScale(mA, mB)
comb$x.between <- 5 #(add space otherwise panels touch)
comb

y雙自由y軸圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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