R barplot颜色不适用于矩阵

时间:2015-08-14 10:11:30

标签: r shiny

在我的应用中,我希望用户能够生成条形图,只选择他们想要使用的行。我使用矩阵完成了这个,但是当我尝试为图表着色时它不起作用。

以下是可上传的示例文件:

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的人,但这不适合这个项目。提前谢谢。

1 个答案:

答案 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))

希望这有帮助!