如何填充由直线和曲线创建的几何图形?

SB2002

我正在尝试用不同的颜色填充下图中的3个三角形。

这是图形

data = data.frame(x=c(125), y=c(220)) #this data is just to be able to use gplot to draw figures

ggplot(data, aes(x = x, y = y)) + 
  xlim(0,250) +
  ylim(-250, 0) +
  geom_curve(x = 33, xend = 223, y = -100, yend = -100, curvature = -.65) +
  geom_segment(x=128, xend = 33, y=-208, yend = -100) +
  geom_segment(x=128, xend = 223, y=-208, yend = -100) +
  geom_segment(x=128, xend = 159.67, y=-208, yend = -45) +
  geom_segment(x=128, xend = 96.33, y=-208, yend = -45) +
  coord_fixed()

我怎样才能做到这一点?

杰博

简短的答案:这是一个非常邪恶的hack。

现在让我们详细说明一下:正如在此GitHub线程特别讨论的那样,不可能访问由此产生的坐标geom_curve(它CurveGrob用于绘图和“这些值都是在绘制时计算的” [@ thomasp85])。其“绘制时行为的计算”的效果可以在下面看到-如果添加coord_plot或不添加,都会有所不同这与geom_spline有所不同:添加coord_fixed不会更改坐标。

参见下面的图一和图二:红色曲线的创建方式geom_curve-与geom_segment线失去联系...

@ thomasp85在GitHub线程中建议人们可以改用他的软件包ggforce现在,要真正控制曲率,需要使用geom_bspline并使用曲率。

一旦找到曲率,就可以使用ggplot_build对象中的坐标。我们可以根据这些坐标来计算多边形(这也不是一件容易的事,因为需要创建切口并为正确的“边”添加点)。见下文。

library(tidyverse)
library(ggforce)

mydata = data.frame(x = 128, xend = c(33, 223, 159.67, 96.33), y = -208, yend = c(-100,-100,-45,-45))

#for spline control points.
my_spline <- data.frame(x = c(33, 128, 223), y = c(-100, 24,-100))

接下来,我演示“绘制时间(红色曲线)上的计算”与“直接计算”之间的区别:

coord_fixed 红色和黑色曲线触摸线段

ggplot(mydata) + 
  geom_curve(aes(x = 33, xend = 223, y = -100, yend = -100), curvature = -.65, color = 'red') +
  geom_segment(aes(x = x, xend = xend, y = y, yend = yend)) +
  geom_bspline(data = my_spline, aes(x, y )) +
  coord_fixed()

coord_fixed 使用红色曲线不会触及线段,但黑色曲线仍会触及线段。

ggplot(mydata) + 
  geom_curve(aes(x = 33, xend = 223, y = -100, yend = -100), curvature = -.65, color = 'red') +
  geom_segment(aes(x = x, xend = xend, y = y, yend = yend)) +
  geom_bspline(data = my_spline, aes(x, y )) 

# Final hack
# Get x/y coordinates from ggplot_build
p <- ggplot(mydata) + 
  geom_bspline(data = my_spline, aes(x, y )) 

pb <- ggplot_build(p)$data[[1]]

#create groups for fill
data_polygon <- data.frame(x = pb[['x']], y = pb[['y']]) %>% 
  mutate(cut_poly = cut(x, c(-Inf, 96.33, 159.67, Inf), labels = letters[1:3])) 

#add corner points - repeat extremes from b, otherwise there will be a gap
data_add <- data_polygon %>% 
  filter(cut_poly == 'b') %>% 
  slice(which.min(x), which.max(x)) %>% 
  mutate(cut_poly = letters[c(1,3)]) %>%
  bind_rows(data.frame(x = 128, y = -208, cut_poly = letters[1:3], stringsAsFactors = FALSE)) %>% 
  arrange(x) #important to arrange, otherwise you get irregular polygons

data_plot <- rbind(data_polygon,data_add)

ggplot(data_plot) +
  geom_polygon(aes(x, y, fill = cut_poly), color = 'black')

reprex软件包(v0.3.0)创建于2019-12-05

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何填充直线和曲线下的所有内容?

来自分类Dev

如何更改p5js 3d几何图形的填充

来自分类Dev

如何更改p5js 3d几何图形的填充

来自分类Dev

如何使用Three.js在JavaScript中从数组中创建几何图形?

来自分类Dev

创建JSON时,Vividsolutions JTS中的几何图形失败

来自分类Dev

WPF中的几何图形

来自分类Dev

链接几何图形的边界

来自分类Dev

WPF中的几何图形

来自分类Dev

如何在CSS中为几何图形添加边框?

来自分类Dev

如何在现有pdf的顶部绘制几何图形?

来自分类Dev

直线和曲线之间的区域(无功能)

来自分类Dev

从由相等正方形构成的几何图形中提取轮廓(周长)多边形

来自分类Dev

球和曲线作为图形对象的碰撞

来自分类Dev

如何制作具有多个几何形状的自定义ggplot2几何图形

来自分类Dev

GoJS 中的自定义几何图形可以填充颜色吗?

来自分类Dev

如何使用ggplot2获取具有不同几何图形的2个图形的网格

来自分类Dev

绘制基本几何图形的软件

来自分类Dev

JavaFX lineChart不能做几何图形

来自分类Dev

从使用2种不同几何图形创建的ggplot图例中删除某些值

来自分类Dev

WKBReadingError:由于读取输入时出错,无法创建几何图形

来自分类Dev

如何在d2d中设置外部几何图形蒙版,因此d2d仅在该几何图形外部绘制

来自分类Dev

如何在d2d中设置外部几何图形蒙版,以便d2d仅在该几何图形外部绘制

来自分类Dev

在opencv中的背景减法中过滤直线和曲线

来自分类Dev

图片中的笔触检测算法以检测直线和曲线

来自分类Dev

在opencv中的背景减法中过滤直线和曲线

来自分类Dev

从场景中选取几何图形,然后一起移除几何图形及其线框

来自分类Dev

如何用光谱色填充x轴和曲线之间的空间?

来自分类Dev

如何控制ggplot2中的哪些图例中显示哪些几何图形?

来自分类Dev

如何在一个对象中组合简单的几何图形?

Related 相关文章

  1. 1

    如何填充直线和曲线下的所有内容?

  2. 2

    如何更改p5js 3d几何图形的填充

  3. 3

    如何更改p5js 3d几何图形的填充

  4. 4

    如何使用Three.js在JavaScript中从数组中创建几何图形?

  5. 5

    创建JSON时,Vividsolutions JTS中的几何图形失败

  6. 6

    WPF中的几何图形

  7. 7

    链接几何图形的边界

  8. 8

    WPF中的几何图形

  9. 9

    如何在CSS中为几何图形添加边框?

  10. 10

    如何在现有pdf的顶部绘制几何图形?

  11. 11

    直线和曲线之间的区域(无功能)

  12. 12

    从由相等正方形构成的几何图形中提取轮廓(周长)多边形

  13. 13

    球和曲线作为图形对象的碰撞

  14. 14

    如何制作具有多个几何形状的自定义ggplot2几何图形

  15. 15

    GoJS 中的自定义几何图形可以填充颜色吗?

  16. 16

    如何使用ggplot2获取具有不同几何图形的2个图形的网格

  17. 17

    绘制基本几何图形的软件

  18. 18

    JavaFX lineChart不能做几何图形

  19. 19

    从使用2种不同几何图形创建的ggplot图例中删除某些值

  20. 20

    WKBReadingError:由于读取输入时出错,无法创建几何图形

  21. 21

    如何在d2d中设置外部几何图形蒙版,因此d2d仅在该几何图形外部绘制

  22. 22

    如何在d2d中设置外部几何图形蒙版,以便d2d仅在该几何图形外部绘制

  23. 23

    在opencv中的背景减法中过滤直线和曲线

  24. 24

    图片中的笔触检测算法以检测直线和曲线

  25. 25

    在opencv中的背景减法中过滤直线和曲线

  26. 26

    从场景中选取几何图形,然后一起移除几何图形及其线框

  27. 27

    如何用光谱色填充x轴和曲线之间的空间?

  28. 28

    如何控制ggplot2中的哪些图例中显示哪些几何图形?

  29. 29

    如何在一个对象中组合简单的几何图形?

热门标签

归档