在绘图中使用 geom_rect

2024-01-07

我有以下情节使用ggplot2 and plotly。但是,那plotly图像不显示我使用插入的阴影区域geom_rect。我猜这是因为plotly不支持geom_rect,有没有人有解决方法来解决这个问题?

这是我的代码

library(rmsfuns)
packages <- c('ggplot2','ggthemes','lubridate',
              'readxl','plotly', 'dplyr','tidyr', 'scales')
load_pkg(packages)

min <- as.Date('2015-01-01')
max <- as.Date('2020-07-01')

p1 <- ggplot(pmi_data, aes(Date,Value)) +
  geom_rect(xmin=as.Date("2019-10-01"), xmax=as.Date("2020-07-01"), 
            ymin=0, ymax=70, fill="grey90", alpha=0.3, col="grey90") +
  geom_rect(xmin=as.Date("2018-01-01"), xmax=as.Date("2018-07-01"), 
            ymin=0, ymax=Inf, fill="grey90", alpha=0.3, col="grey90") +
  geom_line(size = 1, col = 'maroon') + labs(title = 'Purchasing Manufacturing Index (PMI) - South Africa',
                     subtitle = 'Sharp Bounce in 2020 due to COVID-19',
                     y = 'Index Value', caption = 'Data downloaded from Quantec,
                     Jan 2000 - Jul 2020 \n *Shaded areas indicate South African Recession Periods') +
  theme_solarized() +
  geom_hline(yintercept = 50, col = 'red', linetype ='dashed', size = 1) +
  geom_text(x = as.Date('2019-01-01'),y = 60, label = 'Above 50 = Expansion') +
  geom_text(x = as.Date('2019-01-01'),y = 30, label = 'Below 50 = Contraction') +
  scale_x_date(date_breaks = "3 months" , date_labels = "%b-%y", limits = c(min,max)) +
  scale_y_continuous(breaks = seq(0,70,by = 10))
p1
p1 %>% ggplotly()  

我还添加了我的数据集的可重现性(pmi_data) below

structure(list(Date = structure(c(16436, 16467, 16495, 16526, 
16556, 16587, 16617, 16648, 16679, 16709, 16740, 16770, 16801, 
16832, 16861, 16892, 16922, 16953, 16983, 17014, 17045, 17075, 
17106, 17136, 17167, 17198, 17226, 17257, 17287, 17318, 17348, 
17379, 17410, 17440, 17471, 17501, 17532, 17563, 17591, 17622, 
17652, 17683, 17713, 17744, 17775, 17805, 17836, 17866, 17897, 
17928, 17956, 17987, 18017, 18048, 18078, 18109, 18140, 18170, 
18201, 18231, 18262, 18293, 18322, 18353, 18383, 18414, 18444
), class = "Date"), Value = c(49.9309368121368, 58.6768073656206, 
45.7670083296354, 45.3051559795366, 39.0053846618642, 49.1441770833505, 
50.8080942369684, 51.5672278113692, 52.3474018054878, 48.684288238331, 
49.6005819277318, 41.8997241809938, 44.9937159943178, 35.9990124093785, 
43.1451562769853, 47.7227396808874, 52.890214035815, 51.5724155968251, 
53.098762758905, 48.5434650930155, 47.7228974417011, 50.4783047526896, 
45.8610689862814, 48.3232274365117, 48.528592558046, 49.3045039410955, 
51.2073193096086, 52.1261934198188, 35.2212207293696, 50.9496606483085, 
45.0422524998791, 38.0745271272649, 44.3456515676749, 46.1378825605808, 
47.6866697375406, 46.5994718651023, 43.9039427143585, 48.8655610360731, 
53.1107368639677, 46.5425509175865, 45.5076319096526, 46.8134977347412, 
46.4585946586574, 47.7383913350769, 40.2498176455257, 41.4636882678189, 
41.4500124747691, 48.0959672662869, 54.2532917453206, 48.0072394990694, 
42.6301974827825, 42.1455882001407, 47.0431096529903, 43.3389961678568, 
45.1685845453902, 55.0965589447133, 47.8335430001165, 41.0120070520458, 
45.6383412614183, 39.3644388865386, 36.6, 44.6, 33.7, 30.7, 5.1, 
43.2, 64.6)), row.names = c(NA, -67L), class = "data.frame")


技巧是将矩形的坐标包装在aes()。另外你必须使用一个geom_rect。 (至少当我尝试使用两个 geom_rect 时,只出现了一个)。尝试这个:

library(plotly)

min <- as.Date("2015-01-01")
max <- as.Date("2020-07-01")

p1 <- ggplot() +
  geom_rect(aes(xmin = as.Date(c("2018-01-01", "2019-10-01")), xmax = as.Date(c("2018-07-01", "2020-07-01")),
                ymin = 0, ymax = 70), fill = "blue", alpha = 0.3, col = "grey90"
  ) +
  geom_line(data = pmi_data, aes(Date, Value), size = 1, col = "maroon") +
  labs(
    title = "Purchasing Manufacturing Index (PMI) - South Africa",
    subtitle = "Sharp Bounce in 2020 due to COVID-19",
    y = "Index Value", caption = "Data downloaded from Quantec,
                     Jan 2000 - Jul 2020 \n *Shaded areas indicate South African Recession Periods"
  ) +
  theme_solarized() +
  geom_hline(yintercept = 50, col = "red", linetype = "dashed", size = 1) +
  geom_text(x = as.Date("2019-01-01"), y = 60, label = "Above 50 = Expansion") +
  geom_text(x = as.Date("2019-01-01"), y = 30, label = "Below 50 = Contraction") +
  scale_x_date(date_breaks = "3 months", date_labels = "%b-%y", limits = c(min, max)) +
  scale_y_continuous(breaks = seq(0, 70, by = 10))

p1 %>% ggplotly()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在绘图中使用 geom_rect 的相关文章

  • 如何声明包含 M 个元素的列表对象

    我想声明一个包含 M 3 x 3 矩阵的列表 如果我事先知道数字 M 那么我可以通过以下方式声明这样的列表 elm lt matrix NA 3 3 Say M 7 myList lt list elm elm elm elm elm el
  • 在网格中制作一个矩形图例,并标记行和列

    我有一个 ggplot 我将因子映射到填充和 alpha 如下所示 set seed 47 the data lt data frame value rpois 6 lambda 20 cat1 rep c A B each 3 cat2
  • 在ggplot中设置y轴中断

    我在代码中设置中断时遇到困难 我尝试添加breaks seq 0 100 by 20 但似乎无法让它正常工作 本质上我希望 Y 轴从 0 到 100 每 20 个刻度一次 YearlyCI lt read table header T te
  • 为什么这个 R ggplot2 代码会显示一个空白的显示设备?

    虽然 SO 通常不用于帮助解决错误 但这个显示了特别简单且特别烦人的行为 如果你是一个ggplot2用户 您可以在 10 秒或更短的时间内重现它 正如这个 GitHub 问题 ggplot gtable 创建空白显示 https githu
  • 当设置 coord_fixed 时,ggplot/shiny 中的鼠标悬停坐标是错误的

    我正在使用问题中的答案 当您将鼠标悬停在闪亮的 ggplot 上时出现工具提示 https stackoverflow com questions 27965931 tooltip when you mouseover a ggplot o
  • case_when 与部分字符串匹配和 contains()

    我正在使用一个数据集 其中有许多名为 status1 status2 等的列 在这些列中 它表示某人是否豁免 完整 注册等 不幸的是 豁免投入并不一致 这是一个示例 library dplyr problem lt tibble perso
  • 使用点阵个性化 R 上显示的 X 轴值

    我收集了大量包含日期 客户端及其 NFS 使用情况的数据 我正在使用lattice R包进行绘图 正如对超级用户的建议 https superuser com questions 523195 plot custom log data on
  • 如何在Rstudio中快速给几个单词加上引号?

    如何将 MI ID FL 转换为 MI ID FL 而无需键入每个双引号 Hmisc 包有一个函数 Cs 它将评估逗号分隔的文本是否带有引号 Cs MI ID FL becomes MI ID FL
  • 如何动态地将 sliderInput 添加到闪亮的应用程序中?

    使用闪亮 我上传一个 csv 文件 并根据列名称 我需要向 ui 添加滑块 sidebarPanel fileInput file1 Upload CSV File to Create a Model accept c text csv t
  • R - 基于列名称的子集

    我的数据框有超过 120 列 变量 我想根据列名称创建子集 例如 我想创建一个子集 其中列名称包含字符串 心情 这可能吗 我一般用 SubData lt myData grep whatIWant colnames myData 我很清楚
  • 在 R 上安装 TDA 包时出错:目标“diag.o”的配方失败

    使用 Ubuntu 16 04 和 R 3 4 1 安装 R 包 TDA 时收到错误消息 它似乎与制作 CGAL diag cpp 和 或 diag o 最后的完整错误打印输出 有关 我仔细看了这个 在 R 上安装 TDA 包时出错 htt
  • HTTR GET 新错误:SSL 证书问题:证书已过期

    我已经运行这段代码几个月了 没有出现任何问题 今天我突然开始在我的两台 AWS 服务器上收到以下错误消息 错误 curl curl fetch memory url handle handle SSL证书问题 证书已过期 当尝试运行以下代码
  • 我如何查看 quantmod 包中所有可用的数据系列?

    如何显示可用的所有报价 数据系列的列表 例如使用雅虎的 getSymbols 我不知道有什么办法 TTR包有一个功能 stockSymbols 下载 NYSE AMEX 和 NASDAQ 的所有当前代码 它试图将它们采用雅虎可接受的格式 但
  • R 数据结构的运算效率

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

    假设我有以下每个抽屉库存增加的数据 gt socks year drawer nbr sock total 1990 1 2 1991 1 2 1990 2 3 1991 2 4 1990 3 2 1991 3 1 我想要一个二进制变量来标
  • 在闪亮的数据表中为每个单元格显示工具提示或弹出窗口?

    有没有什么方法可以为 r闪亮数据表中的每个单元格获取工具提示 有很多方法可以获取悬停行或列 但我找不到一种方法来获取行和列索引并为每个单元格显示不同的悬停工具提示 任何人都可以修改以下代码吗 library shiny library DT
  • R:改变堆积条形图的颜色

    library ggplot2 df2 lt data frame supp rep c VC OJ each 3 dose rep c D0 5 D1 D2 2 len c 6 8 15 33 4 2 10 29 5 head df2 g
  • R 中的数据框操作 - 将单元格向左移动并删除 NA

    我有一个数据框 其列由随机分布的值和 NA 组成 如下所示 a lt c S E NA S NA b lt c A NA M G K c lt c I NA NA NA L meh lt dataframe a b c 1 2 3 4 5
  • 将 Excel 文件读入 R 并锁定单元格

    我有一个 Excel 电子表格要读入 R 它受密码保护并锁定了单元格 我可以使用 excel link 导入受密码保护的文件 但我不知道如何解锁 取消保护单元格 excel link 给了我这个错误 gt
  • 更改绘图区域背景颜色

    我想使用我们公司的颜色在 R 中制作一个图表 这意味着所有图表的背景应为浅蓝色 但绘图区域应为白色 我正在寻找答案 发现绘制一个矩形就可以完成这项工作 几乎 然而 绘图区域现在是白色的 并且图形不再可见 这可能吗 getSymbols SP

随机推荐