在R中,使用具有不同大小和颜色参数的geom_path

时间:2017-03-12 04:32:45

标签: r ggplot2

我真的很挣ggplot2中geom_path的大小和颜色参数。让我先与你分享我的数据和代码(简短),然后展示我得到的情节,然后解释我想要获得的情节。我现在对这个输出感到困惑:

# the data - x and y coordinates to plot
x_loc = c(39.29376, 39.44371, 39.59578, 39.7439, 39.88808, 40.18122, 
40.92207, 41.91831, 42.09564, 42.27909, 81.77751, 81.79779, 81.81031, 
81.81723, 81.81997, 81.81846)

y_loc = c(21.02953, 20.91538, 20.80633, 20.69479, 20.58158, 20.37095, 
19.87498, 19.38372, 19.31743, 19.26005, 35.55103, 35.64354, 35.7384, 
35.82535, 35.9067, 35.98656)

# creating the factor with which to base size and color off of
end = length(x_loc)
distances = sqrt(((x_loc[2:end] - x_loc[1:(end-1)]) ^ 2) + ((y_loc[2:end] - y_loc[1:(end-1)]) ^ 2))
my_colors = c('black', ifelse(distances > 0.5, 'red', 'black'))

# and now for my plot
ggplot() + 
geom_point(aes(x = x_loc, y = y_loc)) +
geom_path(aes(x = x_loc, y = y_loc, col = as.factor(my_colors), size = as.factor(my_colors)), 
        alpha = 1) + 
scale_color_manual(values = c("black", "red")) +
scale_size_manual(values = c(1.5, 0.45))

这是我得到的输出图,如果你没有运行我的代码:

enter image description here

这是我得到的,但这不是我想要的。我的目标是用连接点的线绘制坐标点,因此我为geom_point()和geom_path()使用单独的图层。然而,对于在距离矢量中测量的非常长的线(连续坐标之间的长距离),我希望线颜色为红色并且线要薄。对于短距离,我希望线条颜色为黑色,并且线条要更粗。

上面的情节有什么不对,长黑线不应该在那里。还有一个额外的黑线绘图也不应该出现(其他红线在哪里)。

(看起来通过将坐标分成组(按大小和颜色分组,均使用my_colors向量设置),geom_path为两个独立的点组创建两个单独的路径,每个点具有相应的大小并且颜色正确。但是,这会导致错误的情节)

如果我没有正确解释,请告诉我。不知何故,我真的想深究这一点。我现在将手动创建一个类似于我想要的图表,并且很快就会用它进行编辑!

谢谢!

编辑:这是我希望得到的:

enter image description here

这是通过作弊创造的(使用以下5个geom_path图层,我可以通过16个坐标,而不是100K)来创作作弊:

 ggplot() + geom_point(aes(x = x_loc, y = y_loc)) + 
    geom_path(aes(x = x_loc[1:6], y = y_loc[1:6]), 
              color = 'black',
              size = 1.5,
              alpha = 1) +
    geom_path(aes(x = x_loc[6:8], y = y_loc[6:8]), 
              color = 'red',
              size = 0.45,
              alpha = 1) + 
    geom_path(aes(x = x_loc[8:10], y = y_loc[8:10]), 
              color = 'black',
              size = 1.5,
              alpha = 1) + 
    geom_path(aes(x = x_loc[10:11], y = y_loc[10:11]), 
              color = 'red',
              size = 0.45,
              alpha = 1) + 
    geom_path(aes(x = x_loc[11:16], y = y_loc[11:16]), 
              color = 'black',
              size = 1.5,
              alpha = 1) 

1 个答案:

答案 0 :(得分:2)

我想我自己解决了这个问题 - 对于任何从事此工作的人来说,都与分组有关。我将很快用一个解决方案来编辑​​它!

编辑:

ggplot() + 

  geom_point(aes(x = x_loc, y = y_loc)) +
  geom_path(aes(x = x_loc, y = y_loc, col = my_colors, size = my_colors, group = my_group), 
            alpha = 1) + 
  scale_color_manual(values = c("black", "red")) +
  scale_size_manual(values = c(1.5, 0.45))

这可以完成工作!需要在分割颜色和尺寸之前将所有内容分组到同一组中