首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将geom_text颜色映射到变量

如何将geom_text颜色映射到变量
EN

Stack Overflow用户
提问于 2022-03-20 08:39:24
回答 3查看 310关注 0票数 2

对于条形图,我希望按自定义顺序垂直堆叠条形组件。在下面的示例中,应该控制堆叠顺序的变量是“机制”。预期的堆叠顺序既不是字母顺序,也不是数据行排序的顺序。并非所有条形图都有所有机制。我手动设置了序列,并将序列作为一个因子的级别使用。完全缺失的因子级别没有得到正确的处理,对此我们欢迎使用解决方案,但我可以解决这个问题。

要添加显示每个组件大小的文本标签,我计算标签的y高度值并添加一个geom_text. --我希望文本的颜色与条形组件的颜色形成一致的对比:蓝色条形组件上的白色文本,等等。因此,我将geom_ text的颜色分配给与geom_ bar的填充相同的变量。但是,背景和文本的预期颜色配对不保持匹配。请给出一些新的想法。(感谢编辑插入了这张混乱的图表的图片。)

期望的结果是,每一个机制为“热”的条形组件都会有带有黑色文本注释的红色填充。每个机制为“城市”的组件都将使用tan4填充grey50文本进行注释。

我还尝试分配颜色,而不将映射的变量设置为一个因子(例如选项1),就像在geom_text() & color gradient中一样。

代码语言:javascript
运行
AI代码解释
复制
library(ggplot2)
m.data <- data.frame(m.model = factor(c(1, 1, 2, 2, 4)),
   mechanism = c("urban", "hot", "hot", "urban", "urban"),
   bar.height = 1:5,
   y.for.text = c(.5, 2, 1.5, 5, 2.5))
mechanism.order <- c("hot", "dry", "urban")
mechanism.colors <- c("red", "blue", "tan4")
text.colors <- c("black", "white", "grey50")

m.map <- ggplot() +
   geom_bar(data = m.data, aes(x = m.model, y = bar.height, 
      fill = factor(mechanism, levels = mechanism.order)), 
      stat = "identity") +
   scale_fill_manual(values = mechanism.colors) +
   scale_color_manual(values = text.colors) 

# option 1:
m.map +    
   geom_text(data = m.data, aes(x = m.model, y = y.for.text,
      color = mechanism, label = bar.height)) 
   
# option 2:
m.map +    
   geom_text(data = m.data, aes(x = m.model, y = y.for.text,
      color = factor(mechanism, levels = mechanism.order), 
      label = bar.height))

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-03-20 09:32:06

要明确颜色,请将它们作为一个名为向量传递。

这里还有几点:

使用geom_col

  • You编写
  1. A geom_bar stat = "identity"只是很长的一段路,不需要为文本提供代码y位置。如果您的层都使用相同的数据和x,y变量,则只需在position_stack(vjust = 0.5) geom_text中使用
  2. ,然后通过初始的ggplot调用传递它们,并让层继承它们

代码语言:javascript
运行
AI代码解释
复制
mechanism.colors <- c(hot = "red", dry = "blue", urban = "tan4")
text.colors <- c(hot = "black", dry = "white", urban = "gray50")

ggplot(data = m.data, aes(x = m.model, y = bar.height)) +
   geom_col(aes( fill = factor(mechanism, levels = mechanism.order))) +
   geom_text(aes(label = bar.height, color = mechanism),
             position = position_stack(vjust = 0.5), size = 8) +
   scale_fill_manual(values = mechanism.colors) +
   scale_color_manual(values = text.colors) +
   labs(fill = "mechanism") +
   guides(color = guide_none())

票数 2
EN

Stack Overflow用户

发布于 2022-03-20 09:31:42

我不确定我是否理解您想要的输出,但这可能会有所帮助:

我稍微更新了您的ggplot调用:如果您在最初的ggplot调用中提供了aes(),则不需要在之后重复。此外,不需要将factor()添加到fill =语句。在geom_text中,将color = mechanism放入aes()中,以便以后可以使用scale_color_manual访问它以添加自定义颜色。最后,您可以添加position = position_stack以获得中间的文本。

代码语言:javascript
运行
AI代码解释
复制
ggplot(m.data, aes(m.model, bar.height, fill = mechanism)) +
  geom_bar(stat = "identity") +
  scale_fill_manual(values = mechanism.colors) +
  geom_text(aes(label = bar.height, color = mechanism), position = position_stack(.5)) +
  scale_color_manual(values = c("black", "grey50 "))

输出:

然而,正如你所看到的,gray40可能不是蓝色背景上最好的颜色,因为对比度不是很好。你可能想选择另一种颜色。

票数 2
EN

Stack Overflow用户

发布于 2022-03-20 09:48:05

建议使用修改后的数据。大部分的程序已经由亲爱的阿兰卡梅隆介绍。新的是转换成因子之前的is图:

代码语言:javascript
运行
AI代码解释
复制
m.data <- data.frame(m.model = factor(c(1, 1, 2, 2, 4)),
                     mechanism = c("urban", "hot", "dry", "urban", "urban"),
                     bar.height = 1:5,
                     y.for.text = c(.5, 2, 1.5, 5, 2.5))
mechanism.order <- c("hot", "dry", "urban")
mechanism.colors <- c("red", "blue", "tan4")
text.colors <- c("black", "white", "grey50")
代码语言:javascript
运行
AI代码解释
复制
library(tidyverse)

m.data %>% 
  mutate(mechanism = factor(mechanism, levels = mechanism.order)) %>% 
  ggplot(aes(x=m.model, y=bar.height, fill=mechanism))+
  geom_col()+
  geom_text(aes(label = bar.height, color = mechanism),
            position = position_stack(vjust = 0.5)) +
  scale_fill_manual(values = mechanism.colors) +
  scale_color_manual(values = text.colors) 

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71548629

复制
相关文章
曾经,我以为我很懂MySQL索引
  在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
陈哈哈
2020/09/11
8070
曾经,我以为我很懂MySQL索引
匿名函数自调用_自己调用自己的函数叫
我们知道一个HTML文件在被加载的时候是从根标签html依次往下的,在遇到link,script等标签引入的外部资源时,下载外部资源,并执行外部资源。在js中,表达式会被立即执行,也就是说,不管是引入的外部js文件还是嵌入在html文件中的js脚本,其中的表达式都会被立即执行。 函数名是一个指向函数的指针。在JavaScript中,定义函数有常见的两种形式:函数声明和函数直接量(或者叫函数表达式)。 函数声明:采用function定义声明函数的标准写法,包括function,函数名,函数体。如
全栈程序员站长
2022/11/09
2.6K0
这代码写的太烂了!你以为我真想写“垃圾代码”吗?
很多时候作为底层的“码农”我们并没有选择权,然后我们的青春就浪费在了重复写垃圾代码里,浪费在了“项目目标里”,自己得到的也就是比正常小白领多一点的薪水,但是自己的发展空间被严重限制了
搜云库技术团队
2019/09/26
1K0
我是不会运行你的代码吗?不,我是不会导入自己的数据!
常常遇到有人问起看到分享的教程导入数据的方式是data(dune)等直接调用系统的数据,而自己怎么读入自己的数据呢?
生信宝典
2022/01/18
1.5K0
我的细胞系还是我以为的细胞系嘛?
我们在做细胞实验的时候,经常会有这样的疑虑,细胞被那么多人蹂躏了那么多次了,那我现在操作的细胞当时我以为的那个细胞系嘛?会不会有人在传代的时候不小心把这个细胞系的名字写成了另外的名字,然后就这样一直传下去了呢。
医学数据库百科
2020/07/07
4700
关于Linux的grep -f命令,我以为我发现了bug
今天,我像往常一样提取基因组的样本,我有一堆样本的ID,需要从所有的基因型的文件中提取出来。
邓飞
2021/09/03
1.2K0
一日一技:多个Python项目怎么调用我自己的工具函数?
在多年写代码的过程中,我总结了不少常用的工具函数。这些工具函数有的能够实现快速重试网络请求,有的可以把任意格式的时间转成标准格式,还有的可以自动生成正则表达式。
青南
2022/05/23
1.1K0
一日一技:多个Python项目怎么调用我自己的工具函数?
我准备自己做一个卫星
我是不是膨胀了,连卫星都敢做了?不知道你是否有想过自己制作一颗卫星吗?看完本篇文章,你也能自己做个卫星,要想上天就差个火箭了!
单片机点灯小能手
2020/07/17
1.1K0
我准备自己做一个卫星
我以为我很懂Promise,直到我开始实现Promise/A+规范
2我一度以为自己很懂Promise,直到前段时间尝试去实现Promise/A+规范时,才发现自己对Promise的理解还过于浅薄。在我按照Promise/A+规范去写具体代码实现的过程中,我经历了从“很懂”到“陌生”,再到“领会”的过山车式的认知转变,对Promise有了更深刻的认识!
程序员白彬
2021/03/09
6480
我以为我很懂Promise,直到我开始实现Promise/A+规范
我以为我很懂Promise,直到我开始实现Promise/A+规范
我一度以为自己很懂Promise,直到前段时间尝试去实现Promise/A+规范时,才发现自己对Promise的理解还过于浅薄。在我按照Promise/A+规范去写具体代码实现的过程中,我经历了从“很懂”到“陌生”,再到“领会”的过山车式的认知转变,对Promise有了更深刻的认识!
程序员白彬
2021/03/23
8000
我可以在一个构造函数中调用另一个构造函数么
但在 C++11 版本之前是不可以的,不过你可以通过两种方式来模拟实现(可以参见 the C++ FAQ entry),
ClearSeve
2022/02/10
3.2K0
[C#]我自己写的一个对字节中每位进行修改值的函数
byte初始状态: 11111111 byte修改第0位后的结果: 01111111 byte修改第1位后的结果: 00111111 byte修改第2位后的结果: 00011111 byte修改第3位后的结果: 00001111 byte修改第4位后的结果: 00000111 byte修改第5位后的结果: 00000011 byte修改第6位后的结果: 00000001 byte修改第7位后的结果: 00000000
静默虚空
2022/05/07
2.2K0
GitHub:我开源我自己;CEO:不存在的
TypeScript的开发者Resynth忽然Po了篇文章,表示代码托管服务GitHub的全部源代码被泄露。
龙哥
2020/11/19
5390
GitHub:我开源我自己;CEO:不存在的
我卷我自己——cvpr2021:Involution
本文重新回顾了常规卷积的设计,其具有两个重要性质,一个是空间无关性,比如3x3大小的卷积核是以滑窗的形式,滑过特征图每一个像素(即我们所说的参数共享)。另外一个是频域特殊性,体现在卷积核在每个通道上的权重是不同的。
BBuf
2021/03/25
1.9K1
故障分析 | MySQL:我的从库竟是我自己!?
爱可生 DBA 团队成员,负责项目日常问题处理及公司平台问题排查。热爱互联网,会摄影、懂厨艺,不会厨艺的 DBA 不是好司机,didi~
爱可生开源社区
2023/08/18
2180
故障分析 | MySQL:我的从库竟是我自己!?
用XGB调XGB?"我"调"我"自己?
上篇《深恶痛绝的超参》已经介绍了很多实用的调参方式,今天来看一篇更有趣的跳槽方法,用ML的方式调ML的模型我们用我们熟悉的模型去调我们熟悉的模型,看到这里很晕是不是,接下来我们就看看XGBoost如何调XGBoost。
炼丹笔记
2021/06/15
5000
我什么也不懂,能搞个自己的网站吗?能!
sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common
我被狗咬了
2019/11/12
2.3K0
重构 -- 我是一个类,难道我不配有专属的测试代码吗?
刚看到这个观点的时候,我是很不以为然的,谁让它标题不吸引人>>>《构建测试体系》 就这标题,谁不知道要测试啊。还好我没有“以貌取文”,我认真的看了下去。
看、未来
2020/08/26
7730
我眼中的变量聚类
‍‍‍‍‍ 连续变量压缩的基本思路为:建模之前使用主成分、因子分析或变量聚类的方法进行变量压缩,后续建模时使用向前法、向后法、逐步法或全子集法进一步进行变量细筛。虽然方法的名称叫做变量聚类,但却并不是聚类分析,而是一种主成分分析的方法。
许卉
2019/07/15
1.5K0
我眼中的变量聚类
点击加载更多

相似问题

我可以为spring提供我自己的变量插值器吗?

10

Powershell:我可以为我自己的函数参数使用一个现有的枚举吗?

110

我可以为我自己的类创建资源属性吗?

10

我可以为carrot2使用我自己的标签吗?

16

我可以为我的业务逻辑创建自己的状态代码吗?

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档