我在一个有太多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
如果有人知道跳过标签的更好解决方案,那也会很棒。非常感谢。