Как сделать отдельную легенду в ggplot
Я хочу построить график одного рассеяния, показывающий другой цвет для осадков за два месяца станции. например, значение осадков на станции A Jan в красном, желтый - на феврале, и станции B январь - количество осадков в синем, февраль в зеленом и т. д., которое указано в легенде. Кроме того, я хочу включить плавную линию для данных обеих станций, которые также отображаются в легенде, например, красная плавная линия для станции A и синяя для станции B. В этой ссылке вы можете найти данные CSV обеих станций: https://drive.google.com/file/d/0B3fQ9_46L-O0TjJwYmF6UThNSGs/view?usp=sharing https://drive.google.com/file/d/0B3fQ9_46L-O0ZXVYb3lzZDBZaHM/view?usp=sharing
Ниже приведен код, который я пробовал, но не смог.
#reading csv file of ramoili station of rautahat[Scatterplot of two stations][1]
ram = read.csv('preci_ramoili.csv',header=TRUE, stringsAsFactors=FALSE)
#reading CSV file of gaur station of rautahat
gaur= read.csv('preci_Gaur.csv',header=TRUE, stringsAsFactors=FALSE)
#gaur rainfall
rain <- data.frame(index(agg),stack(as.data.frame(coredata(agg))))
rain
head(rain)
tail(rain)
names(rain)[1] <- "Year"
names(rain)[2] <- "Rainfall"
names(rain)[3] <- "Month"
#ramoili rainfall
rain1<-data.frame(index(core),stack(as.data.frame(coredata(core))))
rain1
head(rain1)
names(rain1)[1] <- "Year"
names(rain1)[2] <- "Rainfall"
names(rain1)[3] <- "Month"
head(rain1)
#ramoili premonsoon rainfall
rain1_pre<-data.frame(index(core[,3:5]),stack(as.data.frame(coredata(core[,3:5]))))
head(rain_pre)
tail(rain1_pre)
names(rain1_pre)[1] <- "Year"
names(rain1_pre)[2] <- "Rainfall"
names(rain1_pre)[3] <- "Month"
#ggplot of two stations gaur and ramoili yearly rainfall of rautahat in same plot
p9 <- ggplot(rain, aes(x =Year, y=Rainfall, size=Rainfall)) + geom_point(shape = 21,color = "#000000", fill = "#40b8d0") +
geom_smooth(aes(fill="Gaur"), colour="darkblue", size=1)
p10 <- p9 + geom_point(data=rain1, aes(x =Year, y=Rainfall, color=Month )) +
geom_smooth(data=rain1, aes(fill="Ramoili"), colour="red", size=1)+
ggtitle(" Yearly rainfall at two stations of Rautahat")+
scale_fill_manual(name="Stations", values=c("blue", "red"))
print(p10)
1 ответ
В отсутствие полных данных примера и использования предоставленных вами образцов данных я проиллюстрировал подход.
Я не уверен, почему вам нужны разные месячные цвета для каждой станции, и я думаю, что эта разница будет лучше проиллюстрирована с помощью фасетов. Если нет, я бы по-прежнему рекомендовал, чтобы цвета месяца были согласованными, и удалил сетку фасетов.
Вам нужно будет изменить оси, заголовки, шкалы и т. Д. В соответствии с вашими предпочтениями.
library(dplyr)
library(ggplot2)
library(purrr)
library(tidyr)
library(trend)
gaur <- list.files("~/Desktop", pattern = "Gaur", full.names = TRUE) %>%
read.csv() %>%
mutate(station = "Gaur")
ramoili <- list.files("~/Desktop", pattern = "ramoili", full.names = TRUE) %>%
read.csv() %>%
mutate(station = "Ramoli")
plot_data <- bind_rows(gaur, ramoili) %>%
gather(month, rainfall, -Year, -station)
ggplot(plot_data, aes(x = Year, y = rainfall)) +
geom_line(aes(color = month)) +
geom_point(aes(color = month), show.legend = FALSE) +
geom_smooth(aes(fill = station), size = 0.1) +
scale_x_continuous(breaks = scales::pretty_breaks()) +
scale_fill_manual(name = "Stations", values = c("blue", "red")) +
facet_grid(month ~ station) +
theme_minimal()
И для моделей:
models <- bind_rows(gaur, ramoili) %>%
select(-Year) %>%
nest(-station) %>%
mutate(ts_data = map(data, ~ts(.x, frequency = 1, start = c(1984,1)))) %>%
mutate(mk_model = map(ts_data, mk.test),
sens_slope = map(ts_data, sens.slope))
> models$mk_model[1]
[[1]]
Mann-Kendall Test
two-sided homogeinity test
H0: S = 0 (no trend)
HA: S != 0 (monotonic trend)
Statistics for total series
S varS Z tau pvalue
1 -1637 39765.67 -8.2 -0.275 2.2289e-16
> models$sens_slope[1]
[[1]]
Sen's slope and intercept
slope: 0
95 percent confidence intervall for slope
0 0
intercept: 14.9
nr. of observations: 384