ggplotly не предоставляет интерактивную популяционную пирамиду - PullRequest
0 голосов
/ 21 декабря 2018

Используя ggplot, я мог бы создать популяционную пирамиду в рамках Shiny, которая отлично работает.Я пытался сделать его более привлекательным, используя ggplotly, но не смог получить надлежащих результатов.Вот успешные коды.

pyramidPlot <- reactive ({
ggplot (pyramid(), aes(x = Age_Group, y = Percentage, fill = Sex, 
 label=Percentage)) +
  geom_bar(subset = .(Sex == "Females"), stat = "identity") +
  geom_bar(subset = .(Sex == "Males"), stat = "identity") + 
  coord_flip() +
  labs(
    x = "Age Groups",
    y = "Population Size (%)",
    caption = (""),
    face = "bold.italic"
  ) +
  scale_fill_brewer(palette = "Set1") +
  theme_bw() +
  scale_y_continuous(labels=abs_comma <- function (x, ...) {
    format(abs(x), ..., big.mark = ",", scientific = FALSE, trim = 
 TRUE)
  })+
  theme(plot.title = element_text(
    hjust = 0.5,
    size = 15,
    colour = "Black",
    face = "bold.italic"
  ),axis.text=(blue.bold.italic.10.text), 
    axis.title=blue.bold.italic.14.text)+
  ggtitle(paste(
    "Population Pyramid for",
    input$county,
    "in",
    input$years
  ))
  })
 output$pyramid <- renderPlot ({
  pyramidPlot()
   })

Вот неудачные коды. Я слегка изменил вышеуказанные коды, пытаясь задействовать ggplotly.Я получаю сообщение об ошибке "У объектов 'bar' нет этих атрибутов: 'mode'".Я ожидаю пирамиду населения, которая в интерактивном режиме показывает процент и соответствующий пол на столбцах.

pyramidPlot <- reactive ({
g<- ggplot(pyramid(), aes(x = Age_Group, y = Percentage, fill = Sex, 
 label=Percentage)) +
  geom_bar(subset = .(Sex == "Females"), stat = "identity") +
  geom_bar(subset = .(Sex == "Males"), stat = "identity") + 
  coord_flip() +
  labs(
    x = "Age Groups",
    y = "Population Size (%)",
    caption = (""),
    face = "bold.italic"
  ) +
  #  geom_text(aes(y = Percentage + 1 * sign(Percentage), label = 
  Percentage2), 
        #    position = position_dodge(width = 0), hjust=0,vjust=0 
  ,size =5, colour = "Black",
          #  face = "bold.italic"
           # )+

  scale_fill_brewer(palette = "Set1") +
  theme_bw() +
  scale_y_continuous(labels=abs_comma <- function (x, ...) {
    format(abs(x), ..., big.mark = ",", scientific = FALSE, trim = 
   TRUE)
  })+
 # annotate("text", x = 4.3, y = -100, label = "Women", fontfacet = 
  "bold") + 
 # annotate("text", x = 4.3, y = -200, label = "Men", fontfacet = 
   "bold") +
  theme(plot.title = element_text(
    hjust = 0.5,
    size = 15,
    colour = "Black",
    face = "bold.italic"
  ),axis.text=(blue.bold.italic.10.text), 
  axis.title=blue.bold.italic.14.text)+
  ggtitle(paste(
    "Population Pyramid for",
    input$county,
    "in",
    input$years
  ))
   ggplotly(g)
   })
   output$pyramid <- renderPlot ({
    pyramidPlot()
   })
...