在R中绘制双轴图

在R中绘制双轴图,r,plot,ggplot2,R,Plot,Ggplot2,我正在从事一个项目,其最终结果是总产量,让我们用W来表示。W的性质是随着t和h的变化而变化。经过大量调整,我成功地获得了以下df sens <- structure(list(W = c(5216400.4123, 5399804.7349, 5595563.3087, 5792353.9932, 5993467.7466, 6189404.9279, 6380940.454, 6566630.3544, 6747453.6816, 6917820.9796, 7086201.8275

我正在从事一个项目,其最终结果是总产量,让我们用
W
来表示。
W
的性质是随着
t
h
的变化而变化。经过大量调整,我成功地获得了以下
df

sens <- structure(list(W = c(5216400.4123, 5399804.7349, 5595563.3087, 
5792353.9932, 5993467.7466, 6189404.9279, 6380940.454, 6566630.3544, 
6747453.6816, 6917820.9796, 7086201.8275, 7248213.5225, 5402700.4252, 
5592654.9057, 5795404.8549, 5999223.7818, 6207520.1695, 6410455.1037, 
6608831.1825, 6801152.8706, 6988434.1695, 7164886.0132, 7339280.46, 
7507078.2886, 5589000.4397, 5785505.0748, 5995246.3993, 6206093.5662, 
6421572.589, 6631505.2817), t = structure(c(1L, 2L, 3L, 4L, 5L, 
6L, 7L, 8L, 9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L), .Label = c("t_m75_tc", 
"t_m5_tc", "t_m25_tc", "t_p0_tc", "t_p25_tc", "t_p5_tc", "t_p75_tc", 
"t_p10_tc", "t_p125_tc", "t_p15_tc", "t_p175_tc", "t_p20_tc"), class = "factor"), 
    p = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 
    3L, 3L, 3L, 3L), .Label = c("h_30", "h_27.5", "h_25", "h_22.5", 
    "h_20", "h_17.5", "h_15", "h_12.5", "h_10", "h_7.5", "h_5", 
    "h_2.5", "h_1", "h0", "h1", "h2.5", "h5", "h7.5", "h10", 
    "h12.5", "h15", "h17.5", "h20", "h22.5", "h25", "h27.5", 
    "h30"), class = "factor"), tt = c(-7.5, -5, -2.5, 0, 2.5, 
    5, 7.5, 10, 12.5, 15, 17.5, 20, -7.5, -5, -2.5, 0, 2.5, 5, 
    7.5, 10, 12.5, 15, 17.5, 20, -7.5, -5, -2.5, 0, 2.5, 5), 
    hh = c(-30, -30, -30, -30, -30, -30, -30, -30, -30, -30, 
    -30, -30, -27.5, -27.5, -27.5, -27.5, -27.5, -27.5, -27.5, 
    -27.5, -27.5, -27.5, -27.5, -27.5, -25, -25, -25, -25, -25, 
    -25)), .Names = c("W", "t", "p", "tt", "hh"), row.names = c(NA, 
30L), class = "data.frame")

我需要用两个Y轴在同一张图表中绘制W与tt和hh的对比图。我尝试使用ggplot2绘图,但后来我了解到,ggplot不支持2个y轴。是否有其他方法来绘制数据?我喜欢这样的东西:

以下是我对您的数据的尝试。注意三元轴的缩放

library(ggtern)
ggtern(sens, aes(x = W/max(W),z=tt/max(tt), y=hh/max(hh))) +
 geom_point(size=3, col='red') +
 theme_bw()

只是为了添加一个强大的表示(如评论中所建议的)

我还建议使用曲面图

require(rgl)  
surface3d(x, y, z)

您可以使用
facet\u wrap
使用
scales=“free\u y”
将它们绘制在单独的facet中,我选择了其他的东西。。刻面对我不好。我试过了,但这并不是我想要的@alistaire,如果还有其他东西的话??看看yeah@camille,但我认为,次轴只能是第一轴的倍数或函数导数。使用两个y轴进行绘图,而不仅仅是转换,在大多数情况下会产生误导,这就是为什么在ggplot中不可能实现的原因。通常的替代方案是刻面和原木刻度。在这种情况下,另一种选择是将一个y变量映射到另一种类似美学的颜色,尽管很明显,通过这种方式很难看到比例差异。线宽/点大小是另一种可能性。折线图不合适,我有大量数据。对于三元图。问题1,为什么使用W/max(W)而不仅仅是W?tt和hhI的比例数据也是一样的,因此您可以将所有3个轴都放在0到1(或0到100%)的假设比例中。还有其他缩放数据或播放轴的方法。关于这一点,请参阅
ggtern
上的文档。如果你有足够的数据,我建议你做一个曲面图。这可能取决于3D模式(你发布的数据看起来很有序),我不太确定你所说的曲面图是什么意思。。这是一个二维图像线图,你张贴?你说我的数据是有序数据是什么意思?这是一件坏事吗?你能给我提供一些关于曲面图的好文档的链接吗?@anup按中的顺序排列,效果很明显(直线相互平行)。没有好坏之分,这只是数据的性质。你可以研究曲面图,我只是举一个普通的例子。这个问题变得有点过于宽泛,可能会被投票否决。最初的问题是如何在R中绘制三元图,我相信这已经得到了回答。
ggplot(sens, aes(W, tt, group=hh, color=hh)) +
 geom_point() +
 geom_line(lwd=1) +
 theme_bw() +
 scale_color_continuous(low = "black", high="red")
require(rgl)  
surface3d(x, y, z)