之前公众号介绍过的绘图工具:如何快速画出美观的图形?,图表这么多,该用哪种展示我的数据呢?使用的语言都为 python,对于一些 R 语言爱好者就不是那么方便啦,今天小编为大家介绍一个支持 R 语言的开源图形库—— Plotly,赶紧收藏起来,迅速 get 绘制美观实用的图形技能吧~
简介
Plotly 支持的语言有 Python、 R、Julia、Javascript、ggplot2、F#、MATLAB,以及 Dash,可以根据个人需要进行选择。
本文先介绍 plotly 的 R 包用法,网站左侧有个图形示例导航栏:
图形示例
Plotly 最大的特点是绘制出来的图形都是交互式的,所给示例(图形示例的网址:https://plotly.com/r/)除了常见的线图、饼图之外,还提供了一些机器学习模型结果的可视化,这样再有建模需求时也能对模型结果进行高质量地展示啦,下图为部分绘图示例:
机器学习
子图
R 包安装
在 R Studio 里使用 Plotly 包时,需要先进行安装并加载:
代码语言:javascript复制install.packages("plotly")
library(plotly)
绘图实战
当自变量有多个时,R 自带的绘图函数 plot 无法对其进行可视化,这时可以利用plotly
包中的plot_ly
函数对多元回归平面进行可视化。下面以 iris 数据集为例,先加载所需要的 R 包:
#加载包
library(reshape2)
library(tidyverse)
library(tidymodels)
library(plotly)
#install.packages("kernlab")
library(kernlab)
#install.packages("pracma")
library(pracma) #为了在曲面上显示网格线
data(iris)
选择 Sepal.Width 、Sepal.Length 作为自变量,因变量为 Petal.Width,
代码语言:javascript复制#选择自变量和因变量
mesh_size <- .02
margin <- 0
X <- iris %>% select(Sepal.Width, Sepal.Length)
y <- iris %>% select(Petal.Width)
构造回归模型,选择 rbf 核函数进行映射:
代码语言:javascript复制model <- svm_rbf(cost = 1.0) %>%
set_engine("kernlab") %>%
set_mode("regression") %>%
fit(Petal.Width ~ Sepal.Width Sepal.Length, data = iris)
建立坐标轴范围
代码语言:javascript复制x_min <- min(X$Sepal.Width) - margin
x_max <- max(X$Sepal.Width) - margin
y_min <- min(X$Sepal.Length) - margin
y_max <- max(X$Sepal.Length) - margin
xrange <- seq(x_min, x_max, mesh_size)
yrange <- seq(y_min, y_max, mesh_size)
xy <- meshgrid(x = xrange, y = yrange)
xx <- xy$X
yy <- xy$Y
dim_val <- dim(xx)
xx1 <- matrix(xx, length(xx), 1)
yy1 <- matrix(yy, length(yy), 1)
final <- cbind(xx1, yy1)
pred <- model %>%
predict(final)
pred <- pred$.pred
pred <- matrix(pred, dim_val[1], dim_val[2])
利用plot_ly
函数绘图:
fig <- plot_ly(iris, x = ~Sepal.Width, y = ~Sepal.Length, z = ~Petal.Width ) %>%
add_markers(size = 5) %>%
add_surface(x=xrange, y=yrange, z=pred, alpha = 0.65, type = 'mesh3d', name = 'pred_surface')
fig
结果展示
可以看到 Plotly 绘制出来的图形,不仅美观,而且是可以交互的,这个包还提供许多非常有用的例子,大家可以自行探索一下~
结语
觉得本文有帮助到你,那就请多多给小编点赞吧,小编再继续努力为大家挖掘好用的科研工具~