首页 > 解决方案 > 使用 ggplot 在网格中绘制两个 stat_function()

问题描述

我想使用相同的函数在网格中输出两个图,但输入不同x。我根据这篇文章使用with ,并且ggplot2我根据这篇文章这篇文章将这两个情节结合起来。stat_function

f01 <- function(x) {1 - abs(x)}

ggplot() +
    stat_function(data = data.frame(x=c(-1, 1)), aes(x = x, color = "red"), fun = f01) +
    stat_function(data = data.frame(x=c(-2, 2)), aes(x = x, color = "black"), fun = f01)

具有以下输出:

阴谋:

我的输出

信息:

`mapping` is not used by stat_function()`data` is not used by stat_function()`mapping` is not used by stat_function()`data` is not used by stat_function()

我不明白为什么stat_function()不使用这两个论点。我希望绘制两张图,一张为xbetween -1:1,第二张为 x between -2:2。此外,它将颜色作为标签,我也不明白为什么。我一定遗漏了一些明显的东西。

标签: rggplot2

解决方案


老实说,我不太确定这里发生了什么ggplot及其内部运作。似乎这些函数总是应用于完整的范围,这里是 -2 到 2。此外,github 上还有一个关于stat_function.

但是,您可以使用xlim参数stat_function来限制绘制函数的范围。此外,如果您不colour通过变量指定参数,而是通过手动标签指定参数,则需要告诉哪些颜色应该用于哪个标签scale_colour_manual(最简单的是使用命名向量)。我还调整了线宽以更好地显示功能:

library(ggplot2)

f01 <- function(x) {1 - abs(x)}

cols <- c("red" = "red", "black" = "black")

ggplot() +
  stat_function(data = data.frame(x=c(-1, 1)), aes(x = x, colour = "red"), fun = f01, size = 1.5, xlim = c(-1, 1)) +
  stat_function(data = data.frame(x=c(-2, 2)), aes(x = x, colour = "black"), fun = f01) +
  scale_colour_manual(values = cols)


在此处输入图像描述


推荐阅读