Context:有时我只需要更改绘图的标签(e.g.更改语言),但我不想再次绘制整个绘图,因为在某些情况下代码可能很长.

Problem:它们至少有两种方式来定义美学标签:

  1. 使用功能ggpot2::labs(x = ..., y = ...)和,
  2. 带刻度函数ggplots::scale_*_*(name = ...)name参数

根据以下示例,对于绘图pp + labs()似乎可以覆盖使用labs()函数定义的实验室,但不能覆盖使用scale_*_*(name = ...)定义的实验室.

Question:如何避免这种行为?是虫子还是我做错了什么?

Example:

这符合预期:

library(ggplot2)
# This is working as expected
p1 <- ggplot(data = iris, aes(x = Sepal.Width, y = Petal.Width)) +
  scale_x_continuous() +
  scale_y_continuous() +
  labs(x = "A name",
       y = "Another name")
p1
# trying to change the labs without making the plot again
p1 + labs(
  x = "The new x title",
  y = "The new y title"
)

但这不会:

library(ggplot2)
# This is not working
p2 <- ggplot(data = iris, aes(x = Sepal.Width, y = Petal.Width)) +
  scale_x_continuous(name = "A name") +
  scale_y_continuous(name = "Another name")
p2
p2 + labs(
  x = "The new x title",
  y = "The nex y title"
)

推荐答案

这只是在解释发生了什么.在绘图中设置标签有多种方法,它们具有不同的优先级.以下是从最高到最低的优先级.

(0.在一些尺度扩展中,make_title()方法可以被覆盖.但这通常不适用于绝大多数尺度.我知道这样的尺度只有0,但这是理论上的可能性.)

  1. 指南标题.
  2. 比例名称.
  3. labs()功能.
  4. aes()中捕获的表达式.

大多数消歧都发生在this line个ggplot2源代码中,其中优先级为1-3.labs()函数本质上是重写从捕获的表达式自动生成的标签,从而使(3)优先于(4).

试着对下面情节的某些部分进行注释,以仔细判断自己.

library(ggplot2)

df <- iris
names(df)[1] <- "Last Priority"

ggplot(df, aes(`Last Priority`, Sepal.Width)) +
  scale_x_continuous(
    name  = "Second Priority",
    guide = guide_axis(title = "First priority")
  ) +
  labs(x = "Third Priority")

因此,覆盖x轴标题的最佳方法是使用:

plot + guides(x = guide_axis(title = "My new title"))

由于轴参考线通常为guide_axis()guide_none(),因此在大多数情况下,您都有很好的机会使用它(除非绘图没有轴).此外,如果有一个函数生成具有预定义x比例的绘图,这应该很好(除非他们在指南中设置了特定选项).

R相关问答推荐

如何根据R中其他列的值有条件地从列中提取数据?

提取具有连续零值的行,如果它们前面有R中的有效值

未识别时区

如何在R中描绘#符号?

使用`Watch()`和`renderUI()`时,不再满足仍出现在SHILINY AFTER条件中的条件输入

为什么在BASE R中绘制线条时会看到线上的点?

随机森林的带Shap值的蜂群图

Conditional documentr::R中数据帧的summarize()

变异以按组从其他列创建具有最大和最小值的新列

填充图例什么时候会有点?

如何调整一个facet_work()面板内的框图和移动标签之间的水平宽度?

我正在try 创建一个接近cos(X)的值的While循环,以便它在-或+1-E10范围内

如何用不同长度的向量填充列表?

重写时间间隔模糊连接以减少内存消耗

如何为包创建自定义roxygen2标签?

在不带max()的data.table中按组查找最后一个元素

如果缺少时间,如何向日期-时间列添加时间

删除列表中的奇数长度元素

线性混合模型方差分析的非参数方法及幂计算

根据存储在另一个数据帧中的变量名称获取相应的值?