精华内容
下载资源
问答
  • Unity 动态排行榜

    千次阅读 2018-12-10 18:09:03
    unity 动态排行榜 第一次写博客,有写的不好地方的请多多指教 使用到了 LitJson.dll 插件下载地址 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 ...

    2018.12.10
    unity 动态排行榜
    第一次写博客,有写的不好地方的请多多指教

    使用到了 LitJson.dll 插件下载地址
    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

    JSON建构于两种结构:

    “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
    值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
    这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。
    以上摘自-----https://www.json.org/json-zh.html

    json使用的难点在于必须要按照其指定的格式来读写json文件。
    下面的代码,我采用了生成类数组来写入json文件。
    然后用list链表来读取json文件。
    还利用到了file关键字。

    还有生成的数据用UI的表示方法也研究了很久

    下面是效果图

    随机生成5个数字,用ScrollView排成一列表示出来,从上到下分别对应从大到小

    Database这个脚本挂载在一个GameObject上面

    using System.Collections.Generic;
    using LitJson;
    using UnityEngine;
    using System.IO;
    using UnityEngine.UI;
    
    
    public class Database : MonoBehaviour {
    
        private JsonData Sdata;     //json数据实例化
        private List<Score> scoreData = new List<Score>();		//list初始化
    
        public int[] num = new int[5];		//数组初始化
        public GameObject[] text;			//用gameobject来管理Text UI
        public ScrollRect ScrollView;		//生成一个分数板UI
    
        void Start()
         {
    		SaveScore[] a = new SaveScore[5];		//类数组a初始化
            for (int i = 0; i < 5; i++)
            {
                int b = Random.Range(0, 10);			//随机生成五个0到10之间的数字	
                a[i] = new SaveScore				//生成对象a,并给scores赋值
                {
                    scores = b
                };
            }
            
            string json = JsonMapper.ToJson(a);		//把对象a转换成json型,然后再转成string型
            
            File.WriteAllText(Application.dataPath + "/ScoreAssets/Score.json", json);		//把json类型数据写入文件
    
            Sdata = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + "/ScoreAssets/Score.json"));		//读取并解析json文件,放入JsonData型的变量Sdata中
            ConstructDataBase();
            for (int i = 0; i < scoreData.Count; i++)
            {
                if (i < 5)
                {
                    num[i] = scoreData[i].PlayerScore;
                }
                else
                    break;
            }
            for (int i = 0; i < 5; i++)
            {
                var o = Instantiate(text[i]) as GameObject;		//生成text对象
                o.GetComponent<Text>().text = num[i].ToString();		//给textUI 添加数字
                o.GetComponent<RectTransform>();		//让UI排成一列
                o.transform.SetParent(ScrollView.transform.Find("Viewport").Find("Content"));		//设置textUI的父对象
            }
          }
          
          void ConstructDataBase()
          {
              for (int i = 0; i < Sdata.Count; i++)
              {
                  scoreData.Add(new Score((int)Sdata[i]["scores"]));		//把Sdata中的数据转成int格式,并添加到scoreData链表中
              }
              scoreData.Sort();		//对链表的数据进行排序
          }
    
        public class SaveScore		//SaveScore类的宣言
        {
            public int scores;
        }
    }
    

    Score脚本不用挂载,只用做数据处理

    using System.Collections.Generic;
    using UnityEngine;
    using System;
    
    public class Score : IComparable
    {
    	public GameObject Object;
    	public int PlayerScore
    	 {
    	  get; set;
    	}
    
    	public Score(int _score)
    	{
    		this.PlayerScore = _score;
    	}
    
    	public Score()
    	{
    		this.PlayerScore = -1;
    	}
    
    	public int CompareTo(object obj)		//数据对比排序
    	{
    		int result;
    		try
    		{
    			Score sortObj = obj as Score;
    			if (this.PlayerScore > sortObj.PlayerScore)
    			{
    				result = -1;
    			}
    			else
    				result = 1;
    			return result;
    		}
    		catch (Exception ex) { throw new Exception( ex.Message ); }
    	}
    }
    
    展开全文
  • 数据可视化练习-用powerBI生成自动播放的动态排行榜前言1. 前期准备:账号注册及软件下载2、数据获取及预处理3、可视化效果搭建4、发布共享其他 前言 最近在B站很流行各种动态排行榜视频,动态排行榜制作源代码...

    前言

    最近在B站很流行各种动态排行榜视频,动态排行榜制作源代码来自一位大神基于d3.js做的一个将历史数据排名转化为动态柱状图图表的数据可视化项目,但原项目中的图表在网页上是一次性运行,除非实时录屏,否则在其他电脑上需重做,无法直接分享,本人新入数据分析行业,尝试利用powerBI仿制可直接分享的动态排行榜

    1. 前期准备:账号注册及软件下载

    poweiBI Desktop 为在自己电脑上制作图表的BI软件
    注册powerBI账号可以在power BI online 将自己在Desk上制作的图表共享到网络
    powerBI Desktop 下载地址:https://www.microsoft.com/zh-CN/download/details.aspx?id=45331
    powerBI 账号注册官网:https://powerbi.microsoft.com/zh-cn/get-started/
    注意powerBI账号只能用企业型邮箱注册

    2、数据获取及预处理

    本次要做的排行数据为全国主要城市年末总人口排名,数据来源为国家统计局http://data.stats.gov.cn/easyquery.htm?cn=E0105&zb=A02&reg=110000&sj=2016
    powerBI Desk 可以从web获得不需验证的公开数据,但统计局网站数据下载需要登陆验证,鉴于爬虫功夫还没到家,我还是老实注册账号登陆下载数据
    数据初始格式如下
    在这里插入图片描述
    在powerBI里数据是以power query 编辑器模式打开,每一列是一个特征,只能做特征内值的比较而不能直接做特征之间比较,因此要做成动态排行榜,需要把上表里所有城市融为一列,所有人口数据融为一列,最终每行只有单城市在单独年份的人口数据
    要做这种转置在excel里很麻烦,但是在powerBI的power query 编辑器里确很简单,我们先打开power BI Desktop 在“开始”-“获得数据”-“excel”里选择刚才下载的表格
    在这里插入图片描述

    选取文件点击打开后,在弹出到导航器中勾选图表,并点击左下角中间按钮 “编辑”
    在这里插入图片描述
    如此便进入了powerquery 编辑器
    在这里插入图片描述
    首先通过“删除行”中的“删除前几行”和“删除后几行”将头三行及最末行的文字内容删除,通过删除列将最后一列数据有确实的1997年数据删除
    在这里插入图片描述
    然后通过“将第一行用作标题”将首行转为标题
    在这里插入图片描述
    接下来是第一个重点-转置环节,按住shift选中除地区列职位所有年份数值列,然后点击‘转换’中的**“逆透视列”**
    在这里插入图片描述
    转换结果如下
    在这里插入图片描述
    最后通过空值替换的方式把年份列中的“年”字全部清除掉,并将”属性“列选中,右键重命名为”年份“,数据的预处理就完成了
    在这里插入图片描述
    点击“关闭及应用”进入画布
    在这里插入图片描述

    3、可视化效果搭建

    首先我们来搭一个普通的排行榜
    选择画布右边可视化效果中的“簇状条形图”,然后将最右边的字段中“地区”拉到可视化效果编辑器中的“轴”,将字段“值”拉到编辑器中的“值
    在这里插入图片描述
    如果默认没有排序或不是按值排序可以通过可视化窗口右上角的下拉菜单进行调整
    在这里插入图片描述
    接下来是第二个重点-时间轴的引入
    在powerBI默认的可视化效果中并没有时间轴,这个效果叫做Play Axis,我们需要在powerBI的Marketplace中搜索并添加
    在这里插入图片描述
    导入成功后,点击画布上的空白地方,再点击可视化效果中的 play axis ,将字段中的“年份”拖到可视化编辑器中的“field”里
    在这里插入图片描述
    ok,时间轴和排行榜都到了,接着要解决它们的联动问题,因为直接点击播放会是这个样子
    在这里插入图片描述
    这是因为排行榜中默认的值显示方式是所有年份值的总和,而深绿色是对应时间轴单独年份的值,要解决这个问题我们进入下一步
    接下来是第三个重点-编辑交互
    点击菜单栏“格式”-“编辑交互”,会发现可视化窗口的右上角出现了三个小图标,点击最左边的漏斗型“筛选图表”
    在这里插入图片描述
    现在再按一下play axis 里的 播放键 会发现这次排行榜只显示当年的数据并且在动态变化了!
    如果要特别显示第一的城市,可以新建个卡片可视化窗口单独标注
    选择可视化效果“卡片图”,将“地区”拖到“字段”,在下方的筛选器中将“值”拖入视觉筛选器,筛选器类型下拉菜单选择“前N个”,显示项目下拉选择“上”,右边的空格中填入1,然后再次把“值”拖到下面的“按值”中
    在这里插入图片描述
    大致步骤已经完成了,细节部分可以通过可视化编辑器中间刷子按钮进入调整,比如设置柱条颜色,以及将时间轴设为自动播放和循环播放
    在这里插入图片描述

    4、发布共享

    点击”开始“-右上角“发布”将做好的表格发布到powerBI网页版,发布完成后,在网页版中可以打开在线编辑
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    再点击网页版的左上角文件里可以发布到web网页或者发布为ppt
    在这里插入图片描述
    发布网页会生成嵌入代码
    在这里插入图片描述
    如果不小心关掉了网页,重新登陆powerbi主业后点工作区-报表即可看到自己发布过的报表
    在这里插入图片描述

    编辑后我做的动态报表示例如下

    < width="800" height="600" src="https://app.powerbi.com/view?r=eyJrIjoiNDNlNzBkNDEtOWU5Yy00ZjlhLTlhZTktZjMxYTMzZGM1ZjMzIiwidCI6ImU4OGQ5ODBhLWQyYjAtNGEzMS05NWZhLTUxOTg2OTU3OTE2OCIsImMiOjN9" frameborder="0" allowFullScreen="true">

    web网址:https://app.powerbi.com/view?r=eyJrIjoiNDNlNzBkNDEtOWU5Yy00ZjlhLTlhZTktZjMxYTMzZGM1ZjMzIiwidCI6ImU4OGQ5ODBhLWQyYjAtNGEzMS05NWZhLTUxOTg2OTU3OTE2OCIsImMiOjN9

    其他

    目前大致框架就是这样,其实还有很多小细节有待改进,比如报表的动态效果还是不够流畅,后期会继续研究,另附B站动态排行榜大神Jannchie的js教程[B站数据可视化排行榜项目入门指南]

    展开全文
  • 在做2048游戏的时候要实现排行榜的功能: 1.超出显示范围可以通过滑动滚动条来上下查看 2.动态插入行 3.每次插入自动更新排名信息 其实和滑页效果类似,只不过需要再加入排序的元素。 1.超出显示范围可以通过滑动...

    在做2048游戏的时候要实现排行榜的功能:
    1.超出显示范围可以通过滑动滚动条来上下查看
    2.动态插入行
    3.每次插入自动更新排名信息

    其实和滑页效果类似,只不过需要再加入排序的元素。

    1.超出显示范围可以通过滑动滚动条来上下查看

    滑页效果(也就是超出显示范围如何显示)见Unity实现滑动更换界面的效果
    排行榜的rank、Viewport、content同滑页中的组件配置。
    在这里插入图片描述
    排行榜是由排名、名字、分数组成的。
    在这里插入图片描述

    滚动条的滑动是每一行每一行形式的,所以给容器Content加水平布局组件和容器大小的自适应。
    参数都是一点点试出来的,没别的办法==
    在这里插入图片描述

    2.动态插入行

    动态插入当然要用预制件了:也就是上图中的line
    关于line,每一行显然是竖直的布局(排名、名字、分数),所以加竖直布局组件,line是image,其下有三个Text(排名、名字、分数):
    参数都是一点点试出来的,没别的办法==
    在这里插入图片描述
    接下来就要用代码插入了,插入的调用在3中(因为游戏中的需求是输入名称点登陆后再在排行榜中插入),并且更新排行榜(更新的代码在3中,其实就是找到当前分数在排行榜中的位置,然后插入,在遍历其后元素让他们的排名都比前一位+1,最后只需要更新排名、名字、分数即可,并不用destroy)

    	/// <summary>
        /// 生成UI元素
        /// </summary>
        public void CreateNewLine(PlayerNode tmp)
        {
            //法1:通过GameObject
            //法2:通过预制件
            GameObject l = Instantiate(line);
            l.transform.SetParent(transform);
            l.transform.GetChild(0).GetComponent<Text>().text = tmp.Rank.ToString();
            l.transform.GetChild(1).GetComponent<Text>().text = tmp.Name;
            l.transform.GetChild(2).GetComponent<Text>().text = tmp.Score.ToString();
        }
    
        public void updateRank(List<PlayerNode> players)
        {
            for(int i = 0; i < transform.childCount; i++)
            {
                //Destroy(transform.GetChild(i).gameObject);
                Transform l = transform.GetChild(i);
                l.GetChild(0).GetComponent<Text>().text = players[i].Rank.ToString();
                l.GetChild(1).GetComponent<Text>().text = players[i].Name;
                l.GetChild(2).GetComponent<Text>().text = players[i].Score.ToString();
            }
            //for(int i = 0; i < players.Count; i++)
            //{
            //    CreateNewLine(players[i]);
            //}
        }
    

    3.每次插入自动更新排名信息

    public class PlayerNode
        {
            public string Name { get; set; }
            public int Score { get; set; }
            public int Rank { get; set; }
    
            public PlayerNode(string name, int score, int rank) : this()
            {
                this.Name = name;
                this.Score = score;
                this.Rank = rank;
            }
    
            public PlayerNode()
            {
            }
        }
    

    然后存在容器中,每次插入新行就更新所有行的排名:

    public List<PlayerNode> players = new List<PlayerNode>(); 
    
    	/// <summary>
        /// 当点击登录时
        /// </summary>
        public void Load()
        {
            if (inputField.text != null)
            {
                PlayerNode tmp = new PlayerNode(inputField.text, int.Parse(GC.NowScore.text), 1);
                rc.CreateNewLine(tmp);
                if (isFirst)//如果是第一次插入
                {
                    players.Add(tmp);
                    isFirst = false;
                }
                else
                {
                    int rankIndex = 0;
                    for (int i = 0; i < players.Count; i++)
                    {
                        if (tmp.Score > players[i].Score)
                        {
                            rankIndex = i;
                            tmp.Rank = i + 1;
                            players.Insert(rankIndex, tmp);
                            rankIndex = i + 1;
                            break;
                        }
                    }
                    if (rankIndex == 0)
                    {
                        tmp.Rank = players.Count + 1;
                        players.Insert(players.Count, tmp);
                    }
                    else
                    {
                        for (int i = rankIndex; i < players.Count; i++)
                        {
                            players[i].Rank = players[i - 1].Rank + 1;
                        }
                    }
                }
                rc.updateRank(players);
            }
            //if (players.Count > 2)
            //{
            //    for(int i = 0; i < players.Count; i++)
            //    {
            //        print(players[i].Rank + "-" + players[i].Name + "-" + players[i].Score);
            //    }
            //}
            gameObject.SetActive(false);
        }
    }
    
    展开全文
  • 我用Python做了一个编程语言20年的动态排行榜! 在编程语言的舞台上,一直有着谁是最好的语言的竞争,小编虽然一直用着几种编程语言,但是感觉个人的想法不能代表着大家的想法。虽然关于最好语言的争论从未停止过,...

    原标题:牛逼操作!我用Python做了一个编程语言20年的动态排行榜!

    在编程语言的舞台上,一直有着谁是最好的语言的竞争,小编虽然一直用着几种编程语言,但是感觉个人的想法不能代表着大家的想法。虽然关于最好语言的争论从未停止过,但是关于编程语言的热度排名,我们可以从TIOBE 编程语言排行榜上进行探索。

    今天,小编就带领大家爬取一下,自2001年5月至今,TIOBE 编程语言排行榜上编程语言的变化情况,看一下在接近20年的时间里,编程语言的热度是如何变化的。

    01.编程语言资料获取

    首先我们是进行的是资料的获取,我们打开链接https://www.tiobe.com/tiobe-index/,就可以看到TIOBE编程语言的排行榜,通过查看其网页源代码,可以发现,我们想要爬取的资料,都显示在网页源代码里,如下图所示:

    接下来就可以直接利用爬虫来获取网页源代码,并利用正则表达式来匹配我们需要的关键字内容,部分程序如下图所示:

    上述程序中,我们对于抓取到的数据,进行正则表达式匹配,然后提取各个编程语言在不同时间段的热度数值,并保存到本地的文件中。

    02.清洗数据

    接下来,我们要完成的就是利用动态可视化的柱状图来观察各种编程语言随着时间的热度变化。我们先对数据进行清洗,获取编程语言的名字一起设置一个嵌套的字典,程序如下图所示:

    上述程序中的嵌套字典含义为每一个月份下的每种编程语言的热度值,其结构格式如下所示:

    {“2020-1-12”:{“Java”:16, “C++”:14, “python”:10,…}, “2020-2-13”:{“Java”:16.3, “C++”:15.6, …},…}。

    03.设置柱状图的颜色

    为了在可视化过程中区分每一种编程语言,需要为柱状图中的每一柱都设置不同的颜色,同时,将嵌套字典按照月份的顺序进行排序,程序如下所示:

    04.大功告成,动态显示

    最后,我们便可以对数据进行可视化的展示,程序如下图所示:

    上述程序中,首先需要清除figure 中的活动轴,我们对于嵌套字典的每一个月份,将每一个月份中的编程语言,按照其热度值进行从小到大的排序,然后将排序号的编程语言,关联其对应的柱状图颜色。

    05.动态现实图

    接下来就可以画出我们的柱状图,然后暂停显示结果,并不断循环,从而达到动态柱状图的功能,其效果如下图所示:

    06.更炫酷的动态图

    如果大家觉得图做的不够优美,大家可以利用js进行数据渲染制作,这里小编也为大家利用Flourish制作了一个更加好看的界面,如下图所示:

    从上面的可视化动图可以看出, Java和C语言一直是牢牢地掌控着编程语言热度前两名的宝座,而python语言,凭借着人工智能的热潮,逐渐的从排名末尾,一路追赶,排名在第三位,并逐渐拉开了与第四名的差距,可谓是编程语言界的逆袭王者。

    而像是C++和PHP,其热度却逐渐的走低。虽然编程语言热度有高有低,但是不可否认的是,每一门编程语言,都有其应用的价值,能够在编程语言的历史长河中历经洗礼,而没有被淘汰,只要好好掌握一门语言,都会有用武之地。

    每天分享一些有趣的干货 返回搜狐,查看更多

    责任编辑:

    展开全文
  • 虽然关于最好语言的争论从未停止过,但是关于编程语言的热度排名,我们可以从TIOBE 编程语言排行榜上进行探索。今天,小编就带领大家爬取一下,自2001年5月至今,TIOBE 编程语言排行榜上编程语言的变化情况,看一下...
  • 点击关注上方“SQL数据库开发”,设为“置顶或星标”,第一时间送达干货之前发布了一篇Power BI的简明教程,在文中发布了一个《1960-2018年全球GDP前十排行榜》的视频,还没看...
  • 虽然关于最好语言的争论从未停止过,但是关于编程语言的热度排名,我们可以从TIOBE 编程语言排行榜上进行探索。 今天,小编就带领大家爬取一下,自2001年5月至今,TIOBE 编程语言排行榜上编程语言的变化情况,看一下...
  • 在编程语言的舞台上,一直有着谁是最好的语言的竞争,小编虽然一直用着几种...虽然关于最好语言的争论从未停止过,但是关于编程语言的热度排名,我们可以从TIOBE 编程语言排行榜上进行探索。今天,小编就带领大家爬...
  • 虽然关于最好语言的争论从未停止过,但是关于编程语言的热度排名,我们可以从TIOBE 编程语言排行榜上进行探索。今天,小编就带领大家爬取一下,自 2001 年 5 月至今,TIOBE 编程语言排行榜上编程语言的变化情况,看...
  • 虽然关于最好语言的争论从未停止过,但是关于编程语言的热度排名,我们可以从TIOBE 编程语言排行榜上进行探索。 今天,小编就带领大家爬取一下,自2001年5月至今,TIOBE 编程语言排行榜上编程语言的变化情况,看一下...
  • 虽然关于最好语言的争论从未停止过,但是关于编程语言的热度排名,我们可以从TIOBE 编程语言排行榜上进行探索。 今天,小编就带领大家爬取一下,自2001年5月至今,TIOBE 编程语言排行榜上编程语言的变化情况,看一下...
  • 虽然关于最好语言的争论从未停止过,但是关于编程语言的热度排名,我们可以从TIOBE 编程语言排行榜上进行探索。 今天,小编就带领大家爬取一下,自 2001 年 5 月至今,TIOBE 编程语言排行榜上编程语言的变化情况,看...
  • 虽然关于最好语言的争论从未停止过,但是关于编程语言的热度排名,我们可以从TIOBE 编程语言排行榜上进行探索。今天,小编就带领大家爬取一下,自2001年5月至今,TIOBE 编程语言排行榜上编程语言的变化情况,看一下...
  • 虽然讲道理谁也不服谁,但是关于编程语言的热度排名,我们是可以从 TIOBE 编程语言排行榜上得到结论的。今天就带大家探索一下,自2001年5月至今,TIOBE 编程语言排行榜上编程语言的变化情况,看一下在接近20年的时间...
  • Vue ,Js,前端实现排行榜前三动态切换图标 这可能是个小功能,但是就是想记录一下,希望能帮到你 效果图 这个功能或许还是比较常见,但是网上好像暂时没有过多的案例,所以做个记录 <template> //主体 <...
  • 每个游戏中都会有一些排行 ...这里给大家一些最最简单的排行榜的代码 private List<int> score = new List<int>(); private int[] nums; private Text ScoreText; private string UItext=""; pr...
  • 最近有需求做一个排行榜,需要根据某一参数大小插入到排行榜中,但是要有一个插入后后续榜单元素下移的效果。代码如下: using System.Collections; using System.Collections.Generic; using UnityEngine; using ...
  • 用Echarts制作动态条形图排行榜

    万次阅读 2018-08-12 01:49:17
    最近在做各种排行榜的视频,整体排行榜的页面图形效果都是用另外一个开源代码实现的,主体是js+svg。 https://www.bilibili.com/video/av28871057/ echarts作为封装很好的一套可视化库,不知道是否能做到相同的...
  • ,打开排行榜,打开抓包工具(F12),并找到NetWord ,接着定位到XHR, 第三,既然是动态获取,那就肯定会有一定的规律 ,我们滑动首页,就可以发现,每次滑到底部,就会有新的一批数据出现,右边的XHR就会多一行...
  • 动态心电图(Dynamic Electrocardiography DCG)于1957年由美国Holter首创,故又称Holter心电图.国外1961年由Del Mar最先推出Holter系统应用于临床,1978年4月,我国引进Holter监测技术;近年来国内迅猛发展,动态心电图...
  • 看了B站上一些动态排行榜视频,感觉非常酷炫,自己也想学习一下,做一个。 搜索了下相关资料,找到了一个Jannchie见齐开源在github上的排行榜可视化项目,就是它了。 看了下项目说明,关键就是准备数据了,下面介绍...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 671
精华内容 268
关键字:

动态排行榜