Last data update: 2014.03.03

R: A bezier arrow with gradient
bezierArrowGradientR Documentation

A bezier arrow with gradient


This is an experimental addition to the original bezierArrowSmpl with the addition of a gradient in the center of the arrow that fades.


bezierArrowGradient(x = c(0.2, 0.7, 0.3, 0.9), y = c(0.2, 0.2, 0.9, 0.9),
  width = 0.05, clr = "#000000", default.units = "npc",
  align_2_axis = TRUE, grdt_type = c("triangle", "rectangle"),
  grdt_prop = 0.8, grdt_decrease_prop = 0.5, grdt_clr_prop = 0.7,
  grdt_line_width, grdt_clr = "#2F4F2F", vp = NULL, gp = gpar(),
  rm_intersect = 3L, ...)



A numeric vector or unit object specifying x-locations of spline control points.


A numeric vector or unit object specifying y-locations of spline control points.


The width of the arrow, either a numeric single number or a unit. Note: The arrow does not rely on lwd but on actual width.


The color of the arrow. This is the main color of the arrow and not the gradient color.


A string indicating the default units to use if x or y are only given as numeric vectors.


Indicates if the arrow should be vertically/horizontally aligned. This is useful for instance if the arrow attaches to a box.


The type of growth and gradient that is to be used, currently it only supports triangle (I'm considering adding bezier curves but currently I'm a little tired of coding)


The proportion of the full length that should be a the gradient. The gradient consists of three things: (1) the central band, (2) the slimming of the central band, (3) the color shift into the arrow color. Note that the the slimmin and color proportions can be overlapping.


The proportion of the gradient that should be decreasing, i.e. narrowing according to the grdt_type argument.


The proportion of the gradient that should be converging to the arrow color.


The width of the border line. If not specified it defaults to 5 % of the original width, note the gradient's width is thus 90 %.


The color of the gradient.


A Grid viewport object (or NULL).


An object of class gpar, typically the output from a call to the function gpar. This is basically a list of graphical parameter settings.


Set to 0 if you want to skip intersection removal, 1 only to remove left or 2 to only remove right. See details for why.

@section Remove intersections:

When the line is wide and the arrow has a narrow curve there may appear an empty triangle due to polygon cancellation (two polygons within the same are cancel out). This behaviour may be ugly and the function therefor tries to remove these.

Note: it is expensive to check if there are the lineas may intersect at one point, remove those unexpected, and then adjust the line to the new situation so that the top and bottom lines match. It can also cause some unexpected behaviour why you may want to remove this feature if the arrow behaves erratically.


Passed on to bezierArrowSmpl


grid::gList() A grob of gList-type


The triangle section of the arrow is not currently included in the gradient.


arrowGrob <- bezierArrowGradient(x = c(.1,.3,.6,.9),
                                     y = c(0.2, 0.2, 0.9, 0.9))


R version 3.3.1 (2016-06-21) -- "Bug in Your Hair"
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library(Gmisc)
Loading required package: Rcpp
Loading required package: htmlTable
> png(filename="/home/ddbj/snapshot/RGM3/R_CC/result/Gmisc/bezierArrowGradient.Rd_%03d_medium.png", width=480, height=480)
> ### Name: bezierArrowGradient
> ### Title: A bezier arrow with gradient
> ### Aliases: bezierArrowGradient
> ### ** Examples
> library(grid)
> grid.newpage()
> arrowGrob <- bezierArrowGradient(x = c(.1,.3,.6,.9),
+                                      y = c(0.2, 0.2, 0.9, 0.9))
> grid.draw(arrowGrob)
null device