【问题标题】:Change labels in R shiny/ggvis plot更改 R 闪亮/ggvis 图中的标签
【发布时间】:2015-11-19 10:16:52
【问题描述】:

我需要在 shiny 中使用 ggvislabels= 轴功能。

在 R 中,labels 轴参数允许更改 x 标签(添加 Kb 格式),以保持项目之间的顺序和相对距离:

mtcars <- mtcars[1:10, ]
my_data <- mtcars[order(mtcars$disp),]
xpos <- sort(mtcars$disp)
plot(my_data$disp, my_data$mpg, type = "l", xaxt="n")
axis(1, at=xpos, labels=sprintf("%.2fKb", xpos/10))

这样我们就得到了我们需要的东西:

现在我们尝试使用 ggvis 在闪亮上获得完全相同的效果:

library(shiny)
library(ggvis)
mtcars
ui <- pageWithSidebar( div(),
                       sidebarPanel(uiOutput("plot_ui"),width=2),
                                    mainPanel(ggvisOutput("plot"))
)

server <- function(input, output, session) {
    mtc <- reactive({
        my_data <- mtcars[1:10, ]
        # Do some sorting/ordering if you want (here sorted by disp)
        my_data <- my_data[order(my_data$disp), ]
        my_labels <- c(as.character(paste0((my_data$disp)/1000, "Kb")))
        y <- my_data$mpg
        x <- factor(c(my_data$disp), labels = c(unique(my_labels)))
        data.frame(x = x, y = y)
    })

   mtc %>%
   ggvis(~x,~y ) %>%
   layer_lines() %>%
   add_axis("x", properties=axis_props(labels=list(fontSize = 10))) %>%
   bind_shiny("plot", "plot_ui")
}

shinyApp(ui = ui, server = server)

当我们用红色突出显示时,距离不正确。那么我们如何才能在具有 axis(label=... 的普通 R 上拥有相同的情节?

【问题讨论】:

  • 为什么在观察者中使用 ggvis 而不是 plot?这个问题与 ggvis 中的轴有关吗?
  • 是的,这可能是一个 ggvis 轴问题,我更新了标签

标签: r shiny ggvis


【解决方案1】:

好的,我摆弄了它,您必须先将您的 x 轴转换为 factor。我已经为dataframe 添加了一些排序,因为您可能希望这些也按顺序排列(否则您可以轻松地将其删除)。您可以自己在轴上放置标签。如果您有任何问题,请告诉我。我还更改了 x 轴上的数据以显示 mtcars$disp,因为它的值在 100 秒内

rm(list = ls())
library(shiny)
library(ggvis)
mtcars
ui <- pageWithSidebar(
  div(),
  sidebarPanel(
    sliderInput("n", "Number of points", min = 1, max = nrow(mtcars),value = 10, step = 1),
    uiOutput("plot_ui"),width=2),
  mainPanel(ggvisOutput("plot"))
)

server <- function(input, output, session) {
  mtc <- reactive({ 
    my_data <- mtcars[1:input$n, ] 
    # Do some sorting/ordering if you want (here sorted by disp)
    my_data <- my_data[order(my_data$disp),]
    my_labels <- c(as.character(paste0((my_data$disp)/1000,"Kb")))
    y <- my_data$mpg
    x <- factor(c(my_data$disp), labels=c(unique(my_labels)))
    data.frame(x = x, y = y)
  })

  mtc %>%
    ggvis(~x,~y ) %>%
    layer_lines() %>%
    add_axis("x", properties=axis_props(labels=list(fontSize = 10))) %>%
    bind_shiny("plot", "plot_ui")
}

shinyApp(ui = ui, server = server)

更新输出

【讨论】:

  • 11.20Kb 13.75Kb 8.20Kb 17.15Kb 19.40Kb 19.60Kb 20.70Kb 16.90Kb 16.50Kb
  • 这是我们一开始尝试的,但没有保留数字顺序。例如,如果您将 my_data &lt;- mtcars[1:input$n, ] 替换为 my_data &lt;- mtcars[1:input$n, ] * 10 - 15 X 轴将按此顺序 11.20Kb 13.75Kb 8.20Kb 17.15Kb 19.40Kb 19.60Kb 20.70Kb 16.90Kb 16.50Kb
  • 这个我一点都不清楚,你为什么要把你的日期乘以 10 再减去 15?
  • 是为了说明 wt 数据值c(89, 99, 100, 200, 324) 在转换后具有混合顺序,例如:c(100k, 200k, 324k, 89k, 99k)
  • 我编辑了我的原始问题以添加我们错误的图像,对您的服务器功能的唯一修改是my_data &lt;- mtcars[1:input$n, ] * 10 - 15
猜你喜欢
  • 1970-01-01
  • 2016-02-22
  • 2016-10-11
  • 2017-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-08
  • 2015-06-23
相关资源
最近更新 更多