Unity中画2D图表(1)——用XChart包绘制折线图

做一些数据处理和数据分析的时候,把数据可视化是一项重要的工作,本例以画一个包含两条温度曲线的图开始…

一、折线图的绘制效果请添加图片描述

二、用到的包

1、XChart介绍

在这里插入图片描述

2、XChart官方链接

https://github.com/XCharts-Team/XCharts

三、如何用代码来设置线条的多个参数

  • 1、设置图表的大小
  • 2、设置主标题,副标题
  • 3、设置Tooltip和Legend
  • 4、设置XY的刻度标签值
  • 5、在一个chart里画多条折线,比如2根折线
  • 6、x轴刻度标签旋转(倾斜)设置
  • 7、设置线条的颜色
  • 8、线条粗细设置
  • 9、线条平滑设置

四、示例代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Cysharp.Threading.Tasks; // https://github.com/Cysharp/UniTask
using XCharts.Runtime;         // https://github.com/XCharts-Team/XCharts 
using System;
using System.Linq;
using UnityEngine.UI;public class ExampleLineChart : MonoBehaviour
{/// <summary>/// 测试按钮——画线/// </summary>public Button StartBtn;private void Start(){StartBtn.onClick.AddListener(()=> {DrawLineFlow();});}/// <summary>/// /// </summary>/// <returns></returns>private async UniTask DrawLineFlow(){//【1】添加一个LineChart图表Debug.Log("添加一个默认的折线图");var chart = gameObject.GetComponent<LineChart>();if (chart == null){chart = gameObject.AddComponent<LineChart>();chart.Init();}//【2】设置图表的大小:SetSize(x,y)Debug.Log("设置图表的大小(580, 300) ");chart.SetSize(580, 300);//代码动态设置尺寸,或直接操作chart.rectTransform,或直接在Inspector上改Debug.Log("2秒后重新设置大小(1102, 519) ");await UniTask.Delay(TimeSpan.FromSeconds(2.0f));chart.SetSize(1102, 519);//【3】设置标题:chart.Title.text|subText = ""Debug.Log("2秒后:设置标题 ");await UniTask.Delay(TimeSpan.FromSeconds(2.0f));var title = chart.GetOrAddChartComponent<Title>();title.text = "森林小气候与碳通量的关系";            //主标题title.subText = "温度湿度数据";                     //副标题//【4】设置提示框【Tooltip】和图例【Legend】是否显示//Tooltip - 鼠标悬停在曲线节点上的时候,显示数据信息 //Legend  - 图上数据系列的类别信息【例如[red-白天温度]、[black-晚上温度]】Debug.Log("2秒后:设置提示框和图例是否显示");await UniTask.Delay(TimeSpan.FromSeconds(2.0f));var tooltip = chart.GetOrAddChartComponent<Tooltip>();tooltip.show = true;                                //在数据节点上,鼠标悬停时显示的信息框var legend = chart.GetOrAddChartComponent<Legend>();legend.show = true;//【5】设置坐标轴的数据刻度信息Debug.Log("2秒后:设置坐标轴");await UniTask.Delay(TimeSpan.FromSeconds(2.0f));//x轴设置var xAxis = chart.GetOrAddChartComponent<XAxis>();xAxis.splitNumber = 24;                            //数据的个数-参数硬编码xAxis.boundaryGap = true;xAxis.type = Axis.AxisType.Category;//y轴设置var yAxis = chart.GetOrAddChartComponent<YAxis>();yAxis.type = Axis.AxisType.Value;//【6】清空默认数据,添加Line类型的Serie用于接收数据Debug.Log("2秒后:清空默认数据,添加Line类型的Serie用于接收数据");await UniTask.Delay(TimeSpan.FromSeconds(2.0f));chart.RemoveData();//【7】添加数据chart.AddSerie<Line>("林内温度");chart.AddSerie<Line>("林外温度");Debug.Log("2秒后:添加数据");await UniTask.Delay(TimeSpan.FromSeconds(2.0f));var series1_24 = Enumerable.Range(1, 24).ToList();var xTicks = series1_24.Select(x=>$"{x}:00").ToList();var yTicks = series1_24.Select(x => UnityEngine.Random.Range(10, 20)).ToList();  //[min,max) 前开后闭var yTicks2 = series1_24.Select(x => UnityEngine.Random.Range(10, 20)).ToList();//数据添加到图表上series1_24.ForEach(idx=> {chart.AddXAxisData(xTicks[idx-1]);   //X轴的刻度标签chart.AddData(0, yTicks[idx-1]);     //Y1,第一根线的数据chart.AddData(1, yTicks2[idx - 1]);  //Y2,第二根线的数据});//【8】x轴刻度标签旋转(倾斜)设置Debug.Log("2秒后:x轴刻度标签旋转设置");await UniTask.Delay(TimeSpan.FromSeconds(2.0f));xAxis.axisLabel.rotate = 45;//【9】x轴的含义【轴的标签】——没有发现//xAxis.axisName = ?//【10】设置线条的颜色Debug.Log("0.4秒后:线条的颜色设置");await UniTask.Delay(TimeSpan.FromSeconds(0.4f));//第一根线的颜色,包含整体渐变过度的颜色chart.series[0].lineStyle.color = Color.green;        //  【color】【toColor】【toColor2】三个颜色,相当于渐变过度//chart.series[0].lineStyle.toColor = Color.black;//chart.series[0].lineStyle.toColor2 = Color.blue;//第二根线的颜色chart.series[1].lineStyle.color = Color.blue;         //  【color】【toColor】【toColor2】三个颜色,相当于渐变过度//【11】线条粗细设置:线条太粗会显得比较粗制滥造,调细一些显得比较精美await UniTask.Delay(TimeSpan.FromSeconds(2.0f));Debug.Log("2秒后:设置线条的粗细为1");chart.series[0].lineStyle.width = 1.0f; //第一条线的颜色,在编辑器running模式下调试,选取合适的参数chart.series[1].lineStyle.width = 1.0f; //第二条线的颜色//【12】线条平滑设置:折现符合逻辑,但是看起来比较尖锐,平滑线优美些chart.series[0].lineType = LineType.Smooth; //Smooth-平滑线,Normal-折线chart.series[1].lineType = LineType.Smooth; //Smooth-平滑线,Normal-折线}#if UNITY_EDITOR[ContextMenu("测试")]
#endifvoid Test(){DrawLineFlow();}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[计算机图形学]渲染管线,纹理映射(前瞻预习/复习回顾)

一、渲染管线 目前为止&#xff0c;我们前几篇的介绍当中已经把一个3D场景转换到2D的过程几乎讲完了&#xff0c;而这么一个过程就被称为Real-time Rendering Pipeline也就是实时渲染管线&#xff0c;也就是一个流水线。其中包括顶点的变换&#xff0c;光栅化&#xff0c;片元操…

Unity 之图形渲染(一)

备注&#xff1a;希望和大家一起交流学习&#xff0c;如果有不同的观点欢迎一起讨论学习&#xff0c;不喜勿喷&#xff0c;谢谢。 unity图形渲染 前提MeshMesh FilterMesh Renderer基本属性 Skinned Mesh Renderer基本属性 前提 unity 中图形渲染组件主要有三种&#xff1a; …

在Unity中制作逼真的建筑场景

原创 Unity Unity官方平台 2018-07-28 在创作游戏中&#xff0c;场景的制作是必须要面对的问题&#xff0c;如何高效制作好感染力强、让人印象深刻的场景是每个开发者都会面临的难题&#xff0c;因为场景的细节和逼真度处理起来并不简单。 本篇文章中&#xff0c;游戏开发工程…

【项目展示】Unity 海洋场景渲染(Boat Attack Water、光谱渲染)

项目背景 前几个月开始做的项目&#xff0c;需要一个使用海洋场景。但是因为项目很急&#xff0c;所以海水需要使用别人已经写好的开源代码。当时就想起了Unity曾经有一个URP宣传片中的海水似乎还不错&#xff0c;于是便基于此项目的海水进行修改&#xff08;Unity在GitHub上有…

渲染的艺术:建筑效果图渲染的5个成功要素

在数字建筑可视化的早期&#xff0c;建筑物只是简单地填充了与不同活动和规模相对应的人体剪裁。现在&#xff0c;随着图像编辑软件的进步&#xff0c;创建建筑渲染不仅仅涉及对建筑物进行 3D 建模然后对其进行抛光。艺术家们正在探索创造性的途径&#xff0c;在一个框架中讲述…

Unity接入ChartAndGraph图表插件

Unity中接入ChartAndGraph图表插件 说明一、实现柱状图二、实现折线图 遇到的问题 说明 最近项目上需要实现部分图表数据显示&#xff0c;因为需要用到一些3D图表&#xff0c;所以选择了ChartAndGraph这款图表插件&#xff0c;图表数据是通过后台接口读取Json并解析,然后调用图…

【Unity】Unity插件:地形编辑器MTE(Mesh Terrain Editor)

文章目录 地形编辑器MTE下载方式文档及教程主要功能地表类型创建工具示例文件创建地图绘制地图快捷键提升、降低高度绘制高度平滑高度绘制纹理 细节问题处理 地形编辑器MTE MTE&#xff08;Mesh Terrain Editor&#xff09;是一款Unity的地形编辑器插件&#xff0c;该插件能够…

unity基础开发----NGUI图集Atlas制作简介

此教程属于 NGUI 的具体操作&#xff0c;主要描述怎么制作一个游戏中的 UI &#xff0c;相对来说比较简单&#xff0c;熟能生巧哇&#xff0c;动手操作一遍就可以完全掌握的。 1 &#xff0c;在 PS 里面设计好要做的 UI &#xff0c;然后切片成很多个 png 的图片&#xff08;这…

图形渲染技术分享:《GTA V 》图形分析摘要

环境渲染 最外层的 cubemap 是每一帧实时生成的&#xff0c;目的是简化后续真实反射的渲染。这个 cubemap 是一张低精度的 128*128 纹理&#xff0c;每个面 30 左右 drawcall&#xff0c;都是地表天空等较大像素贡献的多边形全部是静态物体&#xff0c;所以车辆的外壳反射不…

GaussDB火焰图分析

目录 问题描述问题现象告警业务影响原因分析处理方法 问题描述 CPU利用率是衡量系统负载和健康度的重要指标之一&#xff0c;系统在运行过程中时常发生CPU利用率高的情况。在分析性能问题时&#xff0c;可通过火焰图查看CPU耗时&#xff0c;了解瓶颈在哪里。 问题现象 部分s…

3.15 数据库吐槽大会

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 大家好&#xff0c;我是一名狂热的数据库程序员&#xff0c;趁着 3.15 的良辰吉日&#xff0c;鼓起勇气站上了数据库吐槽大会舞台&#xff0c;以下故事纯属虚构&#xff0c;如有雷同&#xff0c;请对号入座。 名不副实的数据…

一个月涨粉翻倍,摄影博主慌了:照片都是假的,肖像根本不是人

白交 发自 凹非寺量子位 | 公众号 QbitAI 一个月内涨粉翻倍&#xff0c;摄影博主却慌了&#xff0c;忍不住坦白&#xff1a; 我的照片都是AI生成的。 去年十月份开始&#xff0c;这个名叫Jos Avery的大哥&#xff08;后面简称乔大哥&#xff09;开始在社交网络上发照片&#xf…

百度文心一言正式亮相

OpenAI 刚发布了 GPT-4&#xff0c;百度预热已久的人工智能生成式对话产品也终于亮相了。昨天下午&#xff0c;文心一言 (ERNIE Bot)—— 百度全新一代知识增强大语言模型、文心大模型家族的新成员&#xff0c;正式在百度总部 “挥手点江山” 会议室里发布。 发布会一开场&…

LangChain大型语言模型(LLM)应用开发(三):Chains

LangChain是一个基于大语言模型&#xff08;如ChatGPT&#xff09;用于构建端到端语言模型应用的 Python 框架。它提供了一套工具、组件和接口&#xff0c;可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互&#x…

chatgpt赋能python:用Python绘制散点图并标注各点名称

用Python绘制散点图并标注各点名称 在数据分析或机器学习中&#xff0c;散点图是一种常见的可视化方法。Python中的matplotlib库可以用来绘制各种类型的图表&#xff0c;包括散点图。然而&#xff0c;在散点图中标注每个点的名称是非常有用的&#xff0c;这可以帮助理解和解释…

类模板函数模板从属类型

准备看个项目找实习&#xff0c;边看边学&#xff0c;一看到处都是template 和typename&#xff0c;好几年前学的C都忘记光了&#xff0c;在这里先做个笔记复习一下。 template <class T> T abs(T x) {if(x < 0) return -x;return x; } int main() {int x 1;cout <…

jsonpath 语法介绍

文章目录 前言 一、对jsonpath的理解 二、补充 三、哪里可以用的到呢&#xff1f; 总结 前言 在使用Python做接口测试中需要获取json中的字段值&#xff0c;因此需要使用jsonpath里面的提取规则&#xff0c;所以特意学习了jsonpath中的语法。 一、对jsonpath的理解 在线运…

如何结合均线分析伦敦金行情走势线图

伦敦金并不是普通的黄金投资产品&#xff0c;它不但拥有黄金基本的投资属性&#xff0c;还拥有高杠杆双向交易的特性&#xff0c;如果投资者只懂得怎么投资黄金&#xff0c;但没有娴熟的交易技巧和稳健的交易心态的话&#xff0c;恐怕还是难以在这个市场取得成功。 伦敦金价每天…

5.8晚间黄金行情走势分析及短线交易策略

近期有哪些消息面影响黄金走势&#xff1f;本周黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周一亚洲时段&#xff0c;现货黄金小幅反弹&#xff0c;目前交投于2024.3美元/盎司附近&#xff0c;一方面是金价上周五守住了 2000 整数关口&#xff0c;逢低买盘涌…

高胜率现货黄金走势图形

做现货黄金&#xff0c;如果投资者能成功发现市场的底部&#xff0c;收益无疑会十分可观。金价走势图中经常会见出现各种底部&#xff0c;楔形底、双底、圆弧底、头肩底….虽然是三角形的底部相对更为罕见&#xff0c;但一旦出现&#xff0c;后期的涨幅通常将会超出我们的想象&…