我想在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的新手,非常感谢任何帮助!
答案 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"
答案 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没有显示错误但根本没有错误。
这可能是什么问题?