带有太多标签的ggvis图:如何只显示每个第n个标签?

时间:2015-04-02 14:59:53

标签: r shiny ggvis

我在一个有太多x轴标签的Shiny应用程序中有一个ggvis图(见http://i.stack.imgur.com/lLppD.png)。

在我的ggplot实现中,我调用了一个函数mylabels,它会跳过大多数标签,只显示每个第n个标签:

scale_x_discrete(labels=mylabels)

其中

mylabels <- function(x) {
      y = c()
      marks = seq(1, length(x), 7)
      for (j in 1:length(x)) {
        if (j %in% marks) {
          y[j] = x[j]
        }
        else {
          y[j] = ""
        }
      }
      return (y)
    }  

这在ggplot中运作良好。我试图在ggvis中实现相同的解决方案,但没有成功。这是我的Shiny和ggvis代码:

plotdata <- reactive({
  this_dataset <- input$dataset
  all = read.csv(paste(this_dataset, ".csv",sep=""), header = T)
  filtered = all[all$year == input$YearSelect,]
  return(filtered)
})

plotdata %>% ggvis(~factor(Var1), ~nums) %>%  
  layer_bars(fill := ~color) %>% 
  add_axis("x", values=mylabels) %>%
  bind_shiny("yearPlot")

当我打电话

values=mylabels

该功能似乎根本没有被调用,我得到了默认标签。

如果我写

,函数似乎被调用
values=mylabels()

但后来我不知道如何将默认标签作为参数传递给函数。

我试过

values=mylabels(plotdata$Var1)

然后我得到了

Error in plotdata$Var1 : object of type 'closure' is not subsettable

如果有人知道跳过标签的更好解决方案,那也会很棒。非常感谢。

0 个答案:

没有答案