第十、十一章、十二章 折线图 + 地图 + 柱状图的绘制

 第十章  折线图的绘制

 官网:pyecharts - A Python Echarts Plotting Library built with love.

画廊官网:Document

懒人工具:懒人工具-手机APP工具下载-手机软件下载大全 - 173软件站 (ab173.com)

导学

json

定义

(1)JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据

(2)JSON本质上是一个带有特定格式的字符串。

功能

json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互。类似于

python数据和json数据的相互转化

python和json格式是可以无缝切换的,json是字符串

json就是把Python中:

  1. 列表(该列表的元素都是字典),把该列表也变成字符串
  2. 字典转化为字符串

import json
# 准备列表,列表内每一个元素都是字典,将其转换为json
data = [{"name":"张大山", "age": 11}, {"name":"王大锤", "age": 13}, {"name":"赵小虎", "age": 16}]
json_str = json.dumps(data, ensure_ascii=False) 
print(type(json_str))
print(json_str)# 准备字典,将字典转换为json
d = {"name": "周杰伦", "addr": "台北"}
json_str = json.dumps(d, ensure_ascii=False)
print(type(json_str))
print(json_str)# 将json字符串转换为python数据类型[{k: v, k: v}, {k: v, k: v}]
s = '[{"name":"张大山", "age": 11}, {"name":"王大锤", "age": 13}, {"name":"赵小虎", "age": 16}]'
l = json.loads(s)
print(type(l))
print(l)# 将json字符串转换为python数据类型{k: v, k: v}
s = '{"name": "周杰伦", "addr": "台北"}'
d = json.loads(s)
print(type(d))
print(d)
<class 'str'>
[{"name": "张大山", "age": 11}, {"name": "王大锤", "age": 13}, {"name": "赵小虎", "age": 16}]
<class 'str'>
{"name": "周杰伦", "addr": "台北"}
<class 'list'>
[{'name': '张大山', 'age': 11}, {'name': '王大锤', 'age': 13}, {'name': '赵小虎', 'age': 16}]
<class 'dict'>
{'name': '周杰伦', 'addr': '台北'}

另注:

pyecharts

简介

安装

测试安装成功与否

入门使用

# 从pyecharts包中的charts模块中导入Line功能
from pyecharts.charts import Line
from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts, VisualMapOpts
# 创建一个折线图对象
line = Line()
# 给折线图对象添加x轴的数据
line.add_xaxis(["中国", "美国", "英国"])
# 给折线图对象添加y轴的数据
line.add_yaxis("GDP",[30, 20, 10])# 设置全局配置项set_global_opts来设置
line.set_global_opts(title_opts=TitleOpts(title="GDP展示", pos_left="center", pos_bottom="1%"), # 设置标题:标题名,标题距离左边的距离,标题距离底部的距离legend_opts=LegendOpts(is_show=True),toolbox_opts=ToolboxOpts(is_show=True),visualmap_opts=VisualMapOpts(is_show=True)
)
# 通过render方法,将代码生成为图像
line.render()

pyecharts模块中有很多的配置选项,常用到2个类别的选项包括:

  1. 全局配置选项:针对整个图像进行设置,例如:图像的标题、图例、工具箱等
  2. 系列配置选项:针对具体的轴数据进行设置

全局配置选项

  •       title_opts :表示标题组件的配置项。
  •       legend_opts:表示图例组件的配置项。
  •       tooltip_opts : 表示提示框组件的配置项。
  •       toolbox_opts :表示工具箱组件的配置项。
  •       brush_opts:表示区域选择组件的配置项。
  •       xaxis_opts,yaxis_opts:表示x轴、y轴的配置项。
  •       visualmap_opts :表示视觉映射组件的配置项。
  •       datazoom_opts :表示数据区域缩放组件的配置项。

案例:美、日、印疫情

import json
from pyecharts.charts import Line
from pyecharts.options import TitleOpts# 处理数据
f_us = open("C:/Users/18757/Desktop/pythontext/美国.txt", "r", encoding = "UTF-8")
us_data = f_us.read()f_jp = open("C:/Users/18757/Desktop/pythontext/日本.txt", "r", encoding = "UTF-8")
jp_data = f_jp.read()f_in = open("C:/Users/18757/Desktop/pythontext/印度.txt", "r", encoding = "UTF-8")
in_data = f_in.read()# 去除开头不要的数据
us_data = us_data.replace("jsonp_1629344292311_69436(", "")
jp_data = jp_data.replace("jsonp_1629350871167_29498(", "")
in_data = in_data.replace("jsonp_1629350745930_63180(", "")# 去除结尾不要的数据
us_data = us_data[:-2]
jp_data = jp_data[:-2]
in_data = in_data[:-2]# json转化为python数据
us_dict = json.loads(us_data)
jp_dict = json.loads(jp_data)
in_dict = json.loads(in_data)# 获取trend字典数据
us_trend_data = us_dict["data"][0]["trend"]
jp_trend_data = jp_dict["data"][0]["trend"]
in_trend_data = in_dict["data"][0]["trend"]# 获取日期数据,用于x轴,取2020年(到314下标结束)
x_data = us_trend_data["updateDate"][:314]# 获取疫情数据,用于y轴,取2020年(到314下标结束)
us_y_data = us_trend_data["list"][0]["data"]
jp_y_data = jp_trend_data["list"][0]["data"]
in_y_data = in_trend_data["list"][0]["data"]# 生成图表
line = Line()# 添加x轴数据
line.add_xaxis(x_data)# 添加y轴数据
line.add_yaxis("美国确诊人数",us_y_data, label_opts=False) # label_opts是控制数值是否显示的
line.add_yaxis("日本确诊人数",jp_y_data, label_opts=False)
line.add_yaxis("印度确诊人数",in_y_data, label_opts=False)# 设置全局配置项set_global_opts来设置
line.set_global_opts(title_opts=TitleOpts(is_show=True,title="2020年美日印三国确诊人数对比折线图",pos_bottom="1%",pos_left="center")
)line.render()

 第十一章  地图的绘制

基础地图使用


from pyecharts.charts import Map
from pyecharts.options import VisualMapOpts
map = Map()data = [("北京市", 99),("上海市", 199),("湖南省", 299),("台湾省", 399),("广东省", 499)
]
map.add("测试地图", data, "china")
map.set_global_opts(visualmap_opts=VisualMapOpts(is_show=True,is_piecewise=True,  # 表示需要设置视觉映射组件的显示范围pieces=[            # 开始设置视觉映射组件的显示范围{"min":1, "max":9, "label":"1-9","color":"#275612"},{"min":10, "max":99, "label":"10-99","color":"#FFE4B5"},{"min":100, "max":500, "label":"100-500","color":"#E6E6FA"},])
)map.render()

全国疫情地图构建

import json
from pyecharts.charts import Map
from pyecharts.options import TitleOpts, VisualMapOpts
# 读取数据文件
f = open("C:/Users/18757/Desktop/pythontext/疫情.txt", "r", encoding = "UTF-8")
data = f.read()# 关闭文件
f.close()# 将字符串json转换为python的字典
data_dict = json.loads(data)# 从字典中取到各省数据
province_data_list = data_dict["areaTree"][0]["children"]# 组装每个省份和确诊人数为元组、并各个省的数据都封装入列表内
data_list = []
for province_data in province_data_list:province_name = province_data["name"] + "省"province_confirm = province_data["total"]["confirm"]data_list.append((province_name, province_confirm))
# 创建地图对象
map = Map()# 添加数据
map.add("各省份确诊人数", data_list, "china")# 设置全局配置、定制分段的视觉映射
map.set_global_opts(title_opts = TitleOpts("全国疫情地图"),visualmap_opts = VisualMapOpts(is_show=True,is_piecewise=True,pieces=[{"min":1, "max":99, "label":"1-99人","color":"#CCFFFF"},{"min":100, "max":999, "label":"1-999人","color":"#FFFF99"},{"min":1000, "max":4999, "label":"1000-4999人","color":"#FF9966"},{"min":5000, "max":9999, "label":"5000-9999人","color":"#FF6666"},{"min":10000, "max":99999, "label":"10000-99999人","color":"#CC3333"},{"min":100000, "label":"100000+","color":"#990033"},])
)# 绘图
map.render("全国疫情地图.html")

import json
from pyecharts.charts import Map
from pyecharts.options import TitleOpts, VisualMapOpts
# 读取数据文件
f = open("C:/Users/18757/Desktop/pythontext/疫情.txt", "r", encoding = "UTF-8")
data = f.read()# 关闭文件
f.close()# 将字符串json转换为python的字典
data_dict = json.loads(data)# 从字典中取到河南省数据
henan_province_data_list = data_dict["areaTree"][0]["children"][3]["children"]
# 组装河南省每个城市名字和该城市确诊人数为元组、并将该元组都封装入列表内
data_list = []
for henan_province_data in henan_province_data_list:henan_province_name = henan_province_data["name"] + "市"henan_province_confirm = henan_province_data["total"]["confirm"]data_list.append((henan_province_name, henan_province_confirm))
# 创建地图对象
map = Map()# 添加数据
map.add("河南省确诊人数", data_list, "河南")# 设置全局配置、定制分段的视觉映射
map.set_global_opts(title_opts = TitleOpts("河南省疫情地图"),visualmap_opts = VisualMapOpts(is_show=True,is_piecewise=True,pieces=[{"min":1, "max":99, "label":"1-99人","color":"#CCFFFF"},{"min":100, "max":999, "label":"1-999人","color":"#FFFF99"},{"min":1000, "max":4999, "label":"1000-4999人","color":"#FF9966"},{"min":5000, "max":9999, "label":"5000-9999人","color":"#FF6666"},{"min":10000, "max":99999, "label":"10000-99999人","color":"#CC3333"},{"min":100000, "label":"100000+","color":"#990033"},])
)# 绘图
map.render("河南省疫情地图.html")

第十二章 柱状图的构建

基础柱状图

# 使用Bar构建基础柱状图
from pyecharts.charts import Bar
from pyecharts.options import LabelOpts
bar = Bar()
# 添加x轴的数据
bar.add_xaxis(["中国", "美国", "英国"])
# 添加y轴的数据
bar.add_yaxis("GDP",[30, 20, 10], label_opts=LabelOpts(position="right")) # 设置数值标签在右侧
# 反转x轴和y轴
bar.reversal_axis()bar.render("基础柱状图.html")

基础时间线柱状图创建

设置自动播放

时间线设置主题

# 使用Bar构建基础柱状图
from pyecharts.charts import Bar, Timeline
from pyecharts.options import LabelOpts
from pyecharts.globals import ThemeTypebar1 = Bar()
bar1.add_xaxis(["中国", "美国", "英国"])
bar1.add_yaxis("GDP",[30, 20, 10], label_opts=LabelOpts(position="right")) # 设置数值标签在右侧
bar1.reversal_axis()bar2 = Bar()
bar2.add_xaxis(["中国", "美国", "英国"])
bar2.add_yaxis("GDP",[50, 50, 50], label_opts=LabelOpts(position="right")) # 设置数值标签在右侧
bar2.reversal_axis()bar3 = Bar()
bar3.add_xaxis(["中国", "美国", "英国"])
bar3.add_yaxis("GDP",[70, 60, 60], label_opts=LabelOpts(position="right")) # 设置数值标签在右侧
bar3.reversal_axis()# 构建时间线对象,并对主题进行设置
timeline = Timeline({"theme": ThemeType.LIGHT})
# 在时间线内添加柱状图对象
timeline.add(bar1,"点1")
timeline.add(bar2,"点2")
timeline.add(bar3,"点3")
# 自动播放设置
timeline.add_schema(play_interval=1000,     #自动播放的时间间隔,单位毫秒is_timeline_show=True,  # 是否在自动播放的时候,显示时问线is_auto_play=True,      #是否自动播放is_loop_play=True# 是否循环自动播放
)
# 绘图使用时间线绘图
timeline.render("基础时间线柱状图创建.html")

动态GDP柱状图绘制

  

from pyecharts.charts import Bar, Timeline
from pyecharts.globals import ThemeType
from pyecharts.options import LabelOpts,TitleOpts
# 读取数据
f = open("C:/Users/18757/Desktop/pythontext/1960-2019全球GDP数据.csv", "r", encoding="GB2312") # GB2312是ANSI编码所对应的
data_lines = f.readlines()
# 关闭文件
f.close()
# 删除第一条数据
data_lines.pop(0)
# ['1960,美国,5.433E+11\n', '1960,英国,73233967692\n', '1961,美国,5.633E+11\n']
# 将数据转换为字典存储,格式为:{年份:[[国家,gdp],[国家,gdp],......],年份:[[国家,gdp],[国家,gdp],...…..],......)
data_dict = {}
for line in data_lines:temp_list = line.split(",") # 一个个的[1960,美国,5.433E+11]year = int(temp_list[0])country = temp_list[1]gdp = float(temp_list[2])                   # 为了将科学计数法计数的数字转化过来# 此时已经取到 year country gdp# 如果此时入的数据是第一个即将加入的年份的话,需要创建一个列表,否则直接添加元素即可try:                        # 正常情况data_dict[year].append([country, gdp])except KeyError:            # 是第一个即将加入的年份的情况data_dict[year]=[]data_dict[year].append([country, gdp])# 取出从小到大的年份,以便构建时间线
sorted_year_list = sorted(data_dict.keys())
# 设置时间线对象,基于每一年的数据,创建每一年的bar对象
timeline = Timeline({"theme": ThemeType.LIGHT})
# for循环每一年的数据,基于每一年的数据,创建每一年的bar对象
for year in sorted_year_list:# data_dict[year]相当于取出year年的:[[国家,gdp],[国家,gdp], ...]data_dict[year].sort(key=lambda element : element[1], reverse=True) # 使今年的GDP按照从大到小排列# 得到[[国家,gdp],[国家,gdp], ...]里面的[国家,gdp]按照gdp从大到小排列# 取出本年份前八名的国家,得到前八名的[[国家,gdp],[国家,gdp], ...]before_8_country = data_dict[year][0:8]# 创建gdp前8名国家的x轴和y轴数据列表x_data = []y_data = []for gdp_data in before_8_country:   #每次遍历一个[国家,gdp]x_data.append(gdp_data[0])y_data.append(gdp_data[1] / (1e+8))x_data = x_data[::-1]y_data = y_data[::-1]# 创建柱状图bar = Bar()bar.add_xaxis(x_data)bar.add_yaxis("GDP(亿)", y_data,label_opts=LabelOpts(position="right"))bar.reversal_axis()bar.set_global_opts(title_opts = TitleOpts(title = f"{year}年全球前8GDP国家"))# 至此时间线上的一个结点数据就完成了,将该结点加入时间线中timeline.add(bar,str(year))# 设置时间线自动播放
timeline.add_schema(play_interval=1000,is_loop_play=True,is_auto_play=True,is_timeline_show=True
)timeline.render("1960-2019全球GDP数据.html")

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

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

相关文章

js的算法-交换排序(冒泡)

交换排序 所谓交换排序&#xff0c;是指根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。基于交换的排序算法很多&#xff0c;本次介绍冒泡排序和快速排序。 冒泡 基本思想 从后往前&#xff08;或从前往后&#xff09;两两比较相邻元素的值&#xff0…

开启医疗数据新纪元:山海鲸可视化智慧医疗解决方案

在数字化浪潮席卷而来的今天&#xff0c;智慧医疗作为医疗行业的创新力量&#xff0c;正以其独特的技术优势&#xff0c;推动着医疗服务的升级和变革。而在这场变革中&#xff0c;山海鲸可视化以其出色的数据可视化能力&#xff0c;为智慧医疗提供了强大的技术支持&#xff0c;…

PMP®考试的形式、题型、考试内容和趋势

PMP考试形式&#xff1a; 国内的PMP考试是由中国国际人才交流基金会和PMI共同组织举办&#xff0c;统一采取的都是线下笔试。一年考4次&#xff0c;今年的考试安排在3月、6月、8月、11月。3月10日的PMP考试已结束&#xff0c;接下来是6月份的考试&#xff0c;考试时间预计在6月…

qt tcp 连接 秒断连

问题&#xff1a; tcp连接总是秒成功后断连 debug会出现下面这些 onecore\net\netprofiles\service\src\nsp\dll\namespaceserviceprovider.cpp(550)\nlansp_c.dll!00007FFDA2A1D93D: (caller: 00007FFDD8BEACF6) LogHr(1) tid(336c) 8007277C ¡£¡£ one…

一例MFC文件夹病毒的分析

概述 这是一个MFC写的文件夹病毒&#xff0c;通过感染USB设备传播&#xff0c;感染后&#xff0c;会向c2(fecure.info:443)请求指令来执行。 样本的基本信息 Verified: Unsigned Link date: 19:52 2007/7/5 MachineType: 32-bit MD5: 4B463901E5858ADA9FED28FC5…

CJSON工具类

4.4.3.CJSON工具类 OpenResty提供了一个cjson的模块用来处理JSON的序列化和反序列化。 官方地址&#xff1a; https://github.com/openresty/lua-cjson/ 1&#xff09;引入cjson模块&#xff1a; local cjson require "cjson"2&#xff09;序列化&#xff1a; …

STM32学习和实践笔记(21):定时器中断实验

通用定时器配置步骤如下&#xff1a; 第一步&#xff1a;使能定时器时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能TIM4时钟 第二步&#xff1a;初始化定时器参数,包含自动重装值&#xff0c;分频系数&#xff0c;计数方式等 voidTIM_TimeBaseInit(TIM_T…

YJW-10000微机控制电液伺服压剪试验机

一、项目概述 YJW-10000微机控制电液伺服压剪试验机采用油缸下置式、四立柱结构&#xff0c;机架刚度强度高&#xff0c;变形小&#xff0c;满足公路、铁路桥梁板式、盆式、球型支座的检测要求&#xff0c;试验空间无级可调&#xff0c;方便不同高度的试验需求。采用试金自主研…

怎样快速插入数据

1、30万条数据插入插入数据库验证 1.1、表结构&#xff1a; CREATE TABLE t_user (id int(11) NOT NULL AUTO_INCREMENT COMMENT 用户id,username varchar(64) DEFAULT NULL COMMENT 用户名称,age int(4) DEFAULT NULL COMMENT 年龄,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT…

如何设置微信自动回复?教你快速上手!

自动回复对于需要在微信上洽谈业务的人来说&#xff0c;无疑是非常实用的一个功能。 下面就一起来看看微信管理系统的机器人自动回复都有哪些设置吧&#xff01; 1、自动通过好友 只要有新的好友请求发送到你的微信账号&#xff0c;系统会自动通过该请求&#xff0c;无需手动…

vue flvjs 播放视频

写在前面&#xff1a; 之前使用过vodiejs插件播放过mp4视频格式的视频&#xff1b; 此次需要使用flvjs插件播放rtsp视频格式的视频&#xff1b; 因为视频的数据格式不同&#xff0c;所以对应的插件不同。 思维导图&#xff1a; 参考链接&#xff1a;rtmp、rtsp、flv、m3u8、 …

深度学习与目标检测:从卷积神经网络到YOLOv8概念介绍

深度学习与目标检测&#xff1a;从卷积神经网络到YOLOv8的深入探索 随着人工智能技术的迅猛发展&#xff0c;深度学习和计算机视觉领域取得了举世瞩目的成果。在目标检测这一关键任务中&#xff0c;卷积神经网络&#xff08;CNN&#xff09;和YOLO系列模型发挥着至关重要的作用…

Redis中的Lua脚本(六)

Lua脚本 清空repl_scriptcache_dict字典 每当主服务器添加一个新的从服务器时&#xff0c;主服务器都会清空自己的repl_scriptcache_dict字典&#xff0c;这是因为随着新从服务器的出现&#xff0c;repl_scriptcache_字典里面记录的脚本已经不再被所有从服务器载入过&#xf…

使用 pytorch训练自己的图片分类模型

如何自己训练一个图片分类模型&#xff0c;如果一切从头开始&#xff0c;对于一般公司或个人基本是难以实现的。其实&#xff0c;我们可以利用一个现有的图片分类模型&#xff0c;加上新的分类&#xff0c;这种方式叫做迁移学习&#xff0c;就是把现有的模式知识&#xff0c;转…

Python实战 | 只需“4步”入门网络爬虫(小白也会)

文章目录 Python实战 | 只需“4步”入门网络爬虫&#xff08;小白也会&#xff09;1&#xff1a;确定目标网站和数据2&#xff1a;安装必要的库3&#xff1a;编写爬虫代码4.目标网站的URL5.发送HTTP请求并获取响应内容6.使用BeautifulSoup解析HTML内容7.查找包含新闻标题和链接…

【golang学习之旅】Go 的基本数据类型

系列文章 【golang学习之旅】报错&#xff1a;a declared but not used 目录 系列文章总览布尔型&#xff08;bool&#xff09;字符串型&#xff08;string&#xff09;整数型&#xff08;int、uint、byte、rune&#xff09;浮点型&#xff08;float32、float64&#xff09;复…

【C++】——类与对象引入和认识

创作不易&#xff0c;多多支持&#xff01; 前言 有了上一篇博客的基础以后&#xff0c;就正式进入C类和对象的领域了&#xff0c;如果看完本篇文章对你有用&#xff0c;还请多多支持&#xff01;&#xff01;&#x1f618;&#x1f618; 一 面向过程和面向对象 1.面向过程 …

单链表实现通讯录

不过多赘述了 顺序表的增删查改-CSDN博客https://blog.csdn.net/bkmoo/article/details/137566495?spm1001.2014.3001.5502 使用顺序表实现通讯录-CSDN博客https://blog.csdn.net/bkmoo/article/details/137676561?spm1001.2014.3001.5502这里没有使用文件操作只是简单的使…

全程免费的ssl证书申请——七步实现网站https

全程免费的ssl证书申请步骤如下&#xff1a; 1 准备工作 首先确定好需要的证书类型&#xff0c;如单域名证书、通配符证书和多域名证书&#xff0c;准备好需要安装证书的域名。 2 选择CA 选择提供免费证书的服务商——JoySSL&#xff0c;并访问其官方网站&#xff0c;创建一…

3d软件哪个适合新手学?3D动画渲染怎么好

在不同的行业领域&#xff0c;3D建模和动画的需求各异&#xff0c;因此所需的3D软件工具也会有所不同。对于刚开始接触3D设计的新手来说&#xff0c;软件的易操作性、丰富的学习资源以及与自己专业领域相关的功能是选择时的重要考虑因素。以下是几款适合初学者入门的3D软件推荐…