如何从图例中删除已使用的值?

2024-02-29

In Brief

我知道scale_*_*(drop = TRUE)可用于从图例中删除空因子水平。也许违反直觉,我试图放弃used情节的水平。

正如您可能已经猜到的,这是一个稍微有点 hack 的用例:我使用隐形条geom_bar抵消“浮动”的李克特反应可视化。我是not对框架挑战或解决此问题的替代方法感兴趣,我特别询问如何从图例中删除使用过的级别。

用例和示例

下面的代码重现了我的可视化的一个非常简单的版本。它工作得很好,但图例从中心稍微偏移(这在“真实”可视化中更明显)。我想放弃“看不见”的层面来呈现这一点。我知道我可以使用数字参数legend.position重新集中整个事情的中心,但这是繁琐且不可概括的。

## libraries ---
require(ggplot2)
#> Loading required package: ggplot2
require(dplyr)
#> Loading required package: dplyr
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

## data ---
plotData <- tibble(label = 
                     factor(c("", "strawberries", "blueberries", "", "strawberries", "blueberries"),
                             levels = c("strawberries", "blueberries", ""), ordered = TRUE),
                   value = c(30, 40, 20, 15, 30, 15),
                   bowl = factor(c("bowl1", "bowl1", "bowl1", "bowl2", "bowl2", "bowl2"))) 

## plot ---

### Specs for the legend
legendSpecs <- guide_legend(nrow = 1, label.position = "bottom",
                            reverse = TRUE, title = NULL)
### desired plot
ggplot(plotData, aes(x = value, y = bowl,
                     fill = label, colour = label)) +
  geom_bar(stat = "identity", position = "stack") +
  scale_fill_manual(values = c("blue", "red", NA), guide = legendSpecs) +
  scale_colour_manual(values = c("black",  "black", NA), guide = legendSpecs) +
  theme_minimal() +
  theme(legend.position = "bottom")

展示我试图消除的图例中的小偏移:

### demonstrating legend offset
ggplot(plotData, aes(x = value, y = bowl,
                     fill = label, colour = label)) +
  geom_bar(stat = "identity", position = "stack") +
  scale_fill_manual(values = c("blue", "red", NA), guide = legendSpecs) +
  scale_colour_manual(values = c("black",  "black", "black"), guide = legendSpecs) +
  theme_minimal() +
  theme(legend.position = "bottom")

Created on 2021-06-30 by the reprex package https://reprex.tidyverse.org (v2.0.0)


这可以通过设置来实现breaks仅包含所需类别的量表:

## libraries ---
require(ggplot2)
require(dplyr)

## data ---
plotData <- tibble(label = 
                     factor(c("", "strawberries", "blueberries", "", "strawberries", "blueberries"),
                            levels = c("strawberries", "blueberries", ""), ordered = TRUE),
                   value = c(30, 40, 20, 15, 30, 15),
                   bowl = factor(c("bowl1", "bowl1", "bowl1", "bowl2", "bowl2", "bowl2"))) 

## plot ---

### Specs for the legend
legendSpecs <- guide_legend(nrow = 1, label.position = "bottom",
                            reverse = TRUE, title = NULL)
### desired plot
ggplot(plotData, aes(x = value, y = bowl,
                     fill = label, colour = label)) +
  geom_bar(stat = "identity", position = "stack") +
  scale_fill_manual(values = c("blue", "red", NA), na.value = NA,
                    guide = legendSpecs, breaks = c("blueberries", "strawberries"))  +
  scale_colour_manual(values = c("black",  "black", NA), , na.value = NA, 
                      guide = legendSpecs, 
                      breaks = c("blueberries", "strawberries")) +
  theme_minimal() +
  theme(legend.position = "bottom")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从图例中删除已使用的值? 的相关文章

  • matplotlib 中的 R 风格数据轴缓冲区

    R 绘图自动设置 x 和 y 限制 以在数据和轴之间留出一些空间 我想知道 matplotlib 是否有办法自动执行相同的操作 如果没有 是否有一个好的公式或 经验法则 来说明 R 如何设置其轴限制 在 matplotlib 中 您可以通过
  • ggplot 图例标签内的希腊字母、符号和换行符

    我在尝试着 有换行符 自动或强制 对齐文本 左对齐或左右对齐 有希腊字母和百分号 在 gglot 图例标签内 我尝试了几种方法 但我似乎无法将我读到的所有技巧结合起来 我可以通过插入来换行 n进入标签 但这似乎不适用于希腊字母 不适用于图例
  • R闪亮主面板显示样式和字体

    我正在学习闪亮的应用程序 并且有一些关于调整布局的基本问题 特别是样式和字体 希望得到指点或明确的答案 谢谢 考虑一个基本的输入输出应用程序 用户在 sidebarPanel 中输入数据 然后在 mainPanel 中反应性地输出结果 如何
  • 如何有效地将多个光栅 (.tif) 文件导入 R

    我是 R 新手 尤其是在空间数据方面 我正在尝试找到一种方法来有效地将多个 600 单波段栅格 tif 文件导入到 R 中 所有文件都存储在同一文件夹中 不确定这是否重要 但请注意 在我的 Mac 和 Windows 并行 VM 上的文件夹
  • 改进R中从google获取股票新闻数据的功能

    我已经编写了一个函数来从 Google 获取和解析给定股票代码的新闻数据 但我确信有一些方法可以改进它 对于初学者来说 我的函数返回一个 GMT 时区的对象 而不是用户当前的时区 如果传递的数字大于 299 它就会失败 可能是因为 goog
  • R data.table 多个条件连接

    我设计了一种解决方案 用于从两个单独数据表的多个列中查找值 并添加基于新列的值计算 多个条件比较 代码如下 它涉及在计算两个表中的值时使用 data table 和联接 但是 这些表没有联接在我正在比较的列上 因此我怀疑我可能无法获得 da
  • 如何在基数 R 中进行分组

    我想使用以下 SQL 查询来表达base R 没有任何特定的包 select month day count as count avg dep delay as avg delay from flights group by month d
  • 根据 R 数据框中的名称对列进行平均

    我想知道是否有一种有效的方法来获取每组的平均值类似命名的列谁的名字结尾为 1S and 2S ex ex1S ex2S at time 1并取每组的平均值类似命名的列谁的名字结尾为 1C or 2C ex ex1C ex2C at time
  • 如何读取 R 中的每个 .csv 文件并将其导出到单个大文件中

    你好 我有以下格式的数据 101 20130826T155649 3 1 round 0 10552 180 yellow 12002 1 round 1 19502 150 yellow 22452 1 round 2 28957 130
  • 修改linux下的路径

    虽然我认为我已经接近 Linux 专业人士 但显然我仍然是一个初学者 当我登录服务器时 我需要使用最新版本的R 统计软件 R 安装在 2 个地方 当我运行以下命令时 which R I get usr bin R 进而 R version
  • dplyr 中的标准评估:全局环境中的函数出现“无法找到函数”错误

    我试图在 dplyr 中对全局环境中的函数使用标准评估 但出现 无法找到函数 错误 这是一些代码 create data frame df lt data frame x rnorm 10 y rnorm 10 define arbitra
  • 通过 r markdown 中的循环创建代码片段

    如同如何使用R中的knitr创建一个包含代码块和文本的循环 https stackoverflow com questions 36373630 how to create a loop that includes both a code
  • rvest 和 NHL 统计数据的 CSS 选择器问题

    我想从 hockey reference com 中抓取数据 特别是从以下链接中抓取数据 https www hockey reference com leagues NHL 1991 html https www hockey refer
  • R 多元一步预测和准确性

    我想使用 R 来比较两个预测模型的 RMSE 均方根误差 第一个模型使用 1966 年至 2000 年的估计值来预测 2001 年 然后使用 1966 年至 2001 年的估计值来预测 2002 年 依此类推直至 2015 年 第二个模型使
  • 如何返回包含最大值标签的向量

    我有一个 4 列数组 我想获得一个向量 其中每行包含包含该行最大值的列的标签 我可以在循环中执行此操作 但我想使用矩阵函数来提高速度 我怎样才能在不编写自己的库函数的情况下做到这一点 有一个函数可以做到这一点 如果x是你的矩阵 尝试max
  • R 中的龙卷风图

    我正在尝试在 R 中绘制龙卷风图 又名敏感性图 目标是可视化某些变量增加 10 和减少 10 的效果 到目前为止我已经得到这个结果 这是我正在使用的代码 Tornado plot data lt matrix c 0 02 0 02 0 0
  • 在 igraph 中为社区分配颜色

    我在 igraph 中使用 fastgreedy community 检测算法在 R 中生成社区 代码返回 12 个社区 但是在绘图时很难识别它们 因为它返回的图的颜色数量有限 我怎样才能用十二种不同的颜色绘制这个图表 l2 lt layo
  • 排序因素与水平

    有人能解释一下 R 中 ordered 参数的用途吗 R says ordered逻辑标志来确定级别是否应被视为有序 按给定的顺序 所以如果我有一个名为名称的因素并设置ordered TRUE names lt factor c fred
  • 如何定义“f_n-chi-square”函数并使用“uniroot”求置信区间?

    I want to get a 95 confidence interval for the following question 我已经写了函数f n在我的 R 代码中 我首先使用 Normal 随机采样 100 个样本 然后定义函数h
  • 按特定样本前缀对列名称向量进行子集化

    假设我有一个如下所示的数据框 ca01 lt c 1 10 ca02 lt c 2 11 ca03 lt c 3 12 stuff 1 lt rep test 10 other lt rep 9 10 data lt data frame

随机推荐