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 根据事件更新值

    我最近发布了这个问题 该问题已经与我在笔记本电脑上本地使用的 Mysql 数据库相关 由于我在 Mysql 中没有找到问题的解决方案 其他人似乎也没有找到解决方案 所以我想再次发布它 但现在与 R 相关 我使用带有 RMysql 包的数据库
  • R::bigmemory - 如何创建角色big.matrix?

    我尝试使用bigmemory封装在R我一开始就陷入困境 我愿意 temp lt matrix paste a 1 10 5 2 并得到一个字符矩阵 没关系 但后来我尝试 x lt as big matrix temp type char 我
  • .wav 文件长度/持续时间,无需读入文件

    有没有办法提取有关 wav 文件长度 持续时间的信息 而无需在 R 中读取文件 我有数千个这样的文件 如果我必须阅读每个文件才能找到其持续时间 那将需要很长时间 Windows 文件资源管理器为您提供了打开 长度 字段的选项 并且您可以查看
  • numpy.histogram 的 hist 维度,密度 = True

    假设我有这个数组 A array 0 0019879 0 00172861 0 00527226 0 00639585 0 00242005 0 00717373 0 00371651 0 00164218 0 00034572 0 008
  • kableExtra 中的 row_spec() 函数不会在 html 输出中创建水平线

    我想在 kableextra 表中的某一行下方添加一条水平线 row spec 函数的参数 hline after 应该在行下方添加水平线 row spec 文档 https www rdocumentation org packages
  • 如何在for循环中引用变量?

    我正在循环访问不同的 data tables 和 data table 中的变量 但我在引用内部变量时遇到问题for loop dt1 lt data table a1 c 1 2 3 a2 c 4 5 2 dt2 lt data tabl
  • 我无法下载 R 中的 reshape2 包 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我在尝试安装 R 包时收到此响应 gt installed packages reshape2 Package LibPath V
  • 使用 purrr 迭代替换数据帧列中的字符串

    我想用purrr使用以下命令在数据框列上迭代运行多个字符串替换gsub 功能 这是示例数据框 df lt data frame Year 2019 Text c rep a aa 5 rep a bb 3 rep a cc 2 gt df
  • 使用 pracma::findpeaks 识别持续峰值

    我的语法有问题peakpat内的选项findpeaks内的函数pramcaR 包 v 2 1 1 我使用的是 R 3 4 3 x64 Windows 我希望该函数能够识别可能有两个重复值的峰值 并且我相信该选项peakpat这就是我能做到的
  • 多功能测试仪替代 system.time

    我已经看到 我认为是这样 使用了类似于 system time 的函数 它可以同时评估多个函数的时间并输出一个输出 我不记得它是什么 并且用我正在使用的术语进行互联网搜索并没有得到我想要的响应 有人知道我正在谈论的功能的名称 位置吗 你想要
  • 选择 R 中的数据表中隐藏时(在绿色加号下方)列的显示顺序

    Context 使用 DataTables 库制作交互式表格时 当屏幕宽度对于列的数量和宽度来说太窄时 列将隐藏在绿色 号下 我有一个非常宽的表格 有 20 多列 其中一些内容非常冗长 因此某些列在所有屏幕宽度下总是隐藏的 每次隐藏新列时
  • 将数据框中的每个 x 个字符拆分为字符串

    我知道这里有一些关于每隔一段时间分割一个字符串的答案nth字符 例如this one https stackoverflow com questions 23208490 split each character in r and this
  • 如何使用 usmap 标记数字而不是名称?

    我知道 usmap 有一个选项label in plot usmap 我想标记一些数字 而不是状态名称 我想 usmap 中应该有与州质心坐标相关的数据 但我不知道如何找到它 如果我能得到 坐标然后我可以用它来标记数字geom text 这
  • 将绘图调用拆分为多个块

    我正在编写一个图的解释 其中我基本上将在第一个块中创建图 然后描述该输出 并在第二个块中添加一个轴 然而 似乎每个块都会强制一个新的绘图环境 因此当我们尝试使用以下命令运行块时会出现错误axis独自的 观察 output html docu
  • pyomo + 网状错误 6 句柄无效

    我正在尝试运行pyomo优化 我收到错误消息 Error 6 The handle is invalid 不知道如何解释它 环顾四周似乎与特权有关 但我不太明白 在下面找到完整的错误跟踪以及重现它的玩具示例 完整的错误跟踪 py run f
  • 以引用透明的方式从函数的省略号参数中提取符号

    事情又发生了 我正要按下发布答案按钮的问题被删除了 我正在寻找一种方法来从函数的省略号参数中提取绑定到符号的对象的值以及符号 也就是说 我试图以引用透明的方式从省略号中提取符号 我尝试过使用替代品和lazy dots 但没有成功 funct
  • R 中的列乘以子字符串

    假设我有一个数据框 其中包含多个组件及其在多个列中列出的属性 并且我想对这些列运行多个函数 我的方法是尝试将其基于每个列标题中的子字符串 但我无法弄清楚如何做到这一点 下面是数据框的示例 Basket F Type 1 F Qty 1 F
  • 朴素贝叶斯分类器仅基于先验概率做出决策

    我试图根据推文的情绪将推文分为三类 买入 持有 卖出 我正在使用 R 和包 e1071 我有两个数据框 一个训练集和一组需要预测情绪的新推文 训练集数据框 text sentiment this stock is a good buy Bu
  • 只读取选定的列

    谁能告诉我如何仅读取下面每年数据的前 6 个月 7 列 例如使用read table Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2009 41 27 25 31 31 39 2
  • ddply 和aggregate 之间的区别

    有人可以通过以下示例帮助我了解聚合和 ddply 之间的区别 数据框 mydat lt data frame first rpois 10 10 second rpois 10 10 third rpois 10 10 group c re

随机推荐

  • 如何判断我的应用程序是作为 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 轴来说明它 但经过两天的尝试和失败后 我在