echarts4r 教程2:Advanced

news2024/11/26 18:20:32

写在前面

本文为 R 语言 echarts4r 包的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。软件可能随时更新,建议配合官方文档一起阅读。推荐先按顺序阅读往期内容:
1. echarts4r 教程1:Get Started


目录

  • 1 Common options
  • 2 Grouping
  • 3 Stacked
  • 4 Scatter
  • 5 Jitter
  • 6 coord_system
  • 7 Customise the Axis
  • 8 Flip coordinates
  • 9 Mark Points and Lines
  • 10 Look for arguments
  • 11 Show labels
  • 12 Nested data
  • 13 List

官网教程:https://echarts4r.john-coene.com/articles/advanced

本文档详细介绍了 echarts4r 包的一些更高级的用法。

1 Common options

您可以使用 e_common 设置两个常用选项:

  • Font family
  • Theme
e_common(
  font_family = "Raleway",
  theme = NULL
)

此页面上的所有图表都将使用 Raleway 字体(源自 Google 字体的 CSS)。

2 Grouping

该包还理解 dplyr::group_by 以避免必须手动一层一层地添加许多层。echarts4r 本质上会为每一个 group 绘制一个 serie。

iris |> 
  group_by(Species) |> 
  e_charts(Sepal.Length) |> 
  e_line(Sepal.Width) |> 
  e_title("Grouped data")
alt

上面为每个 group (group_by) 绘制了一条线 (e_line)。有一个例外,从 0.2.1 开始,当使用 e_charts 初始化图表时,timeline 设置为 TRUE。在后一种情况下,每个 group 都用作 timeline 的一个步骤。

iris |> 
  group_by(Species) |> 
  e_charts(Sepal.Length, timeline = TRUE) |> 
  e_line(Sepal.Width) |> 
  e_title("Timeline")
alt

3 Stacked

df <- data.frame(
  x = LETTERS[1:10],
  a = runif(10),
  b = runif(10),
  c = runif(10),
  d = runif(10)
)

df |> 
  e_charts(x) |> 
  e_bar(a, stack = "grp") |> 
  e_bar(b, stack = "grp") |> 
  e_bar(c, stack = "grp2") |> 
  e_bar(d, stack = "grp2"
alt

4 Scatter

0.2.0 开始,e_scattere_effect_scatter 函数采用不同的、经过大幅改进的 scale 参数,它是一个缩放函数。

iris |> 
    group_by(Species) |> 
    e_charts(Sepal.Length) |> 
    e_scatter(Petal.Length, Sepal.Width)
alt

默认缩放函数是 e_scale,它从 1 重新缩放到 20,但您可以传递自己的缩放函数。缩放函数应采用 integernumeric 向量并返回相同长度的相似向量。例如,要创建一个从 5 重新缩放到 30 的函数:

my_scale <- function(x){
  scales::rescale(x, to = c(530))
}

iris |> 
    group_by(Species) |> 
    e_charts(Sepal.Length) |> 
    e_scatter(Petal.Length, Sepal.Width, scale = my_scale)
alt

这也适用于 R 4.1.0 语法。

iris |>  
    group_by(Species) |> 
    e_charts(Sepal.Length) |> 
    e_scatter(
      Petal.Length, 
      Sepal.Width, 
      scale = \(x) scales::rescale(x, to = c(530))
    )

当未传递 size 时,点的大小由 symbol_size 定义。

iris |> 
    group_by(Species) |> 
    e_charts(Sepal.Length) |> 
    e_scatter(Petal.Length, symbol_size = 15)
alt

size 被传递时,symbol_size 成为在缩放函数运行后执行的乘数。例如

iris |> 
    group_by(Species) |> 
    e_charts(Sepal.Length) |> 
    e_scatter(Petal.Length, Sepal.Width, scale = log1p, symbol_size = 10)
alt

添加此行为是因为能够在合理的范围内缩放点非常重要,理想情况下点的大小在 1 到 30~40 之间。

请注意,重新缩放颜色意味着您还应该重新缩放 e_visual_map(如果使用)。

echart <- mtcars |> 
  e_charts(mpg) |> 
  e_scatter(qsec, wt, scale = e_scale) |> 
  e_legend(show = FALSE)

echart |> 
  e_visual_map(wt, scale = e_scale)
  
# or 
# echart |> 
#   e_visual_map(min = 1, max = 20)
alt

如果您想保持原始大小,则可以使用 scale_js,因为您可能希望 e_visual_map 保持原始数据的真实性。

mtcars |> 
  e_charts(mpg) |> 
  e_scatter(qsec, wt, scale = NULL, scale_js = "function(data){ return data[3] * 3;}") |> 
  e_legend(show = FALSE) |> 
  e_visual_map(wt, scale = NULL)
alt

这样,气泡的大小适当,但视觉图的范围保持不变。

5 Jitter

0.2.1 版本开始,您可以使用 e_scatter 创建 jitter points。

mtcars |> 
  e_charts(cyl) |> 
  e_scatter(drat, symbol_size = 4) |> 
  e_scatter(
    drat, jitter_factor = 2, symbol_size = 6,
    name = "noisy"
  )
alt

6 coord_system

图表类型不仅适用于标准 2D 笛卡尔坐标系,尽管大多数图表将默认为 cartesian2d 坐标系,但它们也可能适用于其他坐标系。

我们来看看热图。首先是常规热图。

v <- LETTERS[1:10]
matrix <- data.frame(
  x = sample(v, 300, replace = TRUE), 
  y = sample(v, 300, replace = TRUE), 
  z = rnorm(300101),
  stringsAsFactors = FALSE
) |> 
  dplyr::group_by(x, y) |> 
  dplyr::summarise(z = sum(z)) |> 
  dplyr::ungroup()

matrix |> 
  e_charts(x) |> 
  e_heatmap(y, z) |> 
  e_visual_map(z)
alt

人们还可以在不同的坐标上绘制热图,例如通过首先使用 e_calendar 添加日历,然后指定 coord_system = "calendar" 来绘制日历。

dates <- seq.Date(as.Date("2018-01-01"), as.Date("2018-12-31"), by = "day")
values <- rnorm(length(dates), 206)

year <- data.frame(date = dates, values = values)

year |> 
  e_charts(date) |> 
  e_calendar(range = "2018") |> 
  e_heatmap(values, coord_system = "calendar") |> 
  e_visual_map(max = 30)
alt

另一个示例,使用极坐标,在二维笛卡尔坐标上绘制一条线,然后更改为极坐标。

df <- data.frame(x = 1:10, y = seq(120, by = 2))

df |> 
  e_charts(x) |> 
  e_line(y) 
alt
df |> 
  e_charts(x) |> 
  e_polar() |> 
  e_angle_axis() |> 
  e_radius_axis() |> 
  e_line(y, coord_system = "polar", smooth = TRUE
alt

echarts4r 中有多种可用的坐标系;举几例来说,有 globecartesian3dpolar。请注意,当有多个 coord_system 可用时,后者会在各自函数的手册页中记录示例。

7 Customise the Axis

通过指定轴的索引来使用多个轴。请注意,JavaScript 从 0 开始,而不是 1,因此 y_index = 1 是第二个轴,y_index = 0 是第一个轴(默认)

USArrests |> 
  e_charts(Assault) |> 
  e_line(Murder, smooth = TRUE) |> 
  e_line(Rape, y_index = 1) |>  # add secondary axis
  e_y_axis(splitLine = list(show = FALSE)) # hide split lines on first Y axis
alt

8 Flip coordinates

您可以使用 e_flip_coords 翻转坐标,请注意,如果您有多个 y 轴,则它将不起作用。

data.frame(
  x = LETTERS[1:5],
  y = runif(5115)
) |> 
  e_charts(x) |> 
  e_bar(y, name = "flipped") |> 
  e_flip_coords() # flip axis
alt

9 Mark Points and Lines

使用 e_mark 系列函数突出显示绘图上的点和线。

USArrests |> 
  tibble::rownames_to_column("State") |> 
  dplyr::mutate(
    Rape = -Rape
  ) |> 
  e_charts(State) |> 
  e_area(Murder) |>
  e_bar(Rape, name = "Sick basterd", x_index = 1) |> # second y axis 
  e_mark_line("Sick basterd", data = list(type = "average")) |> 
  e_mark_point("Murder", data = list(type = "min"))
alt

10 Look for arguments

寻找更多参数,使用 echarts4r,您通常距离您想要的只差一个参数。

library(dplyr)
df <- tibble(
  name = "earth",        # 1st level
  children = list(
    tibble(name = c("land""ocean"),             # 2nd level
       children = list(
         tibble(name = c("forest""river")),   # 3rd level 
         tibble(name = c("fish""kelp"),
            children = list(
               tibble(name = c("shark""tuna"),  # 4th level 
               NULL  # kelp
            ))
         )
       ))
  )
)

df |> 
  e_charts() |> 
  e_tree()
alt

变为径向:

df |> 
  e_charts() |> 
  e_tree(layout = "radial")
alt

11 Show labels

对于大多数 series,您可以像这样显示标签:

USArrests |> 
  tibble::rownames_to_column("State") |> 
  dplyr::slice(1:10) |> 
  e_charts(State) |> 
  e_area(Murder, label = list(normal = list(show = TRUE))) 

还有一个辅助函数 e_labels() 可以提供更简单的 API:

USArrests |> 
  tibble::rownames_to_column("State") |> 
  dplyr::slice(1:10) |> 
  e_charts(State) |> 
  e_area(Murder) |> 
  e_labels()
alt

12 Nested data

您可能会在官方文档中观察到,某些 series 可以获取比 x 和 y 点更多的数据点,例如 e_bar;在官方文档中,转到 "serie",选择您感兴趣的(即:bar),然后选择 "data"。

e_bar 允许您传递与原始库中的值相对应的 serie (来自初始 data.frame)。然而,后者也采用 labelitemStyletooltip,但它们是 JSON 数组,它们会转换为 R 中的列表,并且处理嵌套的 data.frames 并不理想。e_add_nested 对此的补救措施。它允许添加这些嵌套数据点。

让我们向 iris 数据集添加一些列,我们将在 e_add_nested 中使用这些列来自定义标签的外观。

# add columns to iris
iris_dat <- iris |> 
  dplyr::mutate(
    show = TRUE# to show the labels
    fontSize = exp(Sepal.Length) / 10# font size will correspond to Sepal.Length
    color = sample(c("red""black""blue"), dplyr::n(), replace = TRUE# assign a random color to the label
  )

iris_dat |> 
  dplyr::slice(1:10) |> # simplify the graph. 
  e_charts(Sepal.Width) |> 
  e_line(Sepal.Length) |> 
  e_add_nested("label", show, fontSize, color) |> # add our columns to "label"
  e_x_axis(min = 2.5)
alt

e_funnel 的另一个例子。

funnel <- data.frame(
  stage = c("View""Click""Purchase"), 
  value = c(803020),
  color = c("blue""red""green")
)

funnel |> 
  e_charts() |> 
  e_funnel(value, stage) |> 
  e_add_nested("itemStyle", color)
alt

13 List

从版本 0.2.1 开始,您可以传递原始选项列表。

N <- 20 # data points

opts <- list(
  xAxis = list(
    type = "category",
    data = LETTERS[1:N]
  ),
  yAxis = list(
    type = "value"
  ),
  series = list(
    list(
      type = "line",
      data = round(runif(N, 520))
    )
  )
)

e_charts() |> 
  e_list(opts)
alt

e_list 也可用于附加选项。


--------------- 结束 ---------------

注:本文为个人学习笔记,仅供大家参考学习,不得用于任何商业目的。如有侵权,请联系作者删除。

alt

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2247983.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JSON 性能测试 - WastJson 性能也很快

WAST 是一个高性能 Java 工具集库包&#xff0c;包括 JSON、YAML、CSV、HttpClient、JDBC 和 EL 引擎. WastJson 无论是小中大文本各种数据类型等性能都没有明显的短板&#xff0c;除了推广外可以说是六边形战士&#xff0c;更多测试参考 wast-jmh-test: wast性能测试 (并非所…

DICOM图像处理:深入解析DICOM彩色图像中的Planar配置及其对像素数据解析处理的实现

引言 在DICOM(Digital Imaging and Communications in Medicine)标准中,彩色图像的存储与显示涉及多个关键属性,其中**Planar Configuration(平面配置)**属性(标签 (0028,0006))尤为重要。当遇到彩色DICOM图像在浏览时被错误地分割为9张小图,而实际应显示为一…

django authentication 登录注册

文章目录 前言一、django配置二、后端实现1.新建app2.编写view3.配置路由 三、前端编写1、index.html2、register.html3、 login.html 总结 前言 之前&#xff0c;写了django制作简易登录系统&#xff0c;这次利用django内置的authentication功能实现注册、登录 提示&#xff…

数字图像处理(4):FPGA中的定点数、浮点数

&#xff08;1&#xff09;定点数&#xff1a;小数点固定在数据的某一位置的数&#xff0c;可以分为定点整数和定点小数和普通定点数。定点数广泛应用于数字图像处理&#xff08;图像滤波、图像缩放&#xff09;和数字信号处理&#xff08;如FFT、定点卷积&#xff09;中。 定…

uniapp接入高德地图

下面代码兼容安卓APP和H5 高德地图官网&#xff1a;我的应用 | 高德控制台 &#xff0c;绑定服务选择《Web端(JS API)》 /utils/map.js 需要设置你自己的key和安全密钥 export function myAMap() {return new Promise(function(resolve, reject) {if (typeof window.onLoadM…

三种蓝牙架构实现方案

一、蓝牙架构方案 1、hostcontroller双芯片标准架构 手机里面包含很多SoC或者模块&#xff0c;每颗SoC或者模块都有自己独有的功能&#xff0c;比如手机应用跑在AP芯片上&#xff0c;显示屏&#xff0c;3G/4G通信&#xff0c;WiFi/蓝牙等都有自己专门的SoC或者模块&#xff0…

下载并安装Visual Studio 2017过程

一、下载 1、下载链接 下载链接&#xff1a;官方网址 先登录 往下滑找到较早的下载 2、进行搜索下载 或者直接点击&#x1f517;网站跳转 3、确认系统信息进行下载 二、安装 下载完成后右键使用管理员身份运行 1、点击同意后安装 2、若报错—设置失败 打开控制面板-&g…

1-golang_org_x_crypto_bcrypt测试 --go开源库测试

1.实例测试 package mainimport ("fmt""golang.org/x/crypto/bcrypt" )func main() {password : []byte("mysecretpassword")hashedPassword, err : bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)if err ! nil {fmt.Println(err)…

卷积神经网络学习记录

目录 神经网络基础定义&#xff1a; 基本组成部分 工作流程 卷积层&#xff08;卷积定义&#xff09;【CONV】&#xff1a; 卷积层&#xff08;Convolutional Layer&#xff09; 特征提取&#xff1a;卷积层的主要作用是通过卷积核&#xff08;或滤波器&#xff09;运算提…

Java安全—JNDI注入RMI服务LDAP服务JDK绕过

前言 上次讲到JNDI注入这个玩意&#xff0c;但是没有细讲&#xff0c;现在就给它详细地讲个明白。 JNDI注入 那什么是JNDI注入呢&#xff0c;JNDI全称为 Java Naming and Directory Interface&#xff08;Java命名和目录接口&#xff09;&#xff0c;是一组应用程序接口&…

设计模式之 模板方法模式

模板方法模式是行为型设计模式的一种。它定义了一个算法的骨架&#xff0c;并将某些步骤的实现延迟到子类中。模板方法模式允许子类在不改变算法结构的情况下重新定义算法的某些特定步骤。 模板方法模式的核心在于&#xff1a; 封装算法的骨架&#xff1a;通过父类中的模板方…

学习threejs,使用设置bumpMap凹凸贴图创建褶皱,实现贴图厚度效果

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.MeshPhongMaterial高…

日常开发记录-正确的prop传参,reduce搭配promise的使用

日常开发记录-正确的prop传参&#xff0c;reduce搭配promise的使用 1.正确的prop传参2.reduce搭配promise的使用 1.正确的prop传参 一般会的父组件传参子组件 //父组件 <A :demodata.sync"testData" :listData.sync"testData2"></A> data ()…

RedHat 10 Beta Install

RedHat 10 beta 前言 Red Hat Enterprise Linux 10.0 Beta 附带内核版本 6.11.0,该版本为以下架构提供最低要求版本支持(括号中注明) AMD 和 Intel 64 位架构(x86-64-v3)64 位 ARM 架构(ARMv8.0-A)IBM Power Systems,小端(POWER9)64 位 IBM Z (z14)RHEL 安装程序的主…

泥石流灾害风险评估与模拟丨AI与R语言、ArcGIS、HECRAS融合,提升泥石流灾害风险预测的精度和准确性

目录 第一章 理论基础 第二章 泥石流风险评估工具 第三章 数据准备与因子提取 第四章 泥石流灾害评价 第五章 HECRAS软件的应用 第六章 操作注意事项与模型优化 泥石流灾害的频发与严重后果&#xff0c;已成为全球范围内防灾减灾工作的重大挑战。随着科技的不断进步&…

android 音效可视化--Visualizer

Visualizer 是使应用程序能够检索当前播放音频的一部分以进行可视化。它不是录音接口&#xff0c;仅返回部分低质量的音频内容。但是&#xff0c;为了保护某些音频数据的隐私&#xff0c;使用 Visualizer 需要 android.permission.RECORD_AUDIO权限。传递给构造函数的音频会话 …

汽车HiL测试:利用TS-GNSS模拟器掌握硬件性能的仿真艺术

一、汽车HiL测试的概念 硬件在环&#xff08;Hardware-in-the-Loop&#xff0c;简称HiL&#xff09;仿真测试&#xff0c;是模型基于设计&#xff08;Model-Based Design&#xff0c;简称MBD&#xff09;验证流程中的一个关键环节。该步骤至关重要&#xff0c;因为它整合了实际…

基于Boost库的搜索引擎

本专栏内容为&#xff1a;项目专栏 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;基于Boots的搜索引擎 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &#x1f339;&#x1f339;&#x1f339;关注我带你学习编程知识…

二叉树oj题解析

二叉树 二叉树的最近公共祖先什么是最近公共祖先&#xff1f;leetcode中求二叉树中最近公共祖先解题1.解题2. 根据二叉树创建字符串 二叉树的最近公共祖先 什么是最近公共祖先&#xff1f; 最近的公共祖先指的是这一棵树中两个节点中深度最大的且公共的祖先节点就是最近祖先节…

AI赋能电商:构建高效、智能化的新零售生态

随着人工智能&#xff08;AI&#xff09;技术的不断进步&#xff0c;其在电商领域的应用日益广泛&#xff0c;从购物推荐到供应链管理&#xff0c;再到商品定价&#xff0c;AI正在全面改变传统电商的运营模式&#xff0c;并推动行业向智能化和精细化方向发展。本文将探讨如何利…