ggplot2用颜色非线性地调整比例

时间:2016-04-11 20:09:06

标签: r plot ggplot2

我有两个问题:

  1. 虽然这个数据的范围是-1到5,但是它们中的大多数都有-1到1之间的值。因此,我想知道我是否可以将结果和颜色之间的关系调整为非线性(也就是说,-1和1之间的变化更大,但2和5之间的变化较小)。使用GGplot2可以实现吗?

  2. 如何将比例尺移动到地图中,例如,在右下角位置?

  3. 这是我的代码:

    library(ggplot2)
    library(ggmap)
    library(data.table)
    map<-get_map(location='united states', zoom=4, maptype = "terrain",
             source='google',color='bw')
    ggmap(map) + geom_point(
     aes(x=longitude, y=latitude, show_guide = TRUE, colour=V1), 
     data=plot.data, alpha=0.3, na.rm = T)  + 
     scale_color_gradient(low="red", high = "red4", name = "Level")
    

3 个答案:

答案 0 :(得分:1)

您可以使用scale_colour_gradientn并定义values(来自?scale_colour_gradientn,如果颜色不能沿着渐变均匀定位,则此向量会给出位置(介于0和1之间)对于颜色矢量中的每种颜色。),例如:

ggplot(data = iris, aes(x = Species, y = Sepal.Width, colour = Sepal.Length)) +
      geom_point() +
      scale_colour_gradientn(colours = c("blue", "red", "orange"),
                             values = c(0, 0.1, 1))

要更改图例的位置,请查看?theme&gt; legend.position和/或legend.justification

答案 1 :(得分:0)

您可以尝试以下命令:

+theme(legend.position = c(xxx, xxx))

答案 2 :(得分:0)

基于甜菜根的答案,可以编写一个简短的辅助函数,将原始比例的值转换为用于绘图的0-1比例。

gradient_setter <- function(x, low = NULL, mid = 0, high = NULL){
  rn <- range(x, na.rm = TRUE)
  (c(rn[1], low, mid, high, rn[2]) - rn[1])/(rn[2] - rn[1])
}
ggplot(data = iris, aes(x = Species, y = Sepal.Width, colour = Sepal.Length)) +
      geom_point() +
      scale_colour_gradientn(colours = c("blue", "red", "orange"),
                             values = gradient_setter(iris$Sepal.Length, mid = 5, high = 5.8))