#r #shiny #shinydashboard #shiny-server #shiny-reactivity
#r #блестящий #shinydashboard #shiny-сервер #shiny-реактивность
Вопрос:
Я пытаюсь создать каталог книг, и мне нужна помощь в рендеринге изображения на shiny в ячейке таблицы.Код, который я использую, приведен ниже, и результат, который я получаю из кода в приложении shiny, представляет собой таблицу со столбцом «изображение», но содержит ссылку на изображение в своей ячейке вместо изображения.Как я могу это исправить?Пожалуйста, помогите мне URL в наборе данных в этом формате: https://images.gr-assets.com/books/1447303603s/2767052.jpg
Данные выглядят так
title authors ratings_count average_rating image_url
HP JK 10 4 https://images.gr-assets.com/books/1447303603s/2767052.jpg
ui <- fluidPage(
####Heading##
titlePanel(div(HTML("<b> Interested In books? </b>"))),
###Creating tabs###
tabsetPanel(
####First tab for crime####
tabPanel(" Book Directory ",
sidebarLayout(
sidebarPanel(
#First Input##
selectizeInput(inputId = "Book",
label = " Choose a Book",
choices = book_names)),
##Output
mainPanel = (tableOutput("View")
)
)
)
)
)
###Server app
server <- function(input, output) {
output$View <- renderTable({
books1 <- books[books$title%in% input$Book,]
books1 %>%
mutate(image = paste0('<img src="', image_url, '"></img>')) %>%
select(image,title,authors,average_rating,ratings_count)
})
}
shinyApp(ui = ui, server = server)
Ответ №1:
Я делал что-то подобное раньше с пакетом tableHTML, на самом деле вы также можете добавить все виды форматирования в свою таблицу с его помощью, попробуйте это, например:
Библиотеки и образцы данных
library(tableHTML)
library(shiny)
library(dplyr)
books <- read.table(text = "title authors ratings_count average_rating image_url
HP JK 10 4 https://images.gr-assets.com/books/1447303603s/2767052.jpg", header=TRUE)
books_names <- unique(books$title)
Пользовательский интерфейс (тот же пользовательский интерфейс):
ui <- fluidPage(
titlePanel(div(HTML("<b> Interested In books? </b>"))),
tabsetPanel(
tabPanel(" Book Directory ",
sidebarLayout(
sidebarPanel(
selectizeInput(inputId = "Book",
label = " Choose a Book",
choices = books_names)),
mainPanel = (tableOutput("View"))
)
)
)
)
Сервер:
server <- function(input, output) {
output$View <- render_tableHTML({
books[books$title%in% input$Book,] %>%
mutate(image = paste0('<img src="', image_url, '"></img>')) %>%
select(image,title,authors,average_rating,ratings_count) %>%
tableHTML(escape = FALSE,
rownames = FALSE,
widths = c(40, 40, 65, 120, 120)) %>%
# align the text like this
add_css_table(css = list('text-align', 'center'))
# you can also add a theme
# add_theme('scientific')
})
}
Запустить приложение:
shinyApp(ui = ui, server = server)
вы можете отформатировать свою таблицу любым удобным для вас способом с add_css_...
помощью семейства функций, например add_css_table(css = list('text-align', 'center'))
, выравнивает текст по центру по всей таблице.
Взгляните на виньетки пакета, чтобы увидеть другие функции, предлагаемые пакетом
Комментарии:
1. Я попробовал это, и это работает. Но мой вывод таблицы не выравнивается. Например, содержимое ячеек в таблице полностью выровнено по левому краю. Как мне это исправить?
2. > Спасибо за ваш ответ. Однако это выравнивает мой текст, но не заголовок таблицы. Что я должен добавить, чтобы выровнять имена столбцов (по центру)? Также как мне увеличить размер шрифта отображаемых полей в ячейке? Пожалуйста, предложите, что можно было бы сделать
3. вы также можете просто добавить css для заголовка, попробуйте добавить
%>% add_css_header(css = list(c('text-align', 'font-size'), c('center', '15px')), headers = 1:ncol(books))
, и я действительно рекомендую вам взглянуть на примеры и документацию пакета4. Это идеально. Я посмотрю документацию. Спасибо
5. Рад помочь! если мое решение решило вашу проблему, пожалуйста, примите его как ответ.