根据段长度在ggplot2中对geom_segment进行颜色处理

时间:2018-01-02 08:55:14

标签: r ggplot2

我有一个图表,通过连接原始位置和新位置来显示点的失真。我想通过根据段的长度对段进行着色来可视化失真的程度。如在未着色图中可见,失真中心在[0,300]附近并且朝向[300,0]放大。

Current uncoloured version of the graph

我希望找到一种方法将段长度输入到geom_segment的颜色选项中,但我找不到ggplot2的内部方式来执行此操作。我是否必须手动计算长度并将其存储在数据框中,还是有更优雅的方式?我希望通过将相应的段长度属性输入颜色并使用一些颜色范围来表示长度。

修改: A link to the data on display.

以及一些代码:

library(readr)
library(ggplot2)

data<-read_csv("distortedGraph.csv",col_names = F)

ggplot(data = data) +
  geom_segment(aes(x = X2, xend = X4, y = X3, yend = X5)) +
  scale_x_continuous(limits = c(-50, 350))+
  scale_y_continuous(limits = c(-50, 350))+
  coord_fixed()

2 个答案:

答案 0 :(得分:1)

我认为手动给出距离公式是最容易的,但并不是那么复杂。 geom_segment不会为您计算距离统计信息。添加一个漂亮的调色板,你应该很高兴:

ggplot(dat, 
       aes(x = X2, xend = X4, y = X3, yend = X5,
           color = sqrt((X2 - X4)^2 + (X3 - X5)^2))) +
  geom_segment(alpha = 0.5) +
  scale_x_continuous(limits = c(-50, 350))+
  scale_y_continuous(limits = c(-50, 350))+
  coord_fixed() +
  viridis::scale_color_viridis(name = 'distance')

enter image description here

答案 1 :(得分:1)

虽然@Axeman提供了我正在寻找的确切答案,但我查看了@ markus的评论并得出结论:geom_link中的ggforce将提供一个不同的,但也有趣的分析通过沿失真线应用梯度,每个点经历的失真程度:

library(ggforce)
ggplot(data = data) +
  geom_link(aes(x = X2, xend = X4, y = X3, yend = X5,colour = ..index..)) +
  scale_x_continuous(limits = c(-50, 350))+
  scale_y_continuous(limits = c(-50, 350))+
  coord_fixed()+
  viridis::scale_color_viridis(name = 'distortion', option = "C", direction = -1)

Plot degree of distortion with gradient