ggplot2非线性调整颜色比例尺

5
我有两个问题:
  1. 虽然这些数据的范围是-1到5,但大部分数据的值都在-1和1之间。因此,我想知道是否可以调整结果和颜色之间的关系为非线性(即,在-1和1之间变化更多,在2和5之间变化更少)。使用GGplot2是否可以实现这一点?
  2. 如何将比例尺移动到地图中,例如放置在右下角位置?
以下是我的代码:
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")

我已经编辑了你的帖子:我内联了图片(在描述前添加了一个 !),修正了列表格式和一些拼写错误。你可以进一步改进它,通过添加你期望代码完成的操作以及你当前解决方案偏离期望的方式。 - Benjamin W.
3个回答

3
您可以使用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 > legend.position和/或legend.justification

谢谢您的建议。我已经尝试了,但是我仍然觉得颜色很难控制。例如,当设置colours = c("blue", "red", "orange"), values = c(0, 0.1, 1) 我想问一下values是什么意思?是指"blue"小于0吗?"red"在0-0.1之间吗? 如果我想将-0.5-0设置为灰色,0-1设置为红色,1-2设置为蓝色等,该怎么办? 非常感谢。 - Paul
值0-1并不代表实际数值,而是数据范围内的位置。例如,如果您的数据范围从-1到5,并且您希望颜色位置分别为-1、1和5,则应使用0、0.33和1。如果您的数据范围从-0.5到2,并且您希望颜色位置分别为-0.5、0、1和2,则应使用0、0.2、0.6和1。 - erc

0
你可以尝试这个命令:
+theme(legend.position = c(xxx, xxx))

0
在 beetroot 的答案基础上,我们可以编写一个简短的辅助函数,将原始比例尺上的值转换为用于绘图的 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))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接