ggplot:如何选择与列相关的“正确”颜色

时间:2016-11-08 12:02:00

标签: r ggplot2 colors

假设我有一个简单的数据框要绘制,我必须在其中着色与列中包含的度量相关的点。所以,如果我有:

dataset

我用以下方式使用ggplot:

shinyServer( function(input, output, session) {

  dataset_list <- list( "rock" = rock,    
                        "pressure" = pressure,
                        "cars" = cars
  )

  observeEvent( input$n_select_input, {

    selected_dataset <- reactive({ 
      selected_list <- list()
      for( i in 1:input$n_select_input ){
        selected_list[[i]] <- dataset_list[[i]]
      }

      names(selected_list) <- names( dataset_list )[1:input$n_select_input]
      selected_list
    })


    colname_indata_list <- reactive({

      colname.indata.list <- list()
      for( set in names( selected_dataset() ) ){
        colname.indata.list[[set]] <- colnames( selected_dataset()[[set]] )
      }

      colname.indata.list
    })


    choice_cand <- reactive({ 
      names(selected_dataset()) })

    updateSelectInput( session,
                       "dataset",
                       choices = as.character( choice_cand() )
    )

    ######################################Start: Modified#############################

    observe({

      input$dataset  ##Added so that this observe is called when the input$dataset changes
      choices_cand <- reactive({ 

        colname_indata_list()[[input$dataset]] })

      updateCheckboxGroupInput( session, 
                                "column",
                                choices = as.character( choices_cand()) ,
                                selected = as.character( choices_cand())
      )

    })

    })

  ######################################End: Modified#############################


  datasetInput <- reactive({
    switch(input$dataset,
           "rock" = rock,
           "pressure" = pressure,
           "cars" = cars)
  })

  output$table <- renderTable({
    datasetInput()[,input$column]##only selected columns are displayed
  })


} ) 

我获得了类似的东西: enter image description here

这是一个可能的代表。 无论如何,假设我希望颜色这样的点代表列dataframe # X1 X2 pop # 1 -0.11092652 -1.955598e-09 448053 # 2 -0.09999865 -2.310067e-10 418231 # 3 -0.05944755 -3.475013e-09 448473 # 4 0.51378848 1.631781e-09 119548 # 5 0.09438223 -9.606475e-10 323288 # 6 0.19349045 6.074025e-10 203153 # 7 0.06685609 3.210156e-10 208339 # 8 -0.10915456 -1.407190e-09 429178 # 9 -0.10348100 -1.401948e-09 1218038 # 10 -0.08607617 -7.356602e-10 383018 # 11 1.00343465 -2.423237e-08 209550 # 12 -0.05839148 1.503955e-09 287042 # 13 -0.09960163 2.167945e-10 973129 # 14 -0.05793417 2.510107e-09 187249 # 15 0.02191610 2.479708e-09 915225 # 16 0.48877872 1.338346e-08 462999 # 17 -0.10289556 1.472368e-09 1108776 # 18 -0.10316414 2.933469e-10 402422 # 19 -0.09545279 -2.926035e-10 274035 # 20 -0.06111044 3.464014e-09 230749 ,即具有来自(例如)浅橙色的颜色,通过暗红色然后黑色。如何“缩放”列ggplot(dataframe) + ggtitle("Somehow useful spatialization")+ # Electricity / Gas geom_point(aes(dataframe$X1, dataframe$X2), color = dataframe$pop, size=2 ) + theme_classic(base_size = 16) + guides(colour = guide_legend(override.aes = list(size=4)))+ xlab("X")+ylab("Y") 以获取此类图形?

编辑:

pop

1 个答案:

答案 0 :(得分:2)

使用ggplot,你可以在你的初始ggplot调用中添加你的美学(aes)。由于您已经告诉数据所在的ggplot(在dataframe中),您可以直接通过名称引用变量(不使用dataframe$)。现在,要将颜色作为比例,需要在aes()调用中将其称为审美,而不是静态值。一旦将其作为美学添加,我们可以通过添加scale来自定义它的反应方式。考虑到这一切,我们得到以下代码:

ggplot(dataframe, aes(x = X1, y = X2, color = pop)) +
  ggtitle("Somehow useful spatialization")+  # Electricity / Gas
  geom_point(size=2) +
  theme_classic(base_size = 16) +
  guides(colour = guide_legend(override.aes = list(size=4))) +
  xlab("X")+ylab("Y") +
  scale_color_gradient2(low = "green", mid = "red", high = "black", midpoint = mean(dataframe$pop))

此代码提供以下图表。可以通过使用scale_color_gradient2部分来进一步调整颜色。 (为什么绿色为low提供了比实际选择橙色更好的橙色,因为low颜色超出了我的范围,我只是巧合地在那里结束了)

The resulting graph