JavaScript 温度异常图表

news2025/2/11 20:38:57

了解如何使用高性能 JS 图表创建可用于异常天气和温度科学研究的 JS 温度异常图表。

你好!

在本文中,我们将创建温度异常图表。

对于这个例子,我们将使用 LightningCharts JS 库,特别是XY图表。对于那些对技术细节感兴趣的人,这里有一些XY 图表的 特征:

  1. 这种类型的图表仅适用于两个轴,X 和 Y。
  2. 它允许我们将图形中的数据点定位为坐标。
  3. XY 图表是测量和读取温度异常的绝佳工具。
  4. 异常指的是在一段较长的时间内相对于参考值或平均值的变化。
  5. 正值表示温度变暖,而负值表示温度变冷。

温度异常图的主要用途

  • 气候监测:温度异常图有助于监测温度模式随时间的变化,提供对气候趋势和整体气候条件的洞察。 
  • 气候研究:温度异常图在研究气候动态、识别气候驱动因素以及研究自然和人为因素对温度变化的影响方面具有科学用途。 
  • 天气预报:在气象学中,温度异常图用于通过识别异常温暖或寒冷的区域来预测天气模式,有助于更准确的短期天气预测。 
  • 环境分析:温度异常会影响生态系统和环境系统,因此温度异常图表对于分析温度变化对植被、野生动物和洋流的影响很有价值。

让我们开始实施吧。

模板设置

1. 请下载以下模板 (.ZIP),您可以在其中找到项目和学习本教程所需的所有文件。JavaScript 温度异常图表项目模板

2. 下载项目后,在 Visual Studio 中将其打开,并可视化以下文件树:

3. 现在,打开一个新终端,像往常一样在NodeJS项目中运行NPM install命令。有关安装 NodeJS的更多信息,请参阅本文。

这就是设置模板的一切。现在让我们编写代码。

图表.ts

在这个文件中,我们将拥有创建图表、配置动画和格式化数据所需的所有逻辑。

1.导入JSON数据:

import data from './data.json'

附言。如果您是 JSON 数据的新手,我向您推荐这本 JSON 数据建模指南。

2. 声明将 lcjs 引用我们的常量@arction/lcjs library

3. 从中提取所需的类lcjs

const lcjs = require('@arction/lcjs')
const { lightningChart, AxisTickStrategies, UIElementBuilders, UIOrigins, ImageFill, emptyLine, ImageFitMode, emptyFill, Themes } = lcjs

4. 创建图表对象:

const chart = lightningChart()
    .ChartXY({
        theme: Themes.darkLime,
    })
    .setTitle('')
  • setTitle:将在仪表板中显示为顶部标题的文本。
  • Theme:LightningChart JS 库具有一组默认实现,可由Themes. 组件的颜色主题必须在创建时指定,之后不能更改。

5.获取Y轴:

const axisY1 = chart.getDefaultAxisY().setTitle('Atmospheric Carbon Dioxide (ppm)')

getDefaultAxisY可以访问 Y 轴,X 轴 ( getDefaultAxisX) 的情况相同。

一旦我们有权访问它,我们就可以添加 UI 属性,如标题。AxisY1对应图表中的意义线:

6. 创建主 Y 轴线:

const axisY2 = chart
    .addAxisY({
        opposite: true,
    })
    .setTitle('Temperature Anomaly Index (°C)')
    // Hide tick grid-lines from second Y axis.
    .setTickStrategy(AxisTickStrategies.Numeric, (ticks) =>
        ticks
            .setMinorTickStyle((minor) => minor.setGridStrokeStyle(emptyLine))
            .setMajorTickStyle((major) => major.setGridStrokeStyle(emptyLine)),
    )

 

刻度策略定义了轴刻度的定位和格式化逻辑以及创建的刻度的样式。数字属性对应于要在 Y 轴上显示的数字值。

对于 XY,刻度将为空行,因为我们不需要在图表中显示每个刻度:

major.setGridStrokeStyle((solidLine) => solidLine.setThickness(500))),

7. X轴:

const axisX = chart.getDefaultAxisX().setTickStrategy(AxisTickStrategies.DateTime)

 如您所见,X 轴具有日期时间策略,因为我们需要按日期显示数据:

 

 8. 使用 JSON 数据:

const { temperature, co2 } = data

//code stored in "data.json"
{
    "temperature":[-0.16,-0.08,-0.1,-0.17,-0.28,-0.33,-0.31,-0.36,-0.17,-0.1,-0.35,-0.22,-0.27,-0.31,-0.3,-0.23,-0.11,-0.11,-0.27,-0.18,-0.08,-0.16,-0.28,-0.37,-0.47,-0.26,-0.22,-0.39,-0.43,-0.49,-0.44,-0.44,-0.36,-0.35,-0.16,-0.15,-0.36,-0.46,-0.3,-0.28,-0.28,-0.19,-0.29,-0.27,-0.27,-0.22,-0.11,-0.22,-0.2,-0.36,-0.16,-0.1,-0.16,-0.29,-0.13,-0.2,-0.15,-0.03,0,-0.02,0.13,0.19,0.07,0.09,0.2,0.09,-0.07,-0.03,-0.11,-0.11,-0.17,-0.07,0.01,0.08,-0.13,-0.14,-0.19,0.05,0.06,0.03,-0.03,0.06,0.03,0.05,-0.2,-0.11,-0.06,-0.02,-0.08,0.05,0.03,-0.08,0.01,0.16,-0.07,-0.01,-0.1,0.18,0.07,0.16,0.26,0.32,0.14,0.31,0.16,0.12,0.18,0.32,0.39,0.27,0.45,0.4,0.22,0.23,0.32,0.45,0.33,0.46,0.61,0.38,0.39,0.54,0.63,0.62,0.53,0.68,0.64,0.66,0.54,0.66,0.72,0.61,0.65,0.68,0.74,0.9,1.01,0.92,0.85,0.98,1.02],
    "co2":[285.2,285.1,285,285,284.9,285.1,285.4,285.6,285.9,286.1,286.4,286.6,286.7,286.8,286.9,287.1,287.2,287.3,287.4,287.5,287.7,287.9,288,288.2,288.4,288.6,288.7,288.9,289.5,290.1,290.8,291.4,292,292.5,292.9,293.3,293.8,294,294.1,294.2,294.4,294.6,294.8,294.7,294.8,294.8,294.9,294.9,294.9,295.3,295.7,296.2,296.6,297,297.5,298,298.4,298.8,299.3,299.7,300.1,300.6,301,301.3,301.4,301.6,302,302.4,302.8,303,303.4,303.7,304.1,304.5,304.9,305.3,305.8,306.2,306.6,307.2,307.5,308,308.3,308.9,309.3,309.7,310.1,310.6,311,311.2,311.3,311,310.7,310.5,310.2,310.3,310.3,310.4,310.5,310.9,311.3,311.8,312.2,312.6,313.2,313.7,314.3,314.8,315.34,316.18,317.07,317.73,318.43,319.08,319.65,320.23,321.59,322.31,323.04,324.23,325.54,326.42,327.45,329.43,330.21,331.36,331.92,333.73,335.42,337.1,338.99,340.36,341.57,342.53,344.24,345.72,347.15,348.93,351.47,353.15,354.29]
  }

 9. 为大气二氧化碳线添加值:

const carbonDioxideSeries = chart
    .addLineSeries({
        yAxis: axisY1,
    })
    .setName('Atmospheric Carbon Dioxide (ppm)')
    // Data set contains PPM measurement values only. First measurement is from year 1880, and each consecutive measurement is 1 year after previous.
    .add(
        co2.map((ppm, i) => ({
            y: ppm,
            x: new Date(1880 + i, 0, 1, 0, 0, 0, 0).getTime(),
        })),
    )

如您所见,Y1 轴上添加了一个线系列。名称设置为系列,数据映射自 JSON 数据中的 CO2 数组对象。我们没有日期值,因此只需从 1880 年开始连续添加 1 年,以创建一条不间断的线。

10.添加图例框:

// Add legend.
const legend = chart.addLegendBox(undefined, { x: axisX, y: axisY1 }).add(chart)
.setOrigin(UIOrigins.LeftTop)
.setMargin(4)
const positionLegendOnAxes = () => legend.setPosition({ x: axisX.getInterval().start, y: axisY1.getInterval().end })
positionLegendOnAxes()

 

添加legendbox到意义线(Y 轴)和唯一的 X 轴。

  •  setOrigin:设置此 UiElement 的位置原点。 
  • setMargin以像素为单位设置对象周围的边距。 
  • setPosition:设置此 UiElement 相对于其原点的位置。 
  • getInterval获取当前应用的坐标轴刻度间隔。

NPM 开始

要初始化图表,请打开一个新终端并运行命令npm start。您将看到本地主机路径。单击它并与浏览器上的图表进行交互。

在这里,您可以看到最终图表:

结论

在本文中,我们以非常简单的方式创建了 XY 图表的实现。为了生成 XY 图表,我们只需要使用该charXY()方法。

在此示例中,我们使用了LC JS 库中的默认值,但在您的情况下,您只需要一个具有所需值的 JSON 类型的对象。

从技术上讲,只要您使用两个阵列,该过程就应该有效。几乎所有的代码开发都集中在图表定制上,加载数据的过程也很容易理解。

另一个要点是主题目录的使用,它允许我们生成外观相当复杂的图表,但无需求助于外部 CSS 类。

毫无疑问,LC JS 有助于以更少的执行时间执行最佳工作。

 

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

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

相关文章

2.数据库语言二

文章目录 数据库语言二Mysql的约束数据表高级操作克隆表方法一方法二 清空表,删除表内的数据方法一方法二 创建临时表外键约束数据库用户管理新建用户查看用户重命名用户删除用户修改用户密码忘记root密码 数据库用户授权授予权限查看权限撤销权限 数据库语言二 My…

OpenAI 重磅更新 变得更强啦 | 包括更多可控的 API 模型、函数调用能力、更长的上下文和更低的价格

文章目录 一、前言二、主要内容三、总结 🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 OpenAI 官网:https://openai.com/blog/function-calling-and-other-api-updates 功能调用和其他 API 更新。OpenAI 宣布更新,包…

netstat命令与wget命令

查看本机的网络连接与后门:netstat 如果某个网络服务明明已经启动了,但是就算无法进行连接,那应该怎么办?首先你要查询以下网络接口所监听的端口(port),来看看是否真的已经启动,因为有时候屏幕上显示的OK并…

从 ColossalChat 到 DeepSpeedChat, RLHF的应用及优化

从 ColossalChat 到 DeepSpeedChat, RLHF的应用及优化 原创 紫气东来 收录于合集#LLMs8个 作者:紫气东来 项目地址:https://zhuanlan.zhihu.com/p/621391363 一、深入理解 ColossalChat 在上一期 NLP(九):LLaMA, Al…

畅捷通T+ SQL注入漏洞复现(QVD-2023-13612)

0x01 产品简介 畅捷通 T 是一款基于互联网的新型企业管理软件,功能模块包括:财务管理、采购管理、库存管理等。主要针对中小型工贸和商贸企业的财务业务一体化应用,融入了社交化、移动化、物联网、电子商务、互联网信息订阅等元素。 0x02 漏…

STM32速成笔记—GPIO

文章目录 一、什么是GPIO二、GPIO的输入/输出模式三、GPIO初始化配置四、Boot引脚五、一些特殊的GPIO六、点亮LED1. 硬件电路2. 拉高/拉低GPIO3. 程序设计 七、GPIO的位带操作 一、什么是GPIO GPIO(英语:General-purpose input/output),通用型之输入输出的简称&…

【算法与数据结构】142、LeetCode环形链表 II

文章目录 一、题目二、哈希法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、哈希法 思路分析:这道题也可以用双指针法去解,这里我介绍一种哈希法。利用set集合的值不可重复的特性。…

什么触控笔好用又便宜?性价比高的苹果笔推荐

而对于一些将IPAD作为学习工具的人来说,这款苹果Pencil无疑是必不可少的。不过,苹果版Pencil的价格实在是太高了,很多人都买不起。所以,最好的办法就是使用平替的电容笔。我是在前几年就开始使用ipad了,同时也是一位数…

快速入门教程:神经常微分方程 (Neural ODE)

神经常微分方程(Neural Ordinary Differential Equations,简称 Neural ODE)是一种基于常微分方程(Ordinary Differential Equations,ODEs)的深度学习方法,它结合了传统的ODE数值求解技术和神经网络模型。通过使用ODE来建模数据的演化过程,Neural ODE可以自动地学习数据…

项目管理专业人员能力评价(CSPM)对比PMP哪个好考?

2021年10月,中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系,开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会(CAS)组织开展的项…

编译opencv环境搭建:vs2019 + cmake-3.25 + opencv-4.5.5

一 下载vs2019 链接:Downloads - Visual Studio Subscriptions Portal 下载社区版本,因为是免费的,大家随便用 下载成功后直接安装就可以了。 有的环境安装好后在属性管理器中可能没有 Microsoft.Cpp.x64 文件 从如下链接下载 Microsoft.C…

三、OkHttp_缓存

一、OKHttp的缓存逻辑 OKHttp 把重复请求的数据缓存在本地,并设置超时时间,在规定时间内,客户端不再向远程请求数据,而是直接从本地缓存中取数据。 一来提高了响应速度,二来节省了网络带宽(也就是节省了钱…

如何使用uni-app开发微信小程序

web前端-基于uniapp的微信小程序项目 起步uni-app简介开发工具下载 HBuilderX安装 HBuilderX安装 scss/sass 编译快捷键方案切换修改编辑器的基本设置新建uni-app项目把项目运行到微信开发者工具 scss语法学习安装相关插件和配置基础格式选择器的嵌套父选择器后面添加内容 &…

麒麟系统在线安装docker(x86/arm)

文章目录 一、查看系统版本,确认版本二、查看系统架构三、下载安装docker-ceX86架构安装aarch64架构 一、查看系统版本,确认版本 [rootlocalhost ~]# cat /etc/kylin-release Kylin Linux Advanced Server release V10 (Sword)二、查看系统架构 [root…

Windows内存诊断工具卡住无响应怎么办?

Windows内存诊断工具是一个有用的程序,用于检查您的RAM是否存在潜在问题。当系统性能降低、频繁冻结或者蓝屏时,用户可以通过内存诊断工具检查和修复内存方面的问题。该工具具有三种测试模式,基本、标准和扩展模式,其中扩展模式下…

在UOS上安装及更新恒辉桌面软件

UOS作为一颗冉冉升起的新星,吸引了众多国内用户及厂商的目光。 而新的系统势必面临着一个问题——软件及应用的适配性。各个软件厂商需要单独为此适配产品。 2022年2月,支持全四路国产CPU(x86架构、arm架构、龙芯、申威)的数据库…

chatgpt赋能python:Python如何打印结果

Python如何打印结果 Python是一种高级编程语言, 它也是一种解释型语言,也就是说,程序员不必把Python代码编译成机器码或者字节码。它利用缩进来表示块结构,同时使用一些特殊的关键字来定义变量和类等。 在Python中,有多种方式来…

算法课设 戳气球问题实验报告 动态规划

戳气球实验报告 目录 一、题目 二、分析原问题并做调整 三、分析子问题及其递推关系 四、确定dp数组的计算顺序 五、复杂度分析 六、具体实现代码 七、填表示例寻找最优解和最优方案 八、总结 九、致谢 一、题目 有n个气球,编号为0到n-1,每个…

管理类联考——逻辑——知识篇——第三章 三段论(考2题)(以性质命题为基础,最常用推理)

第三章 三段论(考2题)(以性质命题为基础,最常用推理) 一、三段论的基本结构 基本结构1(最简单,不考): 所有A是B 所有B是C 得:所有A是C 基本结构2&#xff…

网络安全系统教程+学习路线(自学笔记)

一、什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面…