#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 спасибо за ответ, я добавил небольшую строку, чтобы учесть это 🙂