使用ggplot或情节

时间:2016-11-01 14:58:07

标签: r ggplot2

我想在x轴上用月绘制这个数据框。

      month  value1  value2  value3  value4
    1   Okt 19.5505 19.6145 19.5925 19.3710
    2   Nov 21.8750 21.7815 21.7995 20.5445
    3   Dez 25.4335 25.2230 25.2800 22.7500

    attach(Mappe1)
   month <- Mappe1$month
   value1 <- Mappe1$value1
   value2 <- Mappe1$value2
   value3 <- Mappe1$value3
   value4 <- Mappe1$value4

我尝试了不同的解决方案,但是使用这段代码,这几个月的情节正在逆转(Dez,Nov,Okt,Okt,Nov,Dez):

   plot(x=month, y=value1, type="l", col="red")
   lines(x=month, y=value2, type="l", col="seagreen")
   lines(x=month, y=value3, type="l", col="cyan")
   lines(x=month, y=value4, type="l", col="black", lwd=2)

使用ggplot2我收到一条错误消息:错误:输入无效:time_trans仅适用于POSIXct类的对象

   ggplot(Mappe1, aes(x=month, y=value1)) + geom_point() +
     scale_x_datetime(breaks = date_breaks("1 month"), labels = date_format("%B")) + 
     xlab("month") + ylab("values") 

我是R Studio的新手,非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

除非你告诉R你的因子水平是多少,否则它定义了自己的顺序。它很擅长猜测何时有一个固有的顺序,但这里的问题源于你的月份命名惯例不符合R的惯例,这是基于英语拼写。您可以将因子的命名更改为英语,在您提供的月份中将其更改为"Oct""Nov""Dec",或者更一般地,定义因素自己。

要做后者,假设数据框Mappe1

Mappe1$month <- factor(Mappe1$month, levels = c("Okt", "Nov", "Dez"))

按照适当的顺序添加到c()所有月份。

你也可以使用函数levels(),就像这样

levels(Mappe1$month) <- c("Okt", "Nov", "Dez")

答案 1 :(得分:1)

tidyverse方法 -

library(tidyverse)

data.raw = "month   value1  value2  value3  value4
Okt 19.5505 19.6145 19.5925 19.3710
Nov 21.8750 21.7815 21.7995 20.5445
Dez 25.4335 25.2230 25.2800 22.7500"

months <- tribble(
  ~month, ~result,
  "Okt", "Oct",
  "Nov", "Nov",
  "Dez", "Dec"
)

data = read_tsv(data.raw)

data %>%
  left_join(months) %>%
  mutate(month = as.Date(sprintf("2016-%s-01", result), "%Y-%b-%d")) %>%
  select(-result) %>%
  gather(series, value, -month) %>%
  ggplot(aes(month, value, colour = series)) +
  geom_line() +
  scale_x_date(date_breaks = "1 month", date_labels = "%B") + 
  xlab("month") + ylab("values") 
#> Joining, by = "month"

tidyverse

答案 2 :(得分:0)

非常感谢您的回答! 我这样试过:

    t = read.csv("Mappe1.csv", header = TRUE, sep=";", dec = ".", fill = TRUE, comment.char = "")

    t$m <- factor(t$m, levels = c("Okt", "Nov", "Dez"))

    library(Hmisc)

    xyplot(t$value1~t$m, type = "l", col = "red", ylab="values")
    lines(t$value2~t$m, type = "l", col = "cyan")
    lines(t$value3~t$m, type = "l", col = "purple")
    lines(t$value4~t$m, type = "l", col = "black", lwd = 2)
    legend("topleft", legend=c("value1", "value2", "value3", "value4"),
       col=c("red", "cyan", "purple", "black"), lty=1:1, cex=0.8)

这个例子非常好用。 但是当我以相同的方式尝试它但具有不同的值时,只有value1是plottet并且我总是得到以下错误:

    Error in plot.xy(xy.coords(x, y), type = type, ...) : 
      plot.new has not been called yet
    Error in strwidth(legend, units = "user", cex = cex, font = text.font) : 
      plot.new has not been called yet

我已经应用了plot.new()和dev.off()。但有时候我仍然会遇到这些错误,或者有时候R没有显示错误但根本没有错误。

这可能是什么问题?