如何修改geom_path:每个组仅包含一个观察值。您是否需要调整小组审美?

时间:2019-05-26 02:08:44

标签: r

library("shiny")
library("ggplot2")
library("DT")
library("reshape2")
## load data ##

aqi = read.csv(file = "C:/Users/stan/Desktop/AIR/month.csv",
               header = T, sep = ",")
str(aqi)
colnames(aqi) = c("num","month", 
                  "PM10","PM2.5","NO","NO2")
## ui.R ##

ui = fluidPage(
  titlePanel('AIR'),
  sidebarLayout(
    sidebarPanel(
      selectInput('month',
                  'Choose a month:',
                  c('All', unique(as.character(aqi$month)
                  ))),
      selectInput('PM10',
                  'Number of :PM10',
                  c('All', unique(as.character(aqi$PM10)
                  ))),
      selectInput('PM2.5',
                  'Number of PM2.5:',
                  c('All',unique(as.character(aqi$PM2.5)
                  ))),
      selectizeInput("AIR", 
                     "Select Contaminant:", 
                     choices = c( "PM2.5", 
                                  "PM10"), 
                     selected = "PM2..5", 
                     multiple = TRUE )
  ),

    mainPanel(
      dataTableOutput('table'),
      plotOutput("plot")
    )
  )
)


## server.R ##

server = function(input, output) {
  # Filter data based on selections
  output$table <- DT::renderDataTable(DT::datatable({
    data <- aqi
    if (input$month != "All") {
      data <- data[aqi$month == input$month,]
    }
    if (input$PM10 != "All") {
      data <- data[aqi$PM10 == input$PM10,]
    }
    data
    if (input$PM2.5 != "All") {
      data <- data[aqi$PM2.5 == input$PM2.5,]
    }
    data
  }))
  output$plot = renderPlot({ 
    plot.data <- melt(aqi, id.vars= "month") 
    #not sure if input$cnt is a list or a vector 
    #may need to manipulate that before passing 
    plot.data <- plot.data[plot.data$variable %in% input$AIR, ] 
    ggplot(plot.data) + 
      geom_line(mapping = aes(x = month, y = value , colour =variable)) + 
      labs (x = "month", y = "value", title = "AIR") + 
      scale_colour_discrete(name = "AIR") 
  }) 
}

shinyApp(ui, server)

geom_path:每个组仅包含一个观察值。您是否需要调整小组审美? geom_path:每个组仅包含一个观测值。您需要调整小组的审美吗?

1 num month PM 10 PM 2.5 NO NO2 2 1 1月24 10 2.59 8.61 3 2 2月45 20 2.14 9.94 4 3 3月40 20 2.97 10.94 5 4 4月51 20 2.16 11.27 6 5 5月36 16 1.91 10.3 7 6 6月33 13 1.89 8.85 8 7 7月26 11 1.87 6.43 9 8 8月28 13 2 9.4 10 9 9月32 15 1.45 7.01 11 10 10月35 15 1.26 7.77 12 11 11月24 12 1.66 7.65 13 12 12月21 11 2.06 8.22

1 个答案:

答案 0 :(得分:0)

您可以解决在美学上添加group = 1的问题,但是由于将几个月来的日语unicode字符转换为factor类型,结果在美学上并不令人满意。

另一种方法是使用连续刻度,同时绘制从1到12个月的数字的线,然后手动添加标签和分隔符-scale_x_continuous(breaks = 1:12, labels = month_label)

请参见下面的代码:

aqi <- structure(list(num = 1:12, month = structure(c(1L, 5L, 6L, 7L, 
8L, 9L, 10L, 11L, 12L, 2L, 3L, 4L), .Label = c("1<U+6708>", "10<U+6708>", 
"11<U+6708>", "12<U+6708>", "2<U+6708>", "3<U+6708>", "4<U+6708>", 
"5<U+6708>", "6<U+6708>", "7<U+6708>", "8<U+6708>", "9<U+6708>"
), class = "factor"), PM10 = c(24L, 45L, 40L, 51L, 36L, 33L, 
26L, 28L, 32L, 35L, 24L, 21L), PM2.5 = c(10L, 20L, 20L, 20L, 
16L, 13L, 11L, 13L, 15L, 15L, 12L, 11L), NO = c(2.59, 2.14, 2.97, 
2.16, 1.91, 1.89, 1.87, 2, 1.45, 1.26, 1.66, 2.06), NO2 = c(8.61, 
9.94, 10.94, 11.27, 10.3, 8.85, 6.43, 9.4, 7.01, 7.77, 7.65, 
8.22)), row.names = c(NA, -12L), class = "data.frame")


aqi$num <- NULL

library(ggplot2)
library(reshape2)
month_label <- aqi$month
aqi$month <- 1:nrow(aqi)

plot.data <- melt(aqi, id.vars= "month") 


ggplot(plot.data) + 
  geom_line(mapping = aes(x = month, y = value , colour = variable)) + 
  labs (x = "month", y = "value", title = "AIR") +
  scale_x_continuous(breaks = 1:12, labels = month_label)

输出:

air quality graph