5.6 交互式图像与插入图像

手册中介绍了交互式图像的相关知识。但个人觉得还是在shiny中直接使用plotly及相关可交互图像包更为便捷。

5.6.1 交互式图像

5.6.1.1 plotly

这里就简单介绍plotly的用法,具体细节还是等有需要的时候自行查找官方手册

plotly绘图的两种实现方式:

  1. 直接绘图

    • 利用plot_ly()函数初始化对象,在传递参数时得使用=~
    • 根据不同的图形类型查询对应的官网手册,利用命名列表来传递参数
    • 支持管道符
library(plotly)

# volcano是R内置的矩阵
fig <- plot_ly(z = ~volcano) %>% add_surface(
  contours = list(
    z = list(
      show=TRUE,
      usecolormap=TRUE,
      highlightcolor="#ff0000",
      project=list(z=TRUE)
    )
  )
)
fig <- fig %>% layout(
  scene = list(
    camera=list(
      eye = list(x=1.87, y=0.88, z=-0.64)
    )
  )
)

fig
  1. 基于ggplot

    • 直接用ggplot()绘图,再利用ggplotly()函数转化为plotly对象,之后可根据需要继续使用管道符来添加细节
    • 注意,部分ggplot元素无法转化为plotly对象
fig <- ggplot(data=iris)+
  geom_point(aes(x=Sepal.Length, y=Sepal.Width, color=Species))+
  theme_minimal()
ggplotly(fig)

5.6.2 插入图像

使用renderImage()来渲染图片。该渲染函数需要一个提供了图像信息的列表。

output$photo <- renderImage({
    list(
      src = file.path("puppy-photos", paste0(input$id, ".jpg")),
      contentType = "image/jpeg",
      width = 500,
      height = 650
    )
  }, deleteFile = FALSE)

参数src指向存储了图像的本地路径;contentType表示图像格式,若已经提供了图像后缀名则会自动识别;由于renderImage()一开始的设计初衷是为了处理临时性文件,因此在渲染后会自动删除图像,因此需声明deleteFile=FALSE来保留图像。