Как масштабировать переменные с широкими диапазонами и отображать их на одном графике в ggplot - PullRequest
0 голосов
/ 19 октября 2018

Я создал следующий фрейм данных

 # Create a dataframe

  Column1 <- c(1:30)
  Column1 <- paste0('Month_', as.character(Column1))
  paste0('Column', as.character(Column1))
  Variable <- c("A", "B", "C", "D", 'E')
  DF <- data.frame(Column1, Variable)
  DF$value <- 0
  DF$value[DF$Variable == "A"] <- runif(length(DF$value[DF$Variable == "A"]), 
      min = 10000, max = 50000)
  DF$value[DF$Variable == "B"] <- runif(length(DF$value[DF$Variable == "A"]), 
      min = 100, max = 500)
  DF$value[DF$Variable=="C"] <- runif(length(DF$value[DF$Variable=="A"]),
      min = 100, max = 500)
  DF$value[DF$Variabl e== "D"] <- runif(length(DF$value[DF$Variable == "A"]), 
      min = 100, max = 500)
  DF$value[DF$Variable == "E"] <- runif(length(DF$value[DF$Variable=="A"]),
      min = 100, max = 500)

Затем я импортировал библиотеки для создания графика

  # We  now import the libraries

   library(readxl)
   require(plotly)
   require(reshape2)
   require(ggplot2)
   require(janitor)

   # We now create a chart

   p1 <- ggplot(data = DF, aes(x = Column1, y = value, colour = 
       Variable)) +
   geom_bar(data = DF[DF$Variable == "A",], aes(x = Column1, y = value,
       fill=Variable), stat = 'identity') + 
   scale_y_continuous("New", sec.axis = sec_axis(~./10, name = "Value"), 
       position = "left") +
   geom_line(data = DF[DF$Variable!="A",], aes(x = Column1, y = value, 
      fill = Variable))
   p1

Код работает без ошибок.Однако я не могу визуализировать линейный график, созданный рядом с гистограммой на том же графике.Я попытался настроить масштаб, но не могу заставить его работать.Могу ли я запросить некоторые указания.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Вы почти у цели, просто измените аргумент заполнения на группу.

ggplot(data = DF, aes(x = Column1, y = value, colour = 
                        Variable)) +
  geom_bar(data = DF[DF$Variable == "A",], aes(x = Column1, y = value,
                                               fill=Variable), stat = 'identity') + 
  scale_y_continuous("New", sec.axis = sec_axis(~./10, name = "Value"), 
                     position = "left") +
  geom_line(data = DF[DF$Variable!="A",], aes(x = Column1, y = value, group = Variable))

Хотя я не могу сказать, что на это очень красиво смотреть ...

(messy plot)

0 голосов
/ 19 октября 2018

Что-то вроде следующего может сделать то, что вы хотите.

Прежде всего, я переделаю набор данных, на этот раз установив начальное значение ГСЧ.

set.seed(4821)    # Make the code reproducible

Column1 <- paste0('Month_', 1:30)
Variable <- c("A", "B", "C", "D", 'E')
DF <- data.frame(Column1, Variable)
nA <- sum(DF$Variable == "A")
DF$value <- 0
DF$value[DF$Variable == "A"] <- runif(nA, min = 10000, max = 50000)
DF$value[DF$Variable == "B"] <- runif(nA, min = 100, max = 500)
DF$value[DF$Variable == "C"] <- runif(nA, min = 100, max = 500)
DF$value[DF$Variable == "D"] <- runif(nA, min = 100, max = 500)
DF$value[DF$Variable == "E"] <- runif(nA, min = 100, max = 500)

Теперь график.Обратите внимание, что я изменил масштаб вспомогательной оси y с 10 на 100.

library(ggplot2)

DFA <- subset(DF, Variable == "A")
DFX <- subset(DF, Variable != "A")

scale_y <- 100

p1 <- ggplot(DF) +
  geom_bar(data = DFA, aes(x = as.integer(sub("Month_", "", Column1)), y = value, fill = Variable), stat = 'identity') +
  geom_line(data = DFX, aes(x = as.integer(sub("Month_", "", Column1)), y = scale_y*value, colour = Variable)) +
  scale_y_continuous("New", sec.axis = sec_axis(~./scale_y, name = "Value"), position = "left") +
  scale_x_discrete("Column1", labels = as.integer(sub("Month_", "", Column1)))
p1

enter image description here

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