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

这篇具有很好参考价值的文章主要介绍了Unity中画2D图表(1)——用XChart包绘制折线图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

一、折线图的绘制效果

二、用到的包

1、XChart介绍

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

2、XChart官方链接

https://github.com/XCharts-Team/XCharts文章来源地址https://www.toymoban.com/news/detail-508814.html

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

  • 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("测试")]
#endif
    void Test()
    {
        DrawLineFlow();
    }
}

到了这里,关于Unity中画2D图表(1)——用XChart包绘制折线图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity2D绘制游戏地图

    首先,我们选择我们的地图素材(由于笔者在前段时间已经进行切割,最近才开始整理这一段,所以这个是用的老素材,可能有朋友就会觉得切割前后不一致,但是思路是一样的,大家学习思路即可)  接着,我们找到右上角的Slice进行图片切割,我这边简单介绍一下这个切

    2024年02月08日
    浏览(50)
  • QT图表-折线图、曲线图

    时间记录:2024/1/15 1.添加图表模块 .pro项目管理文件中添加charts模块 QChart类:图表类 QChartView类:图表显示类 2.ui文件中添加QChartView组件 (1)选择一个QGrapicsView组件将其拖拽到ui界面上合适位置 (2)右键新添加的QGrapicsView组件,将组件提升为QChartView组件 3.添加QChartView类的命

    2024年01月18日
    浏览(47)
  • 【unity实战】随机地下城生成2——绘制地图Tilemap的使用及一些技巧的使用(含源码)

    参考原视频链接: 【视频】:https://space.bilibili.com/370283072 注意 :本文为学习笔记记录,推荐支持原作者,去看原视频自己手敲代码理解更加深入 修改素材配置 切割图片 绘制瓦片地图 先新建我们的调色盘,保存好位置 拖入我们刚才切片好的素材 在房间预设体创建我们的瓦

    2024年02月13日
    浏览(45)
  • Unity +Webgl+AVProVideo+海康监控M3U8取码流+XChart

    心路历程:博主接到任务:做一版可发布的webgl版的数字可视化项目。着重点就是海康监控与webgl的兼容问题,博主在网上搜了一堆方案,还是有可取的地方,为了方便以后使用,博主记录一下心路历程。博主博主第一次写日志,希望对广大网友有所帮助; 重要信息前置:以

    2024年02月16日
    浏览(49)
  • VC++ 利用MFC的CWindowDC类实现画线功能 在桌面窗口中画线 绘制彩色线条

    利用MFC的CWindowDC类实现画线功能 先介绍一个MFC类:CWindowDC,这个类也派生于CDC类,并且在构造时调用GetWindowDC函数获得相应的设备描述表对象,在析构时调用ReleaseDC函数释放该设备描述对象所占用的资源。也就是说,当我们利用CWindowDC对象绘图时,也不需要显式地调用GetDC和

    2023年04月23日
    浏览(48)
  • 前端可视化入门与实战:D3 高级图表实战:柱状图、折线图

    在上一节我们介绍了 SVG 的进阶使用及图表实现,但是单纯用 SVG 实现图表,会有一个很大的问题,就是没有规范,正规封装图表库,我们需要封装大量的基础类和通用方法,比如需要封装适配不同数据的比例尺。 如果我们前期不去做这些繁琐的基础工作,就会让后期维护越

    2024年04月11日
    浏览(53)
  • 【EXCEL】给数据添加图表(数据条、柱状图、折线图等),快速分析功能图文详解

    目录 0.环境 1.背景+简介 2.具体实现 2.1 给数据添加数据条 实现效果: 具体操作:  2.2 给数据添加柱状图图表 实现效果: 具体操作: 2.3 给数据添加迷你图(在表格中的折线图) 实现效果: 具体操作: windows + excel 2021 希望给数字类的数据增加多种形式的可视化,让数据看起

    2024年02月12日
    浏览(38)
  • 十一、Echart图表 之 series-line折线图(面积图)基本使用与配置大全

    🍓 作者主页:💖仙女不下凡💖 🍓 前言介绍:以下👇内容是我个人对于该技术的总结,如有不足与错误敬请指正! 🍓 欢迎点赞👍 收藏⭐ 留言📝 相关账号会持续发布关于文章Echart的相关文章欢迎持续关注! 🍓Echart官网地址:https://echarts.apache.org/examples/zh/index.html#char

    2024年01月23日
    浏览(44)
  • PyLab绘制曲线图

    PyLab 是一个面向 Matplotlib 的绘图库接口,其语法和 MATLAB 十分相近。它和 Pyplot 模快都够实现 Matplotlib 的绘图功能。PyLab 是一个单独的模块,随 Matplotlib 软件包一起安装,该模块的导包方式和 Pyplot 不同,如下所示: PyLab 是一个很便捷的模块,下面对它的使用方法做相应的介绍

    2024年02月16日
    浏览(58)
  • Matlab绘制箱线图

    目录 1.箱线图例子1  2.绘制无颜色的箱线图例子  当需要绘制无颜色的箱线图时,内部采用线条填充 但是:填充简单图例不好整,所以图例是再手动绘制的图例,需要慢慢调整

    2024年02月16日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包