我想使用一条if语句来更改ggploy中y美学的焦点:

ggplot(diamonds, aes(x = cut, y = ifelse(TRUE, sym("clarity"), sym("price")))) +
  geom_col(position = "dodge")

但它给了我以下几点:

不知道如何为文字对象自动拾取比例.默认为连续.geom_col()中的错误:!计算美学时的问题.第1层出现ℹ错误.由compute_aesthetics()中的错误引起:!美学不是有效的数据列.✖以下美观是无效的:✖y = ifelse(TRUE, sym("clarity"), sym("price"))ℹ您是输入了错误的数据列名,还是忘记添加after_stat()

推荐答案

目前还不清楚您为什么要在这里使用sym.如果您将该部分go 掉,则可以使用以下两个选项之一

ggplot(diamonds, aes(x = cut, y = ifelse(TRUE, clarity, price))) +
  geom_col(position = "dodge")

# or 

ggplot(diamonds, aes(x = cut, y = if(TRUE) clarity else price)) +
  geom_col(position = "dodge")

问题是sym("clarity")并不完全等同于clarity.前者需要经过判断才能成为后者.因为aes()使用了非标准的判断.您不能直接调用类似于

ggplot(diamonds, aes(x = cut, y = sym("clarity"))) +
  geom_col(position = "dodge")

相反,您需要将值注入到!!的调用中

ggplot(diamonds, aes(x = cut, y = !!sym("clarity"))) +
  geom_col(position = "dodge")

因此,我想如果您真的想使用sym,您只需将该值注入到表达式中

ggplot(diamonds, aes(x = cut, y = !!ifelse(TRUE, sym("clarity"), sym("price")))) +
  geom_col(position = "dodge")

请注意,这不适用于dplyr的更谨慎的dplyr::if_else,因为通常你不做一个符号向量.由于您不使用向量或值,而只是使用符号名称,因此最好使用if而不是ifelse,因为这更多地是关于控制流而不是转换向量.

ggplot(diamonds, aes(x = cut, y = !!(if(TRUE) sym("clarity") else sym("price")))) +
  geom_col(position = "dodge")

R相关问答推荐

使用ggcorrplot在相关性矩阵上标注supertitle和index标签

R:更新后无法运行控制台

如何在RMarkdown LaTex PDF输出中包含英语和阿拉伯语?

将数据集中的值增加到当前包含的最大值

将数字转换为分钟和秒

R函数,用于生成伪随机二进制序列,其中同一数字在一行中不出现超过两次

如何在分组条形图中移动相关列?

为左表中的所有行使用值Fill滚动左连接

将多个列值转换为二进制

R+reprex:在呈现R标记文件时创建可重现的示例

如何在PrePlot()中将多个元素设置为斜体

如何构建一个for循环来循环处理动物ID?

避免在图例中显示VLINS组

计算来自单独分组的分幅的值的百分位数

R中的Desolve:返回的导数数错误

使用其他DF中的文件名将列表中的每个元素保存到文件中

将CSV转换为R中的自定义JSON格式

在直方图中显示两个变量

如何在一个GGPLATE中绘制多个灰度平滑?

基于已有ID列创建唯一ID