5.6 交互式图像与插入图像
手册中介绍了交互式图像的相关知识。但个人觉得还是在shiny中直接使用plotly
及相关可交互图像包更为便捷。
5.6.1 交互式图像
5.6.1.1 plotly
这里就简单介绍plotly的用法,具体细节还是等有需要的时候自行查找官方手册。
plotly
绘图的两种实现方式:
直接绘图
- 利用
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
基于ggplot
- 直接用
ggplot()
绘图,再利用ggplotly()
函数转化为plotly对象,之后可根据需要继续使用管道符来添加细节 - 注意,部分
ggplot
元素无法转化为plotly对象
- 直接用
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
来保留图像。