Используя 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()
})