【发布时间】:2018-08-01 12:30:38
【问题描述】:
我已经尝试了How to display only integer values on an axis using ggplot2 中推荐的所有解决方案。不幸的是,我无法解决其中任何一个问题。
我创建了一个 Shiny 应用程序,它可以生成关于各种变量的年度数据的折线图。这适用于大多数参数化:
没有非整数分隔符
但是,如果我在滑块上选择特定的时间跨度,它会生成在 x 轴上具有非整数中断的图表,这对于年度数据没有意义。
有非整数分号
编辑:这里是应用程序的最小可复制版本
library(tidyverse)
library(shiny)
options(scipen = 999)
# Data
data1<-data.frame(values = c(15500, 16300, 18200, 28300, 23500, 23700,
31500, 35800, 34700, 36900, 40000, 44700,
53300, 55800, 69800, 89500, 1.13E+5,
1.53E+5, 1.77E+5, 1.83E+5, 1.99E+5),
year = seq(1990, 2010, 1))
#Shiny app
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
sliderInput("period", "Year:", min = 1990, max = 2010, value = c(1990, 2010), sep = "")),
mainPanel(plotOutput("ggplot2"))))
server <- function(input, output) {
data1_subset <- reactive({
filter(data1, year >= input$period[1] & year <= input$period[2])
})
output$ggplot2 <- renderPlot({
ggplot(data = data1_subset(), aes(x = year, y = values)) +
geom_line(aes(color = "red")) +
scale_x_continuous(name = "Year") +
scale_color_discrete(guide=FALSE)+
theme_minimal()
})
}
shinyApp(ui = ui, server = server)
要查看问题,请选择例如时间跨度2000-2010
有什么方法可以抑制非整数中断,因为年度数据显然是无意义的?
非常感谢您的帮助!
【问题讨论】:
-
1) 这可能只是一个
ggplot2问题,因此shiny部分可能无关紧要。 2)为什么该链接问题中的所有答案都不起作用?请准确显示您尝试过的内容。将breaks = function(x) unique(floor(pretty(seq(0, (max(x) + 1) * 1.1))))添加到您的scale_x_continuous应该可以工作... -
非常感谢您的回答。如果我只是按照您的建议将
breaks = function(x) unique(floor(pretty(seq(0, (max(x) + 1) * 1.1))))添加到scale_x_continuous,x 轴仅显示 2000 年的中断(如果 2000 不在该范围内,则没有中断)(imgur.com/a/CpPnH0x)。也许我没有完全理解这个函数的作用,可以相应地调整它。 -
好的,我现在看到这个功能并不是那么好。
breaks = function(x) unique(floor(pretty(seq(min(x - 1), (max(x) + 1) * 1.1))))怎么样?我无法测试,因为您的问题中没有数据。或者在那里尝试其他答案之一。 -
不幸的是,这会产生与前一个函数完全相同的结果:只有一次中断(在 2000 年)或没有中断,具体取决于范围。
-
好吧,就目前而言,这个问题没有什么特别之处可以使它与您的链接问题不同。我们实际上无法重现您遇到的问题,因为这里没有最小的可重现代码。