Ошибка: эстетика должна быть либо длиной 1, либо такой же, как у данных (1): x

#r #ggplot2

#r #ggplot2

Вопрос:

Извините, если на мой вопрос уже где-то был дан ответ, но все остальные сообщения об «Эстетике должны быть либо длиной 1, либо такими же, как у данных» мне не помогли.

Я пытаюсь запустить следующий код, но он выдает эту ошибку: Ошибка: Эстетика должна быть либо длиной 1, либо такой же, как у data (1): x

 library(tidyverse)

demand <- function(q) (q - 10)^2
supply <- function(q) q^2   2*q   8

x <- 0:5

chart <- ggplot()  
  stat_function(aes(x), color = "Demand", fun = demand)  
  stat_function(aes(x), color = "Supply", fun = supply)
chart
  

Что здесь не так?

Вывод должен выглядеть следующим образом:

введите описание изображения здесь

Комментарии:

1. Отредактировал мой ответ, указав xlim() необходимое, чтобы показать кривые по мере необходимости.

Ответ №1:

Согласно ?ggplot2::stat_function() , эта геометрия не требует data = ... . Это потому, что « stat_function() computes the following variables: x values along a grid [and] y value of the function evaluated at corresponding x «. Проблема связана с тем, как вы используете x inside aes() . Пожалуйста, посмотрите на приведенный ниже код:

РЕДАКТИРОВАТЬ: я добавил возможность использовать x объект для установки оси x.

 library(ggplot2)

demand <- function(q) (q - 10)^2
supply <- function(q) q^2   2*q   8

x <- 0:5

chart <- ggplot()  
  stat_function(aes(color = "Demand"), fun = demand)  
  stat_function(aes(color = "Supply"), fun = supply)  
  xlim(min(x), max(x))  
  scale_color_manual(name = "Legend",
                     values = c("Demand" = "red", "Supply" = "#24C6CA"))
chart
  

Вывод:

введите описание изображения здесь

Это то, что вы ищете? Обратите внимание на использование xlim() для установки диапазона оси x.

Комментарии:

1. Это работает для получения желаемого результата, но я изо всех сил пытаюсь понять, почему я не могу добавить входные данные в модели спроса и предложения, задав значения x.

2. Возможно, это просто неправильная геометрия. Если вы используете свой вектор x для вычисления вектора y с использованием своих функций, вы можете затем использовать geom_points и / или geom_lines . И все равно добавьте stat_function поверх него.

3. Спасибо за помощь! Я понял это. Это работает: x <- data.frame(x = c(0:5)) диаграмма <- ggplot(данные = x, aes(x)) stat_function(aes(color = «Спрос»), fun = спрос) stat_function(aes(color = «Предложение»), fun = supply) диаграмма

4. @MetaPhilosopher Добро пожаловать 🙂 могу я спросить, почему вам нужно использовать этот x объект абсолютно?

5. @MetaPhilosopher спасибо за ответ, я добавил небольшую строку, чтобы учесть это 🙂