使用 r 中的 ggplot2 编辑绘图工具提示中的标签

2023-11-22

我知道这个问题已经被问过很多次了,但我认为自从提出这些问题以来,plotly 的一些底层语法已经发生了变化。使用ggplotly()创建分区统计图会给出长、纬度、组的默认工具提示,以及我的美学变量之一。我知道工具提示仅映射美学内容。我想要做的就是自定义工具提示,以便它显示我的数据集中的一些变量(包括那些未映射到美学的变量)而不是其他变量(例如坐标)。下面是一个可重现的示例以及我到目前为止所尝试过的。我遵循了在回答其他问题时给出的建议,但无济于事。

#Load dependencies
library(rgeos)
library(stringr)
library(rgdal)
library(maptools)
library(ggplot2)
library(plotly)

#Function to read shapefile from website
dlshape=function(shploc, shpfile) {
  temp=tempfile()
  download.file(shploc, temp)
  unzip(temp)
  shp.data <- sapply(".", function(f) {
    fp <- file.path(temp, f)
    return(readOGR(".",shpfile))
  })
}

austria <- dlshape(shploc="http://biogeo.ucdavis.edu/data/gadm2.8/shp/AUT_adm_shp.zip", 
                   "AUT_adm1")[[1]]
#Create random data to add as variables
austria@data$example1<-sample(seq(from = 1, to = 100, by = 1), size = 11, replace = TRUE)
austria@data$example2<-sample(seq(from = 1, to = 100, by = 1), size = 11, replace = TRUE)
austria@data$example3<-sample(seq(from = 1, to = 100, by = 1), size = 11, replace = TRUE)

#Fortify shapefile to use w/ ggplot
austria.ft <- fortify(austria, region="ID_1")
data<-merge(austria.ft, austria, region="id", by.x = "id", by.y = "ID_1")

#Save as ggplot object    
gg<-ggplot(data, aes(x = long, y = lat, fill = example1, group = group)) + 
  geom_polygon() + geom_path(color="black",linetype=1) + 
  coord_equal() +
  scale_fill_gradient(low = "lightgrey", high = "darkred", name='Index') +xlab("")+ylab("") + 
  theme(axis.text = element_blank(), 
        axis.title = element_blank(), 
        axis.ticks = element_blank()) + 
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
        panel.background = element_blank(), axis.line = element_line(colour = "black")) + 
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
        panel.background = element_blank(), axis.line = element_line(colour = "black"))

#Plot using ggplotly
ggplotly(gg)

从这里我尝试了两种不同的方法。其中最成功的一种方法在一定程度上帮助我实现了这一目标。我可以向工具提示添加新变量,但我不能做两件事:1)我无法删除默认情况下已显示的其他变量(从美观角度),2)我无法将变量重命名为除列名之外的其他名称。数据集(例如,我想将“example3”标记为“Example III”)。这种方法如下:

#Save as a new ggplot object except this time add ``label = example3`` to the aesthetics
 gg2<-ggplot(data, aes(x = long, y = lat, fill = example1, group = group, label = example3)) + 
  geom_polygon() + geom_path(color="black",linetype=1) + 
  coord_equal() +
  scale_fill_gradient(low = "lightgrey", high = "darkred", name='Index') +xlab("")+ylab("") + 
  theme(axis.text = element_blank(), 
        axis.title = element_blank(), 
        axis.ticks = element_blank()) + 
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
        panel.background = element_blank(), axis.line = element_line(colour = "black")) + 
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
        panel.background = element_blank(), axis.line = element_line(colour = "black"))

#Save as plotly object then plot
gg2 <- plotly_build(gg2)
gg2

我也尝试添加以下内容,但没有任何作用:

gg2$data[[1]]$text <- paste("Example I:", data$example1, "<br>",
                           "Example II:", data$example2, "<br>",
                           "Example III:", data$example3)

任何帮助深表感谢!

更新:我更新了plotly从 github 而不是 CRAN 安装。使用这个更新版本(4.0.0)我已经把它分开了。

gg2$x$data[[2]]$text <- paste("Example I:", data$example1, "<br>",
                             "Example II:", data$example2, "<br>",
                             "Example III:", data$example3)
gg2

现在发生的事情让我很困惑。这会添加一个与前一个工具提示不同的附加工具提示。这个新的工具提示正是我想要的,但是它们都会出现 - 不是立即出现,而是在我移动鼠标时出现。请参阅下面的两个屏幕截图:

This is the old tooltip from before that still lingers This is the new one and the only one I want to keep

请注意,这些工具提示来自同一单位(蒂罗尔)。这可能是包中的错误吗?当显示其他图形(例如时间序列而不是地图)时,不会发生这种情况。另请注意,我分配了标签“示例 I”(或 II 或 III),这不会显示在我添加的新工具提示上。

更新#2:我发现旧的工具提示(显示长和纬度)仅在悬停在边框上时才会出现,所以我摆脱了geom_path(color="black",linetype=1)命令(如删除边框),现在我已经成功解决了这个问题。但是,我仍然无法修改工具提示中显示的标签。

更新#3:我想出了如何编辑标签,但只能编辑一个变量。这太疯狂了!这是我从开始到结束的工作流程:

 #Load dependencies
    library(rgeos)
    library(stringr)
    library(rgdal)
    library(maptools)
    library(ggplot2)
    library(plotly)

    #Function to read shapefile from website
    dlshape=function(shploc, shpfile) {
      temp=tempfile()
      download.file(shploc, temp)
      unzip(temp)
      shp.data <- sapply(".", function(f) {
        fp <- file.path(temp, f)
        return(readOGR(".",shpfile))
      })
    }

    austria <- dlshape(shploc="http://biogeo.ucdavis.edu/data/gadm2.8/shp/AUT_adm_shp.zip", 
                       "AUT_adm1")[[1]]
    #Create random data to add as variables
    austria@data$example1<-sample(seq(from = 1, to = 100, by = 1), size = 11, replace = TRUE)
    austria@data$example2<-sample(seq(from = 1, to = 100, by = 1), size = 11, replace = TRUE)
    austria@data$example3<-sample(seq(from = 1, to = 100, by = 1), size = 11, replace = TRUE)

    #Fortify shapefile to use w/ ggplot
    austria.ft <- fortify(austria, region="ID_1")
    data<-merge(austria.ft, austria, region="id", by.x = "id", by.y = "ID_1")

    #Save as ggplot object    
    gg<-ggplot(data, aes(x = long, y = lat, fill = example1, group = group, text = paste("Province:", NAME_1))) + 
      geom_polygon(color="black", size=0.2) + 
      coord_equal() +
      scale_fill_gradient(low = "lightgrey", high = "darkred", name='Index') +xlab("")+ylab("") + 
      theme(axis.text = element_blank(), 
            axis.title = element_blank(), 
            axis.ticks = element_blank()) + 
      theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
            panel.background = element_blank(), axis.line = element_line(colour = "black")) + 
      theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
            panel.background = element_blank(), axis.line = element_line(colour = "black"))


gg <- plotly_build(gg)
gg

这会产生以下情节:

enter image description here

请注意,“Province”现在已大写(以前不是)。诀窍是添加text = paste("Province:", NAME_1)到审美。然而,当我尝试使用添加额外的标签更改时text2=paste("Example III:", example1),会发生以下情况:

enter image description here

请注意,它无法像呈现 text1 一样呈现 text2。因此,我只是尝试添加一个不带 text2 的副本,如下所示:text=paste("Example III:", example1)- 产生以下奇怪的结果:

enter image description here

我开始认为像在绘图的 ggplot 转换中切换“图例”选项这样简单的事情是不可能的。 更新#4:所以我决定以另一种方式解决这个问题。相反,我决定自行更改变量名称。我会从一开始就这样做,除非我不确定 ggplot2 是否/如何接受带空格的变量 -我想通了`variable`那可以工作。所以我继续重新标记变量。它有效-有点。问题是文本出现时带有引号。现在我需要一种方法来摆脱这些!有人有什么想法吗?谢谢!这是我在文本中引用的意思的图像:

enter image description here


我也是情节新手,但在使用 ggplot2 气泡图时遇到了类似的问题ggplotly()。我终于找到了一个适合我的解决方案,并认为它也可能对您有帮助,尽管我还没有在等值区域地图上尝试过它。

您的第一个问题是自定义工具提示,以便它显示数据集中的一些变量(包括那些未映射到美学的变量)。
在你的 UPDATE#3 中你介绍了:text = paste("Province:", NAME_1)进入你的aes。如果您想添加第二行自定义变量或文本,只需将其添加到括号中即可:text = paste("Province:", NAME_1, "Example III:", example1)要在两者之间添加换行符,请添加<br>在你想要休息的地方,比如:text = paste("Province:", NAME_1, "<br>", "Example III:", example1)

您的第二个问题是自定义工具提示,以便它不显示其他(默认)变量(映射到美观,例如坐标)。
我发现这很容易添加到ggplotly()为我解决问题的函数:ggplotly(gg, tooltip = c("text"))就我而言,这删除了工具提示中显示的所有默认变量,并且仅显示那些自定义指定的变量text多于。您可以通过执行以下操作添加其他变量ggplotly(gg, tooltip = c("text","x"))工具提示中显示的变量顺序将与在tooltip争论。我在这里找到了这个记录:https://github.com/ropensci/plotly/blob/master/R/ggplotly.R

这个解决方案(原则上)对我来说有效,使用 R 3.1.1 和plotly 3.4.13

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

使用 r 中的 ggplot2 编辑绘图工具提示中的标签 的相关文章

  • 在函数中调用其他列的控制流程

    我正在尝试在给定条件的情况下连接到函数中的其他列 本质上 我想让数据框在给定条件的情况下从长到宽 其中一列中的这些值是NA相对于同一行中具有值的另一列 转动NAs转化为特定的数字 尽管分配的值必须是特定于列的 因此 如果2010 has N
  • rle 命令帮助

    我在使用 rle 命令时遇到了一些麻烦 该命令旨在找到参与者连续达到 8 个连续参与者的点 例如 如果 x lt c 0 1 0 1 1 1 1 1 1 1 1 1 我想返回值 11 感谢 DWin 我一直在使用这段代码 which rle
  • R - 对矩阵的每行/列应用具有不同参数值的函数

    我试图将函数应用于矩阵的每一行或每一列 但我需要为每一行传递不同的参数值 我以为我熟悉 lapply mapply 等 但可能还不够 举个简单的例子 gt a lt matrix 1 100 ncol 10 gt a 1 2 3 4 5 6
  • 在 R 中,如何让 PRNG 在平台之间给出相同的浮点数?

    在 R 4 1 1 中运行以下代码会在平台之间产生不同的结果 set seed 1 x lt rnorm 3 3 print x 22 0 83562861241004716 intel windows 0 8356286124100471
  • 将日期刻度添加到 R 中的 ggplot

    我试图在此图中的 x 轴上添加刻度以显示一年中的所有月份 我的代码如下 library ggplot2 library scales p lt ggplot df test aes time reading p geom point alp
  • 在 Microsoft Windows 上安装 RQuantLib

    我需要安装R包RQuantLib在 Microsoft Windows 计算机上 这个包没有二进制文件 所以我下载了 tar 源 我打开它 它包含 QuantLib C 库 所以我需要编译这个包 我不想安装 Visual Studio 我使
  • 错误:列索引必须最多为 1,如果... heatmap.2

    我在 heatmap 2 中收到错误 我在这里发现了类似的错误R knnImputation 给出错误 https stackoverflow com questions 45117125 r knnimputation giving er
  • 滚动最小值,固定起点[重复]

    这个问题在这里已经有答案了 好的 我想计算数据框中的滚动最小值 向下滚动列 到目前为止 我无法确定该系列的起点并滚动到结尾 我努力了 mins lt c 10 5 6 10 6 6 7 8 2 12 roll min expected lt
  • 将一个 Rmarkdown 文档中的代码块插入到另一个 Rmarkdown 文档中

    我一直在举办一些小型 R 教程 研讨会 我将 挑战脚本 保存在 Rmarkdown 文档中 它们包含自由文本和 R 代码块 一些代码块是预先填充的 例如 为了设置数据集以供以后使用 而一些代码块则供与会者在研讨会期间填写代码 对于每个挑战脚
  • 包含多行 LaTeX 方程的 R 帮助页面

    我正在编写 R 包文档roxygen2 我想将以下多行方程插入到帮助页面中 但我的 LaTeX 代码没有被渲染 hello2 description deqn F t begin cases alpha t f L t 1 alpha t
  • R strsplit之前(和之后)保留两个分隔符

    我有一个如下所示的字符串 x lt 01 01 121210 01 0001 我想将其分成一个向量 以便得到以下内容 1 0 1 01 1 2 1 2 1 0 01 0 0 0 1 可以是 或 括号之间的位数可以是 2 个或更多 我一直试图
  • 添加一条适合 R 中绘图峰值的曲线?

    如果给定两个向量及其图 是否有一个函数可以添加一条适合峰值的曲线 例如 我有 x c 0 20 X 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 y 1 19 4 17 9 8
  • 在 Rdata 中保存矩阵并更新 Rdata 文件

    我有一个矩阵 mat lt matrix data 1 30 ncol 10 nrow 3 我想将其保存到 Rdata save mat file m Rdata 然后加载回来 m lt load m Rdata 然后看看它的内容 m 1
  • 如何使用 roxygen 记录数据集?

    是否可以在 roxygen 进程中将 R 文件包含在我的包的数据目录中 我已将几个 R 文件放入数据目录中 当它们使用 data 获取数据时 它们会读取原始数据文件并执行一些转换 Roxygen 可以在 R 文件中的任何位置使用 换句话说
  • 如何定义 Flexdashboard 上社交网络图标的链接?

    我向 Flexdashboard 的导航栏添加了社交图标 但无法为每个图标添加适当的链接 在 R Markdown 文件中 我添加了 output flexdashboard flex dashboard social twitter fa
  • 如何直接编织到R对象?

    我想存储一个knit ted文档直接在R中作为R对象 作为字符向量 我知道我可以这样做knit 正在向tempfile 然后导入结果 如下所示 library knitr library readr ex file lt tempfile
  • Predict.randomForest 中的错误

    我希望有人能够帮助我解决 R 中 randomForest 包的预测函数遇到的问题 当我尝试预测测试数据时 我不断收到相同的错误 到目前为止 这是我的代码 extractFeatures lt function RCdata feature
  • 如何通过 R 的 cor() 的相关分析计算 P 值和标准误差

    I have data http dpaste com 1064360 plain 其中包含每个条件 x 和 y 的 54 个样本 我通过以下方式计算了相关性 gt dat lt read table http dpaste com 106
  • ggplot2条形图:按数据顺序填充

    给出这样的数据框 sam lt data table title c rep Cat 8 rep Dog 4 fcat c A B C B B C C B C B B C fnum c seq 8 1 seq 4 1 labeltext c
  • 当页面上没有嵌入特定文件时,如何使用R从网页下载文件

    当没有使用 R 中的 download file 上传的特定文件时 是否有任何可能的解决方案从任何网站提取文件 我有这个网址 https www fangraphs com leaders aspx pos all stats bat lg

随机推荐

  • Python 异步生成器不是异步的

    我的代码如下 我希望两个睡眠可以共享相同的时间范围 并需要 1 2 3 7 秒来运行脚本 但似乎发生了一些错误 所以仍然需要 3 1 2 秒 有什么想法如何修改代码吗 import asyncio async def g for i in
  • C / C++ 中 offsetof 宏的合法使用

    有这个宏offsetof在 C C 中 它允许您获取 POD 结构中成员的地址偏移量 举个例子C FAQ struct foo int a int b struct foo Set the b member of foo indirectl
  • 处理 WPF 应用程序中所有异常的最佳实践是什么?

    有没有办法处理WPF应用程序中的所有错误异常和崩溃 我知道关于DispatcherUnhandledException 但它只处理 UI 线程中的异常 不是吗 有没有办法捕获并记录其他线程中的所有异常以及绑定错误 AppDomain Cur
  • AWS Lambda:如何使用Pillow库?

    我正在尝试创建一个 AWS lambda 函数来创建我上传的图像的缩略图 我的脚本在本地运行良好 我遵循了这个tutorial部署我的函数 但我的 Pillow 库有问题 实际上 当我测试我的函数时 我可以看到以下日志 我找到了这个post
  • 如何通过键从gson对象获取值

    我一直在尝试遵循这个解决方案如何从 Java 中查找 JSON 字符串中指定的名称及其值 然而这似乎没有意义 我从字符串定义一个新的 gson 对象 这里的字符串示例 http api soundrop fm spaces XJTt3mXT
  • 已弃用的 getCellType 的替代方案

    我正在使用 org apache poi 3 15 读取 excel 文件 文件扩展名 xlsx 这是我的代码 try FileInputStream fileInputStream new FileInputStream file XSS
  • RichTextBox BeginUpdate() EndUpdate() 扩展方法不起作用

    我有一个 richTextBox 用于执行一些语法突出显示 这是一个小型编辑工具 因此我没有编写自定义语法荧光笔 相反 我正在使用Regex并在检测到输入延迟时使用事件处理程序进行更新Application Idle event Appli
  • C# 中的 RSASSA-PSS

    有谁知道使用哪种签名算法RSACryptoServiceProvider SignHash 我相信它是 RSAPKCS1 这仍然安全吗 有谁知道将 RSASSA PSS 配置为 RSACryptoServiceProvider 的签名算法
  • Oracle 11g如何估计所需的TEMP表空间?

    我们对一些表进行初始批量加载 源和目标都是 Oracle 11g 过程如下 1 截断 2 删除索引 PK 和唯一索引 3 批量插入 4 创建索引 同样是 PK 和唯一索引 现在我收到以下错误 alter table TARGET SCHEM
  • 不是有效 C++/CLI 的 ISO C++ 代码示例

    关于 C CLI 是否是 C 的超集 我在互联网上看到了相互矛盾的答案 接受的答案关于这个问题声称 技术上不行 但没有提供符合 ISO C 的非 C CLI 代码示例 关于这个问题的另一个答案引用了一本相反的书 那么 能否请您提供准确的答案
  • 使用可变参数模板中的参数定义多个方法

    我想以某种方式定义一个基模板类 以便它采用可变模板参数并为每个参数定义一个虚拟方法 其中参数是参数类型 E g Base
  • 如何在Python中逐行打印字典?

    这是字典 cars A speed 70 color 2 B speed 60 color 3 使用这个for loop for keys values in cars items print keys print values 它打印以下
  • C# 中的运算符优先级

    Is int int1 float var2 Count 100 相当于 int int1 float var2 Count 100 它会使用浮点还是整数除法 编辑 如果上述答案是肯定的 那么在这里执行浮点除法有什么好处 and 根据第 7
  • 在 Html 页面中使用 Javascript 调用 Wcf 服务

    我在 VSStudio2012 中有一个 WCF 项目 我想从 JavaScript 函数调用一个方法 JavaScript 文件 var url http localhost 52768 Service1 svc function tes
  • 如何在 XNA 中逐像素绘制 2D?

    我正在尝试使用 XNA 在屏幕上逐像素绘制 但遇到资源问题 我认为最好的方法是使用 1 个纹理来更新每一帧 但我在更新它时遇到了麻烦 这是我到目前为止所得到的 只是作为测试 Texture2D canvas Rectangle traced
  • 在 Python 中使用 dbus 发送消息

    我有 2 个 Python 程序 我只想从一个向另一个发送一条消息 一长串 并且我想使用 dbus 现在 有没有一种简单的方法可以做到这一点 例如 如果消息非常小 我已经部分解决了将消息放在路径中的问题 但后来我不得不使用外部程序 dbus
  • 使用compareTo实现equals方法

    一般问题 当实现默认值的覆盖时equalsJava 中的方法 对于简单地使用已经实现的方法我应该担心什么compareTo方法 vs 将独立逻辑写入 equals 方法 我注意到有人在另一个问题中提到foo equals String nu
  • git 存储库克隆日志记录

    我希望监视 git 存储库中的克隆活动 但是我找不到任何显示如何设置或如何检索此信息的内容 这可能吗 如果是这样 如何设置以及如何检索日志记录信息 您可以使用post checkout用于更新服务器上的数据库或文件的钩子 该钩子在客户端运行
  • 模拟 ngrx 在单元测试中存储带有参数的选择器(Angular)

    我正在尝试为 Angular 中的服务编写单元测试 我想模拟 ngrx 的 store select 函数 这样我就可以测试服务如何对存储选择器返回的不同值做出反应 我希望能够单独模拟每个选择器 我的主要问题是如何模拟参数化选择器 我之前使
  • 使用 r 中的 ggplot2 编辑绘图工具提示中的标签

    我知道这个问题已经被问过很多次了 但我认为自从提出这些问题以来 plotly 的一些底层语法已经发生了变化 使用ggplotly 创建分区统计图会给出长 纬度 组的默认工具提示 以及我的美学变量之一 我知道工具提示仅映射美学内容 我想要做的