【问题标题】:Problem creating multiple line plot on ggplot2在 ggplot2 上创建多线图的问题
【发布时间】:2020-02-12 04:50:54
【问题描述】:

我正在尝试创建一个显示同一列 (y) 中不同值的时间演变 (x) 的图,因此需要创建一个具有不同线条的图。 我能够为 y 的每个值创建单独的图,所以我的问题似乎特别是关于添加显示不同值的多条线(看起来不同的长度)。

这是我从数据集“test”中使用的“Date”和“Journal”列的输入:

> structure(list(Date = structure(c(9132, 9136, 9136, 9141, 9141, 
9142), class = "Date", tzone = "Europe/Paris"), Journal = c("Libération", 
"Libération", "Libération", "Libération", "Le Monde", "La Tribune (France)"
)), row.names = c(NA, -6L), .internal.selfref = <pointer: 0x000002146c471ef0>, class = c("data.table", 
"data.frame")) 

我使用以下代码成功创建了一个条形图,它根据“日期”列显示“期刊”列的演变。

dateplot <- ggplot(cleantest) + aes(x = format(Date, "%Y%")) + geom_bar()

我还设法为每个 Y 值创建了单线图,代码如下:

valueplot <- ggplot(subset(test, Journal %in% "value")) + aes(x = format(Date, "%Y")) + geom_line(stat = "count", na.rm = TRUE, group = 1)

因此,我键入以下代码以获取例如同一图中的两条线,它们每条都返回不同的错误:

jourplot <- ggplot(test, aes(x = format(Date, "%Y"))) + geom_line(aes(y = subset(test, Journal %in% "Libération"), colour = "blue")) + geom_line(aes(y = subset(test, Journal %in% "Le Figaro"), colour =
   "red"))

错误是:

> Don't know how to automatically pick scale for object of type data.table/data.frame. Defaulting to continuous.
Erreur : Aesthetics must be either length 1 or the same as the data (17307): y

所以我尝试了这个:

jourplot <- ggplot(test, aes(x = format(Date, "%Y")) + geom_line(aes(y = subset(test, Journal %in% "Libération"), colour = "blue"), stat = "count", na.rm = TRUE, group = 1) + geom_line(aes(y = subset(test, Journal %in% "Le Figaro"), colour = "red"), stat = "count", na.rm = TRUE, group = 1"))

但是这个甚至没有创建“jourplot”对象。 我的代码和/或我的数据显然有问题,但作为一个新手,我真的看不到它。它似乎与长度有关,但我该如何克服呢?或者这是关于使 ggplot 难以处理的列的类?

有人明白发生了什么吗?

编辑:我从提示符中删除了“+”符号

【问题讨论】:

  • 您能否修改一下哪些+ 是您实际输入的符号,哪些是命令提示符?删除那些是命令属性的。

标签: r ggplot2 plot


【解决方案1】:

这是您的完整数据集吗?在我看来,您的示例似乎太小而无法了解您要绘制的内容。

据我了解,您正在尝试绘制每年每本期刊的数量。但是您的示例仅涵盖了 1995 年的一些具有独特价值的期刊,所以我认为您不能用一个点来判断。

在这里,我模拟了一个数据框,其中包含为期五年的每周日期序列,并且我为每周随机属性,三个期刊之一。然后,我格式化了每年的日期序列,并将每年的计数绘制如下:

library(lubridate)
rep_df <- data.frame(Date = seq(ymd("1995-01-01"),ymd("2000-01-01"), by = "weeks"),
                     Journal = sample(c("Liberation","Le Monde","Le Figaro"), 261, replace = TRUE))
rep_df$Year <- floor_date(rep_df$Date, unit = "year")
head(rep_df)

        Date    Journal       Year
1 1995-01-01   Le Monde 1995-01-01
2 1995-01-08  Le Figaro 1995-01-01
3 1995-01-15 Liberation 1995-01-01
4 1995-01-22   Le Monde 1995-01-01
5 1995-01-29 Liberation 1995-01-01
6 1995-02-05 Liberation 1995-01-01
library(ggplot2)
ggplot(rep_df, aes(x = Year))+
  geom_point(aes(color = Journal), stat = "count")+
  geom_line(aes(color = Journal),stat = "count")+
  scale_x_date(date_labels = "%Y", date_breaks = "1 year", name = "")

它看起来像你想要得到的吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多