【问题标题】:Plot 2 xts object with 2 y-axis different scales绘制具有 2 个 y 轴不同比例的 2 个 xts 对象
【发布时间】:2020-04-17 15:16:53
【问题描述】:

我在同一个图表中绘制 2 个不同的变量时遇到问题。我想绘制 COT 余额和 USD/BRL 的价格变量(数据是 xts 对象)。

tail(COT_USD_BRL)
           Long.Positions Short.Positions Change.Long Change.Short X..Long X..Short
2019-11-12           1662           11742        -564         -956     3.1     21.9
2019-11-19           2619           10955         957         -788     4.6     19.2
2019-11-26           3935            9697        1316        -1258     5.7     14.0
2019-12-03           7351           11066        3416         1369    11.9     17.9
2019-12-10           8339            7046         988        -4020    14.3     12.1
2019-12-17           4681           10964       -3658         3918     8.6     20.2
           COT.Balance  Price
2019-11-12       -18.8 4.1677
2019-11-19       -14.6 4.1945
2019-11-26        -8.3 4.2332
2019-12-03        -6.0 4.2066
2019-12-10         2.2 4.1470
2019-12-17       -11.6 4.0719

尺度不同。价格变量不适合第二个比例,我不知道为什么。有人可以帮助我吗? 我使用的代码是:

  ggplot(data = COT_USD_BRL, aes(x = index(COT_USD_BRL), y = COT_USD_BRL$COT.Balance)) +
  geom_line(inherit.aes = TRUE) +
  scale_y_continuous(name = "USD_BRL", sec.axis = sec_axis(~. /(100)+3.2)) +
  geom_line(aes(x = index(COT_USD_BRL), y = COT_USD_BRL$Price), color = "red") +
  scale_x_date(date_breaks = "6 months", date_labels = "%b-%Y") + theme_linedraw()

剧情如下:

COT Balance x Price

如果我错过了一些有用的信息,请告诉我。

【问题讨论】:

    标签: r ggplot2 xts


    【解决方案1】:

    这是因为sec.axis 只创建了一个轴标签,而不是用作绘制数据的参考轴。因此,您的第二组数据是基于左 y 轴绘制的。您需要对第二个 y 值 Price 应用比例因子,以匹配左侧 y 轴和 USD_BRL 的值。

    如果没有可重现的数据集示例(请参阅此处:How to make a great R reproducible example),很难确定正确的比例因子,但也许您应该从这个开始:

    library(ggplot2)
    ggplot(data = COT_USD_BRL, aes(x = index(COT_USD_BRL), y = COT_USD_BRL$COT.Balance)) +
      geom_line(inherit.aes = TRUE) +
      scale_y_continuous(name = "USD_BRL", sec.axis = sec_axis(~. /10, name = "Price") +
      geom_line(aes(x = index(COT_USD_BRL), y = COT_USD_BRL$Price*10), color = "red") +
      scale_x_date(date_breaks = "6 months", date_labels = "%b-%Y") + theme_linedraw()
    

    希望它可以帮助您找出解决问题的方法。

    【讨论】:

    • 谢谢,伙计。你解决了我的问题。现在我明白了如何重新调整情节,这对我有很大帮助。
    • 很高兴能帮到你;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多