#r #ggplot2
#r #ggplot2
Вопрос:
Я ищу способ печатать разные строки с разными цветами на ggplot2. Я не знаю, почему это работает, когда я печатаю свой график с переменной в качестве цвета, но когда я устанавливаю сплошной цвет в своей eastethics, я получаю сообщение об ошибке
Error: Discrete value supplied to continuous scale
Источник ошибки указывается с комментарием
X3500um_0to50_tx2rx1 X15_30_45_rx2tx2 <- data.frame(
Time = c(2020-11-03 15:20:00, 2020-11-03 15:20:01),
Diff_Touchpad0_Rx1_Tx2= c(2782, 27804),
Diff_Touchpad0_Rx2_Tx0= c(2782, 27804),
Diff_Touchpad0_Rx2_Tx1= c(2782, 27804),
Diff_Touchpad0_Rx2_Tx2= c(2782, 27804))
ggplot(X3500um_0to50_tx2rx1, aes(Time, Diff_Touchpad0_Rx1_Tx2))
geom_line(aes(colour = Diff_Touchpad0_Rx1_Tx2))
geom_line(aes(Time, Diff_Touchpad0_Rx2_Tx0))
geom_line(aes(Time, Diff_Touchpad0_Rx2_Tx1, colour = "red")) #causes an error??
geom_line(aes(Time, Diff_Touchpad0_Rx2_Tx2, colour = Diff_Touchpad0_Rx2_Tx2))
Комментарии:
1.
aes(colour=Diff_Touchpad0_Rx2_Tx2)
сопоставляет переменнуюDiff_Touchpad0_Rx2_Tx2
сcolour
, что означает, что линии с разными значениямиDiff_Touchpad0_Rx2_Tx2
будут иметь разный цвет, и цвет будет определяться на основе палитры по умолчанию, если не изменен с помощью одной изscale_colour_***
функций. ЕслиDiff_Touchpad0_Rx2_Tx2
значение числовое (как здесь), отображение цветов будет в непрерывном градиентном масштабе. Если вы хотите жестко запрограммировать цвет, удалите отображение цветов внутриaes
и добавьтеcolour="red"
снаружиaes
.2. Ошибка заключается в том, что вы пытаетесь отобразить
colour
внутриaes
дискретное значение, но вы уже сопоставили цвет с непрерывным значением в предыдущемgeom_line
вызове. Если вы переместите 3-йgeom_line
вызов выше остальных (так, чтобы он был первым), вы получите обратную ошибкуContinous value supplied to discrete scale
.3. Главы 3, 7 и 28 R for Data Science могут быть полезны для получения дополнительной информации о том, как работает ggplot.
Ответ №1:
Ошибка заключается в том, что вы передаете несуществующую переменную «red» в colour
эстетику. Эстетика — это, по сути, визуальные эффекты. Синтаксис для эстетики таков aes = variable
. Ошибка возникает из-за отсутствия переменной с именем «red» в вашем фрейме данных. colour = Diff_Touchpad0_Rx2_Tx2
работает, потому что у вас есть переменная, вызываемая Diff_Touchpad0_Rx2_Tx2
в ваших данных, и поэтому R автоматически назначает уровни цвета на основе значений этой переменной. Поскольку ваша характеристика red
является глобальной, ее следует выполнять за пределами aes
. Итак, следующий код должен выдать то, что вы ищете:
if(!require(tidyverse)) install.packages('tidyverse'); library(tidyverse)
if(!require(parsedate)) install.packages('parsedate'); library(parsedate)
X3500um_0to50_tx2rx1 <- data.frame(
Time = c(parse_iso_8601("2020-11-03T15:20:00"),
parse_iso_8601("2020-11-03T15:20:01")),
Diff_Touchpad0_Rx1_Tx2= c(2782, 27804),
Diff_Touchpad0_Rx2_Tx0= c(2782, 27804),
Diff_Touchpad0_Rx2_Tx1= c(2782, 27804),
Diff_Touchpad0_Rx2_Tx2= c(2782, 27804))
ggplot(X3500um_0to50_tx2rx1, aes(Time, Diff_Touchpad0_Rx1_Tx2))
geom_line(aes(colour = Diff_Touchpad0_Rx1_Tx2))
geom_line(aes(Time, Diff_Touchpad0_Rx2_Tx0))
geom_line(aes(Time, Diff_Touchpad0_Rx2_Tx1), colour = "red")
Я бы также рекомендовал чтения, предложенные @eipi10.