R: различные значения нескольких линий на оси Y на одном графике

Некоторое время назад я выполнил график, который содержал несколько строк с различным набором значений. Результатом было это изображение со значениями по оси Y в качестве значений разделов od: https://imgur.com/a/aLRUC Через некоторое время я использовал точно такой же код, но немного изменил некоторые значения в таблице и вывод это изображение с непрерывной осью Y: https://imgur.com/v6DLB09

В обоих случаях я использовал один и тот же код, но дважды получал разные результаты. Я хотел бы получить первый вывод, где ось Y показана в сечениях, чтобы лучше отображать отклонение значений по годам. Кто-нибудь может подсказать мне, как это сделать? Данные, которые я использую, представляют собой таблицу *.csv, которая имеет 6 столбцов со значениями, которые представляют процент использования земли в моей области исследования.

Sensor    Acquisition_time  Land   Sea   Lagoon River
Landsat_4 1992              72.79  19.05 7.56   0.60
Landsat_5 1984              72.96  19.17 7.02   0.85
Landsat_5 1988              72.82  19.41 7.09   0.68
Landsat_5 1996              73.46  19.27 6.71   0.56
Landsat_5 2000              72.72  19.23 7.43   0.62
Landsat_5 2004              72.48  19.05 7.78   0.69
Landsat_5 2008              72.67  19.14 7.49   0.70
Landsat_8 2013              72.66  19.10 7.49   0.75
Landsat_8 2016              72.81  19.03 7.38   0.78

И код, который я использовал:

table <- read.csv("results.csv", header=TRUE)
mtbl <- melt(table, id.vars="Acquisition_time", measure.vars = c("Land", "Sea", "Lagoon", "River"))

#draw a graph
ggplot(data=mtbl, aes(x= Acquisition_time, y=value, group=variable, colour=variable)) +
  geom_line() +
  geom_point( size=4, shape=21, fill="white") +
  scale_x_continuous(name="Years", breaks = mtbl$Acquisition_time)

Что я должен добавить, чтобы получить дискретные значения на оси Y, которые я автоматически получал раньше?

1 ответ

Решение

Это связано с вашей ценностью, являющейся фактором в первом примере, и непрерывным значением во втором примере. Вот воспроизводимый пример:

Acquisition_time <- c(1992,1984,1988,1996,2000,2004,2008,2013,2016)
Land <- c(72.79,72.96,72.82,73.46,72.72,72.48,72.67,72.66,72.81)
Sea <- c(19.05,19.17,19.41,19.27,19.23,19.05,19.14,19.10,19.03)
Lagoon <- c(7.56,7.02,7.09,6.71,7.43,7.78,7.49,7.49,7.38)
River <- c(0.60,0.85,0.68,0.56,0.62,0.69,0.70,0.75,0.78)

table <- data.frame(Acquisition_time, Land, Sea, Lagoon, River)

library(tidyr)
library(dplyr)
library(ggplot2)

mtbl <- table %>% gather(variable, value, -Acquisition_time)

mtblfac <- mtbl %>% mutate(value = factor(value))

# with value as numeric
ggplot(data=mtbl, aes(x= Acquisition_time, y=value, group=variable, colour=variable)) +
  geom_line() +
  geom_point( size=4, shape=21, fill="white") +
  scale_x_continuous(name="Years")

# with value as factor
ggplot(data=mtblfac, aes(x= Acquisition_time, y=value, group=variable, colour=variable)) +
  geom_line() +
  geom_point( size=4, shape=21, fill="white") +
  scale_x_continuous(name="Years")

Но я бы посоветовал вам использовать фасеты и непрерывное значение, как в следующем примере, поскольку вы сохраняете связь между значениями, не делая их категориальными. Но с scales="free" вариант, вы можете различать различия, так же, как ваш первый пример.

# with value as numeric and facets
ggplot(data=mtbl, aes(x= Acquisition_time, y=value, group=variable, colour=variable)) +
  geom_line() +
  geom_point( size=4, shape=21, fill="white") +
  scale_x_continuous(name="Years") +
  facet_grid(variable~., scales="free")

Другие вопросы по тегам