首页 > 解决方案 > 如何将纯色应用于ggplot线

问题描述

我正在寻找一种使用 ggplot2 打印不同颜色的不同线条的方法。我不知道为什么当我用变量作为颜色打印图表时它会起作用,但是当我在我的东方伦理中设置纯色时,我得到一个错误

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))

标签: rggplot2

解决方案


错误是因为您将一个不存在的变量“红色”传递给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 建议的读数。


推荐阅读