ggplot2 не отображает значения оси Y - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь получить значения, показывающие ось Y, но кажется, что я не могу понять проблему, вот мой код и результаты графика, кроме данных:

library(ggplot2)

traffic.data <- structure(list(years = 2008:2017, units = structure(c(1L, 2L, 4L, 5L, 3L, 6L, 7L, 8L, 9L, 10L), .Label = c("12,866,461", "13,350,011", "15,106,666", "15,361,841", "15,669,918", "16,498,204", "17,296,885", "17,611,762", "18,239,288", "20,359,883"), class = "factor")), .Names = c("years", "units"), class = "data.frame", row.names = c(NA, -10L))

traffic.data
       years     units
#  1   2008 12,866,461
#  2   2009 13,350,011
#  3   2010 15,361,841
#  4   2011 15,669,918
#  5   2012 15,106,666
#  6   2013 16,498,204
#  7   2014 17,296,885
#  8   2015 17,611,762
#  9   2016 18,239,288
# 10  2017  20,359,883

ggplot(traffic.data, aes(x = years, y = as.numeric(units))) + 
   geom_point() +
   geom_line() +
   scale_x_continuous(breaks = seq(2008, 2017, 1)) + 
   scale_y_continuous(breaks = seq(10000000,30000000,1)) +
   labs(x = "years", y = "total traffic of passengers", 
        title = "evolution of traffic during the past 10 years")

Когда я запускаю этот код, я получаю следующую линейную диаграмму, пропускающую значения оси Y: the R plot results

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Dataset

# example dataset
df = structure(list(years = 2008:2017, 
                    units = structure(c(1L, 2L, 4L, 5L, 3L, 6L, 7L, 8L, 9L, 10L), .Label = c("12,866,461", "13,350,011", "15,106,666", "15,361,841", "15,669,918", "16,498,204", "17,296,885", "17,611,762", "18,239,288", "20,359,883"), class = "factor")), 
              .Names = c("years", "units"), class = "data.frame", row.names = c(NA, -10L))

Проблема

Ваш столбец units равен factor, и его обновление в число довольно сложно. Проверьте это:

as.numeric(df$units)
# [1]  1  2  4  5  3  6  7  8  9 10

Это значения, которые вы выводите на ось Y. Вот почему расстояние между вашими точками кажется одинаковым, независимо от того, каковы действительные числа, и именно поэтому эти значения не отображаются на оси y, потому что вы указываете scale_y_continuous(breaks = seq(10000000,30000000,1)) (то есть, чтобы начать с 3mil.).

Решение

# update column
df$units = as.numeric(gsub(",", "", as.character(df$units), fixed = TRUE))

library(ggplot2)

ggplot(df, aes(x=years, y=units)) +
  geom_point() +
  geom_line() + 
  scale_x_continuous(breaks = seq(2008,2017,1))+ 
  scale_y_continuous(breaks = seq(10000000,30000000,1000000)) +
  labs(x = "years", y = "total traffic of passengers", title = "evolution of traffic during the past 10 years")

enter image description here

Обратите внимание, что я изменил шаг / расстояние между значениями вашей оси y на 1 мил. Шаг = 1 замедлит процесс и нечитаемый сюжет.

Вы можете использовать options(scipen = 999) перед построением графика, чтобы избежать научного обозначения чисел.

0 голосов
/ 29 августа 2018

Задача 1:

scale_y_continuous(breaks = seq(10000000,30000000,1))

Итак, вы пытаетесь увеличить с 10М до 30М на 1.

Задача 2:

  +   labs(x = "years", y = "total traffic of passengers", 
    +        title = "evolution of traffic during the past 10 years")

в этой строке ваш второй + не нужен, и это создает проблему.


по этим данным у меня хорошо работает

dt<-data.frame(years=c(2008:2018),
               units=sample(c(15000000:20000000),11,replace = T))
dt

и этот код:

       ggplot(dt, aes(x=years, y=units))+
   geom_point(data=NULL)+
   geom_line(data=NULL) + 
   scale_y_continuous(breaks = seq(10000000,30000000,1000000)) + 
   labs(x = "years", y = "total traffic of passengers",
        title = "evolution of traffic during the past 10 years")

Вот результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...