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

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(使用前将#替换为@)

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

  • 使用 R Shiny 从 XLConnect 下载 Excel 文件

    有没有人尝试过使用 R Shiny 中的下载处理程序通过 XLConnect 下载新创建的 Excel 文件 在 ui R 中有一行不起眼的行 downloadButton downloadData Download 在 server R
  • 如何提取与 R 中主题 ID 列表匹配的行?

    我有一个包含许多主题 ID 的数据框 每个主题都有重复观察 我还有一个单独的数据框 其中只有一个主题 ID 列表 我想从更大的数据框中匹配和提取 如何以允许我引用不同数据帧中的SubjectID列表的方式编写代码 不确定我是否完全理解这个问
  • 从 R 中的向量中选择所有可能的元组

    我正在尝试用 R 编写一个程序 当给定一个向量时 将返回所有可能的tuples http en wikipedia org wiki Tuples该向量中的元素 例如 元组 c a b c c a b c 出租车 c a c c b c c
  • ggplot2可以在一个图例中分别控制点大小和线大小(线宽)吗?

    一个使用的例子ggplot2绘制数据点组和连接每组均值的线 并使用相同的映射aes for shape并为linetype p lt ggplot mtcars aes gear mpg shape factor cyl linetype
  • 如何对同一列上的数据帧列表中的所有数据帧进行排序?

    我有一个数据框列表dataframes list 举个例子 我把dput dataframes list 在底部 我想对列列表中的所有数据框进行排序enrichment 我可以对一个数据框进行排序 first dataframe lt da
  • 如何在R中删除重复项

    我有一个非常大的数据集 如下所示 df lt data frame school c a a a b b c c c year c 3 3 1 4 2 4 3 1 GPA c 4 4 4 3 3 3 2 2 school year GPA
  • 如何在 ggplot 中保持配色方案,同时删除每个图中未使用的级别?

    我想比较一个图中的数据的一些子组和另一图中的一些其他子组 如果我绘制一个图 其中绘制了所有子组 那么这个数字将是巨大的 并且每个单独的比较都会变得困难 我认为如果给定的子组在所有图中都具有相同的颜色 这对读者来说会更有意义 这是我尝试过的两
  • 如何在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
  • 重复测量引导统计数据,按多个因素分组

    我有一个看起来像这样的数据框 但显然还有更多行等 df lt data frame id c 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 cond c A A B B A A B B A A B B A A B B co
  • 如何删除箱线图上的刻度线

    我试图从箱线图中删除 x 轴刻度线 但保留与刻度线关联的标签 这在基础 R 中可能吗 colors lt c lightskyblue3 gray78 gold1 wheat1 boxplot avgscore module data mi
  • R - Plm 和 lm - 固定效应

    我有一个平衡面板数据集 df 本质上由三个变量组成 A B and Y 对于一堆独特识别的区域来说 它会随着时间的推移而变化 我想运行一个回归 其中包括区域 下面等式中的区域 和时间 年份 固定效应 如果我没记错的话 我可以通过不同的方式来
  • 将数据框中的每个 x 个字符拆分为字符串

    我知道这里有一些关于每隔一段时间分割一个字符串的答案nth字符 例如this one https stackoverflow com questions 23208490 split each character in r and this
  • 尝试读取 CSV 文件时出现“无法识别的字符串转义”

    我正在尝试导入一个 csv文件 以便我可以观看此视频 R ggplot2 图形直方图 http www youtube com watch v 47kWynt3b6M 我安装了所有正确的软件包 包括ggplot以及相关的包 视频中的第一个说
  • 在 R 中创建虚拟变量,排除某些情况为 NA

    我的数据看起来像这样 V1 V2 A 0 B 1 C 2 D 3 E 4 F 5 G 9 我想创建一个虚拟变量R where 0 1 1 2 3 4 and NA 0 5 9 应该很简单 有人可以帮忙吗 我们可以转换V2 into a fa
  • 在 R 格子包中微调点图

    我正在尝试为不同的数据集和不同的算法绘制一堆 ROC 区域 我有三个变量 方案 指定所使用的算法 数据集 是正在测试算法的数据集 以及 Area under ROC 我正在 R 中使用lattice库 命令如下 点图 方案 Area und
  • 以引用透明的方式从函数的省略号参数中提取符号

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

    我正在尝试使用 lapply 函数绘制多个数据帧 每个数据帧一个图 但是尽管有关此主题的所有帖子我都找不到答案 因为我不断收到错误 图的输出列表为空 我的数据结构如下 df1 lt mtcars gt group by cyl gt tal
  • 只读取选定的列

    谁能告诉我如何仅读取下面每年数据的前 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
  • 将数据框中重叠的范围合并到唯一的组中

    我有一个 n 行 3 的数据框 df lt data frame start c 178 400 983 1932 33653 end c 5025 5025 5535 6918 38197 group c 1 1 2 2 3 df sta
  • 如何仅删除单括号并保留配对的括号

    你好 我亲爱的老师 R 用户朋友们 我最近开始认真学习正则表达式 最近我遇到了一种情况 我们只想保留配对括号 并省略未配对的 这是我的样本数据 structure list t1 c Book Pg 1 Website Online Jou

随机推荐