我在闪亮的应用程序中包含以下代码,以使用户可以选择他们想在绘图上使用的点形。
selectInput("pch", "Point shape",c("15","16","17","18"),selectize = TRUE,multiple=F)
出于美学原因(也是出于实际原因),我想拥有4个绘图字符的4张图像,而不只是数字15、16、17、18。
同样,在此示例中,
selectInput("col", "Colour",colours(),selectize = TRUE,multiple=F)
除了使用颜色的文本名称之外,我还想使用颜色的图像或颜色选择器。
我的想法如下:
谢谢
这是一个工作示例。目的是在下拉菜单中向用户显示调色板中的颜色(而不只是调色板名称)。此处下拉列表中的图像是在运行时创建的。这可能是理想的,也可能不是理想的。如果下拉菜单中的图像永不更改(即静态),请参见SeGa的答案。
这是从此处显示的示例修改而来的。
ui.R
文件
## UI.R
fluidPage(
title='Plots in Selectize Input',
tags$h2('Plots in Selectize Input'),
fluidRow(
column(4,
selectizeInput('palette',label="Palette",choices=NULL,options=list(
placeholder='Select a colour palette',maxOptions=4)
)),
column(8,
plotOutput('plot')
)
)
)
server.R
文件
## SERVER.R
library(ggplot2)
data(diamonds)
len <- length(levels(diamonds$cut))
clist <- list("rainbow"=rainbow(len),"topo"=topo.colors(len),
"terrain"=terrain.colors(len),"cm"=cm.colors(len))
function(input,output,session) {
paletteurl <- session$registerDataObj(
name='uniquename1',
data=clist,
filter=function(data,req) {
query <- parseQueryString(req$QUERY_STRING)
palette <- query$palette
cols <- clist[[palette]]
image <- tempfile()
tryCatch({
png(image,width=100,height=50,bg='transparent')
par(mar=c(0,0,0,0))
barplot(rep(1,length(cols)),col=cols,axes=F)
},finally = dev.off())
shiny:::httpResponse(
200,'image/png',readBin(image,'raw',file.info(image)[,'size'])
)
}
)
updateSelectizeInput(
session,'palette',server=TRUE,
choices=names(clist),
selected=1,
options=list(render=I(sprintf(
"{
option: function(item, escape) {
return '<div><img width=\"100\" height=\"50\" ' +
'src=\"%s&palette=' + escape(item.value) + '\" />' +
escape(item.value) + '</div>';
}
}",
paletteurl
)))
)
output$plot <- renderPlot({
shiny::req(input$palette)
cols <- clist[[input$palette]]
ggplot(diamonds,aes(x=carat,y=price,colour=cut))+
geom_point()+
scale_colour_manual(values=cols)+
theme_minimal(base_size=18)
})
}
如果有人对此有更好的了解,欢迎您改进/更新此答案。甚至添加另一个答案以显示不同的用法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句