svgPanZoom: Pan and Zoom R graphics

Description Usage Arguments Examples

View source: R/svgPanZoom.R

Description

Add panning and zooming to almost any R graphics from base graphics, lattice, and ggplot2 by using the JavaScript library svg-pan-zoom.

Usage

1
2
3
4
5
6
7
8
svgPanZoom(
  svg,
  viewBox = TRUE,
  ...,
  width = NULL,
  height = NULL,
  elementId = NULL
)

Arguments

svg

one of

  • svg - SVG as XML or xml2, such as return from xmlSVG

  • lattice plot - trellis object, such as l in l=xyplot(...)

  • ggplot2 plot - ggplot object, such as g in g=ggplot(...) + geom_line()

  • filename or connection of a SVG file

viewBox

logical to add back the viewBox to the SVG. The default is TRUE to fit the svgPanZoom in its container.

...

other configuration options for svg-pan-zoom.js. See svg-pan-zoom How To Use for a full description of the options available. As an example to turn on controlIconsEnabled and turn , do svgPanZoom( ..., controlIconsEnabled = TRUE, panEnabled = FALSE ).

width, height

valid CSS unit (like "100%", "400px", "auto") or a number, which will be coerced to a string and have "px" appended

elementId

string id for the svgPanZoom container. Since svgPanZoom does not display its container, this is very unlikely to be anything other than the default NULL.

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#  svgPanZoom tries to be very flexible with its first argument

#  in this first example use SVG as a character string
#    this is probably the least likely use case
library(svgPanZoom)
svgPanZoom('
   <svg style="height:300px;width:300px;">
     <circle cx="60" cy="60" r="50" style="fill:none;stroke:blue;"/>
   </svg>
')


## Not run: 
library(svgPanZoom)

# first let's demonstrate a base plot
# use svglite for now
library(svglite)
library(lattice)
svgPanZoom( svglite:::inlineSVG( plot(1:10) ) )

svgPanZoom(svglite:::inlineSVG(show( xyplot( y~x, data.frame(x=1:10,y=1:10) ) )))

# the package gridSVG is highly recommended for lattice and ggplot2
# second let's demonstrate a lattice plot
library(lattice)
svgPanZoom( xyplot( y~x, data.frame(x=1:10,y=1:10) ) )

# third with a ggplot2 plot
library(ggplot2)
svgPanZoom( ggplot( data.frame(x=1:10,y=1:10), aes(x=x,y=y) ) + geom_line() )

#Of course as a good htmlwidget should, it works with Shiny also.
library(shiny)
library(svglite)
library(svgPanZoom)
library(ggplot2)

ui <- shinyUI(bootstrapPage(
  svgPanZoomOutput(outputId = "main_plot")
))

server = shinyServer(function(input, output) {
  output$main_plot <- renderSvgPanZoom({
    p <- ggplot() +
     geom_point(
       data=data.frame(faithful),aes(x=eruptions,y=waiting)
     ) +
     stat_density2d(
       data=data.frame(faithful)
       ,aes(x=eruptions,y=waiting ,alpha =..level..)
       ,geom="polygon") +
     scale_alpha_continuous(range=c(0.05,0.2))

     svgPanZoom(p, controlIconsEnabled = T)
  })
})

runApp(list(ui=ui,server=server))

## End(Not run)

svgPanZoom documentation built on March 26, 2020, 7:53 p.m.