在我的应用中,我希望用户能够生成条形图,只选择他们想要使用的行。我使用矩阵完成了这个,但是当我尝试为图表着色时它不起作用。
以下是可上传的示例文件:
Name Score
Bob 4
Fred 1
Gary 2
Mary 5
Pete 7
在下面的简化示例中,我使用inFile()[["Score"]]
绘制高度为"得分"的所有行。我可以很好地为条纹着色。但是当使用as.matrix(t(inFile()[c(1:5), "Score"]))
时,所有条形都是相同的颜色。
当用户在基础R 中指定行和列时,我是否可以绘制不同颜色的条形图(项目显示不同包中的不同图,对于此图我只想显示基础R)
完整示例:
server.r
library(shiny)
shinyServer(function(input, output) {
inFile = reactive({ return (read.csv(file.choose(), header = TRUE))})
output$plot = renderPlot({
barplot(
#inFile()[["Score"]], #Colours correctly
as.matrix(t(inFile()[c(1:5), "Score"])), #Only 1 colour
col = as.matrix(rainbow(5)))
})
})
ui.R
shinyUI(pageWithSidebar(
headerPanel("Bar Plots"),
sidebarPanel(
),
mainPanel(
plotOutput("plot")
)
))
很抱歉,如果之前已经回答过,搜索时我只能找到推荐使用ggplot的人,但这不适合这个项目。提前谢谢。
答案 0 :(得分:0)
至于绘图,这应该有效:
barplot(
inFile()$Score[1:5],
col = rainbow(5))
我不确定为什么要将数据用作矩阵,但同时删除as.matrix(inFile())和as.matrix(rainbow(5))。 col参数至少需要是一个向量。此外,在我看来,使用美元符号来提取“得分”列更清晰。
对于来自用户部分的输入,可能在renderPlot中:
file=inFile()[,input$nameofcolumn]
min=as.numeric(input$minrowvalue)
max=as.numeric(input$maxrowvalue)
barplot(
file[min:max],
col = rainbow(5))
希望这有帮助!