Исправьте положение легенды Plotly и отключите панель Plotly для Shiny в RMarkdown - PullRequest
0 голосов
/ 14 февраля 2019

Я работаю над отчетом RMarkdown с элементами Shiny, использую ggplot2 и трансформирую его графики, используя ggplotly.В обычном отчете RMarkdown все работает отлично.ggplotly не позволяет поставить горизонтальную легенду внизу, но мне все же удалось это сделать, используя этот ответ .

Сюжет теперь выглядит великолепно

enter image description here

Код для этого графика

semiformal_savings_chart <- ggplot(semiformal_savings, aes(x = Country, y = 
Percent, fill = Category)) + 
geom_bar(stat = 'identity', width = 0.7) +      
theme_tufte() +
scale_fill_brewer(palette = "Paired") +
theme(axis.title.y = element_blank()) +
theme(axis.title.x = element_blank()) +
ylim(0, 80) + 
theme(legend.text = element_text(size = 12)) +
theme(axis.text.x = element_text(size = 12)) +
theme(axis.text.y = element_text(size = 12)) +
theme(plot.margin = margin(0.1, 0.1, 0.1, 0.1, "cm")) 

ggplotly(semiformal_savings_chart) %>% config(displayModeBar = F)  %>%
layout(legend = list(orientation = "h", x = 0.4, y = -0.2))

Когда я ставлюв формате Shiny я вынужден удалить последние две строки кода с помощью ggplotly, который отключает панель Plotly.Просто подключение к ggplot с pipe не работает, и я получаю сообщение об ошибке.

Ошибка: нет применимого метода для 'layout', примененного к объекту класса "c ('theme', 'gg')"

Реакционная способность работает отлично, но вShiny my, теперь у моего графика есть панель Plotly + легенда справа, что мне не нравится.

enter image description here

Код Shiny выглядит следующим образом

semiformal_savings_data <- reactive({
filter(semiformal_savings,
       Country %in% input$Country)

selectInput(inputId = "Country", label = "Please select a 
country/countries", choices = unique(semiformal_savings$Country), 
            selected = unique(semiformal_savings$Country), multiple = TRUE)
plotlyOutput("semiformalsavingsPlot")

output$semiformalsavingsPlot <- renderPlotly({
ggplot(semiformal_savings_data(), aes(x = Country, y = Percent, fill = 
Category)) + geom_bar(stat = 'identity', width = 0.7) +      
theme_tufte() +
scale_fill_brewer(palette = "Paired") +
theme(axis.title.y = element_blank()) +
theme(axis.title.x = element_blank()) +
ylim(0, 80) + 
theme(legend.text = element_text(size = 12)) +
theme(axis.text.x = element_text(size = 12)) +
theme(axis.text.y = element_text(size = 12)) +
theme(plot.margin = margin(0.1, 0.1, 0.1, 0.1, "cm")) 
})

Но эта часть сейчас отсутствует

%>% config(displayModeBar = F) %>% layout(legend = list(orientation = "h", 
x = 0.4, y = -0.2))

Как прикрепить эту функциональность к моему почти идеальному сюжету?

Спасибо!

1 Ответ

0 голосов
/ 20 февраля 2019

Решено лично

Изменения были незначительными, я все еще использовал ggplotly()

g1 <- ggplot(ownership_data(), aes(x = as.character(Year), y = Percent, fill = 
Category)) + 
geom_bar(stat = 'identity', position = 'stack') + facet_grid(~ Country) +
theme_tufte() +
ylim(0, 100) +
scale_fill_brewer(palette = "Paired") +
theme(axis.title.y = element_blank()) +
theme(axis.title.x = element_blank()) +
theme(legend.text = element_text(size = 13)) +
theme(axis.text.x = element_text(size = 12)) +
theme(axis.text.y = element_text(size = 13)) +
theme(strip.text.x = element_text(size = 12)) +
theme(legend.position = "bottom") +
theme(legend.title = element_blank()) 

return(ggplotly(g1, tooltip = c("y", "text")) %>% config(displayModeBar = F)  %>%
layout(legend = list(orientation = "h", x = 0.4, y = -0.2)))

enter image description here

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