ggplot2:在右侧为一个变量创建第二个 y 轴

2024-04-06

我有一个数据框,在同一时间范围内包含 3 个不同的变量。前两个变量具有相同的比例(股票指数值),可以用 y 轴来说明。第三个变量是利率,范围仅为 0 到 7%,因此我专注于在图的右侧创建一个额外的 y 轴来说明它。但经过两天的尝试和失败后,我在你们的社区中寻求建议。我首先尝试分离我的数据集并用于par(new=T)“覆盖”我的第一个情节,但这导致了比以前更多的困难。我已经发现人们在寻找类似问题的案例,但他们的问题非常特殊,无法用我的少量技能来复制。

library(reshape2)
library (scales)
library (ggplot2)

df <- data.frame(Variables, Dates)
df <- melt(df, id.vars="Dates") 

ggplot(df, aes(x=Dates, y=value, fill=variable, colour=variable))+geom_line(stat='identity', size=0.5)+ 
      scale_x_date(breaks = date_breaks("3 months"), labels = date_format("%b-%y"))+
      labs(x="Date", y="MSCI Value" )+
      theme_classic()+
      theme(axis.text.x=element_text(angle=90,hjust=1,vjust=0.5))+
      scale_color_manual(values=c("grey0", "orangered2", "royalblue2"))

这里有一些数据(前 30 个观察值)来复制我的图并说明我的意思。

Dates <- structure(c(8766, 8797, 8825, 8856, 8886, 8917, 8947, 8978, 9009, 
9039, 9070, 9100, 9131, 9162, 9190, 9221, 9251, 9282, 9312, 9343, 
9374, 9404, 9435, 9465, 9496, 9527, 9556, 9587, 9617, 9648), class = "Date")


Variables <- structure(c(1405.713, 1498.661, 1479.508, 1415.972, 1459.993, 
1464.001, 1460.193, 1488.212, 1533.288, 1493.268, 1536.017, 1469.67, 
1484.177, 1462.17, 1483.771, 1555.59, 1610.111, 1624.192, 1624.007, 
1705.582, 1667.891, 1716.796, 1690.085, 1749.089, 1800.553, 1833.446, 
1844.949, 1875.988, 1920.44, 1922.445, 3.05, 3.25, 3.34, 3.56, 
4.01, 4.25, 4.26, 4.47, 4.73, 4.76, 5.29, 5.45, 5.53, 5.92, 5.98, 
6.05, 6.01, 6, 5.85, 5.74, 5.8, 5.76, 5.8, 5.6, 5.56, 5.22, 5.31, 
5.22, 5.24, 5.27, 1226.99191666667, 1240.457375, 1253.96166666667, 
1267.07825, 1281.38133333333, 1293.99208333333, 1308.05641666667, 
1323.16016666667, 1338.992625, 1353.58925, 1371.2485, 1385.3055, 
1399.57704166667, 1412.76375, 1425.710875, 1438.80775, 1451.77004166667, 
1464.062625, 1476.80325, 1491.8025, 1502.652, 1516.61345833333, 
1527.86608333333, 1544.914875, 1561.36654166667, 1575.31591666667, 
1590.542625, 1609.70995833333, 1628.89525, 1647.99708333333), .Dim = c(30L, 
3L), .Dimnames = list(NULL, c("MSCI.WORLD", "Funds.Target.Rate", 
"Mean.Rolling")))

变量“Funds.Target.Rate”应该以更方便的方式呈现。是否可以在图的右侧创建第二个 y 轴来引用该变量的利率?感谢您的时间和帮助。


据我所知,这在 ggplot2 中是不可能的,有充分的理由。看这次讨论 https://stackoverflow.com/questions/3099219/plot-with-2-y-axes-one-y-axis-on-the-left-and-another-y-axis-on-the-right。唯一可能的就是添加第二个轴,它是第一个轴的重新计算,例如摄氏度 -> 华氏度或当地差异:

ggplot(mpg, aes(displ, hwy)) + 
  geom_point() + 
  scale_y_continuous(
    "mpg (US)", 
    sec.axis = sec_axis(~ . * 1.20, name = "mpg (UK)")
  )

话虽如此,您可以使用该技巧来达到您的目的。首先缩放利率,以便所有变量具有相同的维度(在您的情况下为 1000 - 2000) - 我将 Interest.Rate 乘以 400。然后添加第二个轴并确保注释显示未缩放(即除以)值( * 300 和 / 300 在你的情况下):

Variables[, 2] <- Variables[, 2] * 300
df <- data.frame(Variables, Dates)
df <- melt(df, id.vars="Dates") 

ggplot(df, aes(x=Dates, y=value, fill=variable, colour=variable))+geom_line(stat='identity', size=0.5)+ 
    scale_x_date(breaks = date_breaks("3 months"), labels = date_format("%b-%y"))+
    labs(x="Date", y="MSCI Value" )+
    theme_classic()+
    theme(axis.text.x=element_text(angle=90,hjust=1,vjust=0.5))+
    scale_color_manual(values=c("grey0", "orangered2", "royalblue2")) + 

    # NEW CODE:
    scale_y_continuous("MSCI Value", sec.axis = sec_axis(~ . /300, name = "Interest Rate")
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ggplot2:在右侧为一个变量创建第二个 y 轴 的相关文章

  • R 改变构面的顺序

    我正在尝试将方面的顺序从 BA SLG 更改为 SLG BA 我发现了与此类似的问题 但我认为我的解决方案可能不起作用 因为我已经在Excel中汇总了数据 因此 我的数据框可能会有所不同 无论如何 我尝试实现这个但无济于事 df2 lt f
  • R:单纯形错误:在下标赋值中不允许使用 NA

    对于以下具有目标函数和约束的最小化 boot simplex返回错误 Error in tab pr lt tab pr tab pr pc pv o tab pr NAs are not allowed in subscripted as
  • R - 基于列名称的子集

    我的数据框有超过 120 列 变量 我想根据列名称创建子集 例如 我想创建一个子集 其中列名称包含字符串 心情 这可能吗 我一般用 SubData lt myData grep whatIWant colnames myData 我很清楚
  • R 数据结构的运算效率

    我想知道是否有任何关于操作效率的文档R 特别是那些与数据操作相关的 例如 我认为向数据框添加列是有效的 因为我猜您只是向链接列表添加一个元素 我想添加行会更慢 因为向量保存在数组中C level你必须分配一个新的长度数组n 1并将所有元素复
  • 在 RGL 中将立方体绘制到 3D 散点图中

    我正在尝试向 3D 散点图添加较小的立方体 网格 具有指定边长 我希望立方体位于原点 我该怎么做呢 我已经玩过cube3d 但我似乎无法将立方体正确定位 也无法使其成为网格 因此我可以看到它包含的数据点 这是我所拥有的 library rg
  • 将 Excel 文件读入 R 并锁定单元格

    我有一个 Excel 电子表格要读入 R 它受密码保护并锁定了单元格 我可以使用 excel link 导入受密码保护的文件 但我不知道如何解锁 取消保护单元格 excel link 给了我这个错误 gt
  • 如何使用plotmath更新ggplot图例标签

    我正在尝试更新ggplot要使用的图例标签plotmath但是 当我这样做时 它将之前组合的图例分成两部分 通过一个例子可能更容易理解 test data and the default plot gives the correct col
  • 斯皮尔曼相关性和联系

    我正在一小组配对排名上计算斯皮尔曼的 rho 斯皮尔曼因处理领带不当而闻名 例如 取2组8个排名 即使两组中有6个是平局 相关性仍然很高 gt cor test c 1 2 3 4 5 6 7 8 c 0 0 0 0 0 0 7 8 met
  • devtools::test() 有效,但 devtools::check() 无效。为什么?

    我正在测试this https github com beanumber etlR 包 以下三件事就可以正常工作 devtools test devtools test file tests testthat R Travis CI 与 R
  • 识别包含字符串的行的最快方法[重复]

    这个问题在这里已经有答案了 我有一个字符串数据框 尺寸为 30 列 x 500 万行 我想识别包含任何预定义字符串列表的行 有没有比下面我的 apply any 方法更快的方法 这是一个可重现的示例 请注意 此示例中的字符串是随机数 但在我
  • rpart 决策树中的 rel 误差和 x 误差有什么区别? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个来自 UCI 机器学习数据库的纯分类数据框https archive ics uci edu ml datasets Diabet
  • 使用非标准评估公式

    我正在创建一个使用的包非标准评价 http adv r had co nz Computing on the language html跟踪列的含义 该包在函数之间传递数据框 这些函数执行同一组列的各种操作 非标准评估对此非常有用 my s
  • tidyverse - 将命名向量转换为 data.frame/tibble 的首选方法

    使用tidyverse我经常面临将命名向量转换为向量的挑战data frame tibble列是向量的名称 执行此操作的首选 tidyverse 方式是什么 编辑 这与 this https github com hadley dplyr
  • 在 R 中显示变量的精确值

    gt x lt 1 00042589212565 gt x 1 1 000426 如果我想打印的确切值x 我该怎么办呢 抱歉 如果这是一个愚蠢的问题 我尝试在谷歌上搜索 R 和 精确 或 圆形 但我得到的只是有关如何舍入的文章 先感谢您 所
  • 如何使用合并或替换来更新 R 中具有多列的表

    我想做一些与这个问题非常相似的事情 如何使用 merge 更新 R 中的表 https stackoverflow com questions 3190118 how to use merge to update a table in r
  • ggplot geom_bar - 条形太宽

    对于这个非信息性的标题 我感到很抱歉 gt y read csv textConnection scan sep n what raw org art type length 191 gk Finish short 4 147 ik Att
  • 聚合函数在数据框中创建不需要的向量

    我在函数中创建数据帧时遇到了一个奇怪的问题 但是 在 data frame 之外使用相同的方法效果很好 这是基本函数 我用它来计算数据集的平均值 标准差和标准误差 aggregateX lt function formula dataset
  • autoplot.microbenchmark 实际绘制了什么?

    根据文档 microbenchmark autoplot 使用 ggplot2 生成更清晰的微基准计时图 凉爽的 让我们尝试一下示例代码 library ggplot2 tm lt microbenchmark rchisq 100 0 r
  • 如何绘制 Voronoi 曲面细分的多边形而不是线段?

    我找到了一种使用 ggplot2 绘制 Voronoi 曲面细分的分段的方法 library deldir library ggplot2 library ggthemes set seed 123 df lt data frame lat
  • 根据列中的部分字符串匹配选择数据框行

    我想根据列中字符串的部分匹配从数据框中选择行 例如列 x 包含字符串 hsa 使用sqldf if它有一个like语法 我会做类似的事情 select from lt gt where x like hsa 很遗憾 sqldf不支持该语法

随机推荐

  • 如何判断我的应用程序是作为 32 位应用程序还是 64 位应用程序运行?

    如何判断我的应用程序 在 Visual Studio 2008 中编译为Any CPU 是作为 32 位还是 64 位应用程序运行 如果您正在使用 NET http en wikipedia org wiki NET Framework4
  • 如何禁止chrome打开“新窗口”和“标签”?

    他们是否可以通过 Chrome 浏览器设置将互联网上的所有页面保留在一个窗口中 或者我可以用一个插件 插件来做到这一点 当我单击某些链接时 我不希望在新选项卡和 或新窗口中打开网页 如果有人有任何建议请告诉我 谢谢 a href http
  • 在 Jenkins 中运行 Selenium 测试

    我通过 Selenium IDE 记录了一些简单的 Selenium 测试 现在我想在 Jenkins 中运行这些测试 我需要 Jenkins 的哪个插件才能做到这一点 以及如何逐步运行测试 感谢帮助 您可以使用录制的 selenium I
  • std::function 与 lambda 的比较

    如何比较 std function 和 lambda include
  • 改造和持久 cookie 存储

    在改造中实现持久 cookie 存储的最简单方法是什么 现在我正在使用这个 cookieManager new CookieManager cookieManager setCookiePolicy CookiePolicy ACCEPT
  • 字段列表中的 EF4 未知列

    所以 我有点难住了 我一直在使用通用存储库 它工作得很好 它位于实体框架 4 1 之上 我曾多次使用同一行代码来获取一组数据 之前没有任何问题 然而 我的数据库中的这张表似乎抛出了异常 我一生都无法弄清楚如何修复它 这是MySQL数据库中的
  • 为什么我可以在可为空的列上创建带有主键的表?

    以下代码创建一个表 不会引发任何错误 CREATE TABLE test ID INTEGER NULL CONSTRAINT PK test PRIMARY KEY ID 请注意 我无法按预期插入 NULL INSERT INTO tes
  • if constexpr 而不是标签调度

    我想用if constexpr而不是标签调度 但我不知道如何使用它 下面的示例代码 template
  • 使用 argdo 打开多个文件时,vim 中未打开语法突出显示

    我经常从 MacVim 中一次打开整组文件 为此 我通常使用以下命令 args PATTERN argdo tabedit 这会将工作目录中与模式匹配的所有文件加载到参数列表中 然后在单独的选项卡中将它们全部打开 当我执行此操作时 语法突出
  • Django 日志:记录到文件的任何教程

    我正在开发一个 django 项目 但还没有开始 从事该项目的开发人员离开了 在知识转移过程中 有人告诉我所有事件都记录到数据库中 我发现数据库接口对于搜索日志没有用处 有时它们甚至不记录 我可能是错的 我想知道是否有一个简单的教程来解释如
  • 无法循环文件名中带有空格的文件、Windows 批处理文件和图像 magick

    我正在尝试循环一堆文件夹 创建子文件夹 然后循环文件 使用 imagemagick 转换它们并将它们放入新的子文件夹中并重命名 某些文件名称中包含空格并导致错误 我该如何解决此问题 错误信息 convert unable to open i
  • Magento - 如何创建“十进制”属性类型

    我在网上做了一些搜索 但还没有找到这个问题的任何答案 我遇到的情况是 我需要一个十进制值的产品属性 它必须支持负数和正数 并且还必须可排序 由于某种原因 Magento 没有 十进制 属性类型 唯一使用小数值的类型是 Price 但不支持负
  • C++中可以使用字典吗

    我一直在查找 C 中的字典 它们似乎非常有用 并且想知道是否可以在 C 中使用它们 因为我尝试在 C 中搜索字典 但似乎没有与我相同的字典可以找到 是否有某种类型的库可以下载并包含到项目中 或者是否有一个函数可以用不同的名称执行相同的操作
  • Ruby on Rails:跳过种子的“validate_on_create”语句

    我的一个控制器中有一个 validate on create 语句 我希望跳过所有种子数据 有哪些解决方案可以使我的种子文件中的 create 语句跳过此验证 我当前的解决方案是每次运行 rake db seed 时注释掉验证 还有更聪明一
  • Haskell 中的 xor 和 or 有什么区别

    So if xor回报True当且仅当其操作数之一恰好是True这样 xor Bool gt Bool gt Bool xor True True False xor True False True xor False True True
  • 模板函数中的输出向量

    这一段代码报错 template
  • 来自 Unity 配置文件的 RegisterType

    我正在从 Prism 4 迁移到 Prism 7 1 我似乎找不到已从最新 Prism 版本中删除的ConfigureContainer 方法 过去 我曾使用这种方法从文件系统加载Unity配置 对于最新版本的 Prism 库 这似乎是不可
  • isdigit 无法正常工作

    我试图通过迭代整个字符串并输出整数来测试字符串是否包含整数 我的方法涉及将字符串转换为 c string atoic 字符串 然后使用测试它是否是整数isdigit功能 由于某种未知的原因 isdigit尽管函数遇到整数 但它返回 fals
  • 如何选择要在 Ruby 中动态包含的模块版本?

    我正在编写一个小型 Rub y 命令行应用程序 它使用fileutils来自文件操作的标准库 根据用户调用应用程序的方式 我想包括FileUtils FileUtils DryRun or FileUtils Verbose Since i
  • ggplot2:在右侧为一个变量创建第二个 y 轴

    我有一个数据框 在同一时间范围内包含 3 个不同的变量 前两个变量具有相同的比例 股票指数值 可以用 y 轴来说明 第三个变量是利率 范围仅为 0 到 7 因此我专注于在图的右侧创建一个额外的 y 轴来说明它 但经过两天的尝试和失败后 我在