获取ggplot2图例以在r中显示百分号

2024-01-10

下面是我试图解决的问题的可重现示例。我在 ggplot2 中创建了一个热图,一切进展顺利。由于我已经在数据上放置了百分号以与 geom_text 一起使用,所以我想让 geom_tile 的图例也显示百分号(我现在只能将实际值乘以 100)。理想情况下,我希望右侧的图例栏显示 8%、4%、0%、-4%、-8%。

#load in libraries
require(plyr)
require(dplyr)
require(reshape2)
require(ggplot2)
require(scales)

testDF <- structure(list(strategies = structure(c(8L, 7L, 6L, 5L, 4L, 3L, 
                                                  2L, 1L), .Label = c("Class 1", "Class 2", 
                                                                      "Class 3", "Class 4", "Class 5", "Class 6", 
                                                                      "Class 7", "Class 8"), class = "factor"), 
                         School1 = c(0.0355662887589396, 0.0316753241146625, 0.00606392341292672, 
                                     0.0250738342627283, -0.0405709181701368, 0.0237665074609996, 
                                     0.00587364885411765, -0.0343914002059331), School2 = c(NA, NA, 
                                                                                            NA, 0.0225535750673764, NA, -0.00448947685878404, NA, -0.0446386763157662
                                     ), School3 = c(NA, NA, NA, 0.0261099462365593, NA, 0.0199735626692146, 
                                                    NA, -0.0272279264519992), School4 = c(NA, NA, NA, 0.0164004151291513, 
                                                                                          NA, 0.00567638888888868, NA, -0.0384017249374949)), .Names = c("schools", 
                                                                                                                                                         "School1", "School2", "School3", "School4"), row.names = c(NA, -8L), class = "data.frame")


GraphMelt <- melt(testDF)
GraphMelt <- GraphMelt %>% mutate(text = sprintf("%1.2f%%", 100*value))
GraphMelt[,"text"] <- ifelse(GraphMelt[,"text"]=="NA%",NA,GraphMelt[,"text"])                                    
p <- ggplot(GraphMelt, aes(variable, schools))
p <- p + geom_tile(aes(fill = value*100), colour =   "white") + geom_text(aes(label=text),size=7)
p <- p + scale_fill_gradient(low = "red", high = "green",limits=c(-8,8))
p <- p + theme(
  axis.text.x= element_text(color="black", size=14, vjust=0.5),
  axis.text.y= element_text(color="black", size=14, vjust=0.5),
  axis.title.y = element_text(color="black",size=14, vjust=0.5),
  plot.title = element_text(color="black",size=14,face="bold", hjust=0.5,vjust=1),
  panel.background = element_blank(),
  legend.position="right",
  legend.title = element_blank(),
  legend.key = element_rect(fill="white"), legend.background = element_rect(fill=NA)
)
p <- p + xlab("") + ylab("") + ggtitle("Schools")

加载scales包(你已经有了它,但我想明确说明这种依赖关系)

library(scales)

and add labels = label_percent()根据您的填充比例(或使用scales::label_percent()如果你不想使用library(scales)无论出于何种原因)。

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

获取ggplot2图例以在r中显示百分号 的相关文章

随机推荐

  • Java:给定日期的迭代

    我在 Java 中有两个日期 Wed Jan 05 00 00 00 CET 2011 Sat Jan 15 23 59 59 CET 2011 现在我想迭代它们 这样我每天都可以做一个System out println 我在控制台上输入
  • 没有负值的 JSpinner

    我正在 Netbeans 中构建一个小型应用程序 我使用 JSpinner 组件来设置产品的数量 如何将微调器设置为仅取正值 Netbeans 内是否有我可以设置的选择或方法JSpinner EXTRA spinner setModel n
  • 如何在不再次拉取子存储库的情况下进行本地克隆?

    我经常使用 Mercurial 在本地存储我的上游克隆 然后在本地再次克隆以适应我的实际工作环境 cd clones hg clone ssh external repo example com some repo path foo cd
  • 无法在初始渲染中找到参考

    我刚刚在官方文档中读到 第一次渲染时没有调用 componentDidUpdate 我想这可能就是为什么我的这个组件第一次渲染时 dom 没有被定义 这是一个弹出模式 当需要编辑页面时会弹出 我还有其他方法可以解决这个问题吗 compone
  • 将文件移动到新目录的批处理命令

    我想编写一个批处理作业 执行时将抓取所有文件C Test Log文件夹并将它们移至新目录C Test 这个新目录的名称为 Backup 名称为 当前日期 因此 完成后 日志文件夹应该为空 所有文件现在都位于新文件夹中 我知道我必须使用MOV
  • Java:如何获取当前音频输入的频率?

    我想分析麦克风输入的当前频率 以使 LED 与播放的音乐同步 我知道如何从麦克风捕获声音 但我不知道 FFT 这是我在寻找获取频率的解决方案时经常看到的 我想测试一下某个频率的当前音量是否大于设定值 代码应该看起来像这样 if freque
  • 自动扩展 YAML 合并的工具?

    我正在寻找一种工具或流程 可以轻松获取包含锚点 别名和合并键的 YAML 文件 并扩展别名并合并到平面 YAML 文件中 仍有许多常用的 YAML 解析不完全支持合并 我希望能够利用合并来保持干燥 但在某些情况下 需要将其构建到更详细的 平
  • 破损的日食可以修复吗?

    几天后 我不能再使用 Ctrl S 等键盘快捷键 因为它会在我的源代码中插入特殊字符 在属性文件中 我注意到 Ctrl S 插入了 u2308 有没有办法修复此问题 而无需重新安装 STS 2 8 1 您可以尝试使用以下命令从命令行启动 E
  • 如何使用授权和客户端 ID 在 C# 中调用 Azure Maps API?

    我正在尝试使用Azure 地图 API使用坐标搜索某个点周围的 POI 但我不知道如何通过添加以下内容来调用 API授权 and 客户端 ID 这是我在 Microsoft 文档网站上尝试该 API 时收到的请求预览 GET https a
  • 续集“findbyid”不是一个函数,但显然“findAll”是

    我遇到了一个非常奇怪的问题 当我尝试调用函数 findAll 时 它工作正常 创建和销毁相同 但是当我尝试调用函数 findById 时 它会抛出 findById 不是函数 与 FindOne 相同 works fine var gamm
  • model.save_weights 是否包含优化器状态?

    如果是 那么他们是如何做到的 我的意思是 假设我有一个通过子类化定制的模型 我的优化器是一个单独的对象 一个命令如何保存两个不同物体的权重 特别是 它如何知道这两个对象是相关的 是由于 model compile 完成的魔法吗 编辑 我刚刚
  • Laravel 图像提交按钮

    我想知道是否有一种方法可以自定义提交按钮的外观 改为图像 拉拉维尔 3 http three laravel com docs 目前 我的提交按钮代码如下所示 Form open project delete DELETE Form hid
  • 在逻辑或可视树中查找工具提示弹出窗口

    说我有一个ToolTip使用 XAML 中指定的样式 如下所示
  • 使用 as.numeric(levels(f))[f] 将数据框中的因子子集转换为数字

    我有一个包含 100 个变量的数据框 我想要将其中的一个子集 例如 dataframename 30 50 转换为它们的原始数值 1 2 3 4 5 我知道我应该使用as numeric levels f f 当我转换一个因子时 但只有当我
  • 如何将一个目录中的所有文件重定向到另一个目录?

    我已将服务器上的文件移至新目录 并希望将所有请求 301 重定向到新目录中的文件 假设我有 域名 com test apples php 域名 com test oranges php 域名 com test bananas php 我如何
  • JavaScript setTimeout 如此不准确的原因是什么?

    我在这里得到了这段代码 var date new Date setTimeout function e var currentDate new Date if currentDate date gt 1000 console log cur
  • C 文件编程 - 使用 POSIX 调用替换文件中的文本

    有没有办法使用 POSIX 调用替换文本文件中的任何关键字 而无需重新创建文件 如果是的话请告诉我该怎么做 提前致谢 如果文本和替换的大小相同 则可以使用模式打开它r 查找 然后写入 如果它们的大小不同 则无法在不重新创建的情况下进行替换
  • 是否可以等待 Device.BeginInvokeOnMainThread 代码完成(继续使用 UI 调用的结果进行后台工作)

    在我的代码中 我有一个名为 ShowMessageBoxAsync 的任务 我想使用此代码向用户显示 并等待 DisplayAlert 并返回结果 像这样 var messageBoxResult wait View ShowMessage
  • System.IO.StreamReader 与 Get-Content 与 System.IO.File

    我一直在比较在Powershell中快速读取相对较大的文本文档的各种方法 这些文件的大小范围为 50kb 200mb 我需要快速解析它们以获取特定的行和 或特定的字符串 读取文件的三个常用工具 我知道 并且没有构建我自己的 C 库 是 Sy
  • 获取ggplot2图例以在r中显示百分号

    下面是我试图解决的问题的可重现示例 我在 ggplot2 中创建了一个热图 一切进展顺利 由于我已经在数据上放置了百分号以与 geom text 一起使用 所以我想让 geom tile 的图例也显示百分号 我现在只能将实际值乘以 100