折线图
json数据格式
- 一种轻量级的数据交互模式,可以按照JSON指定的格式去组织和封装数据
- JSON本质上是一种带有特定格式的字符串
- 负责不同编程语言中的数据传递和交互
python数据和json数据的相互转换
# 导入json模块
# 准备符合json格式要求的python数据
data=[{"name":"张三","age":16},{"name":"李四","age":20}]
# 通过json.dumps(data)方法把python数据转化为json数据
data=json.dumps(data,ensure_ascii=False) # 不使用ASCII码确保中文可以正常转换
# 通过json.loads(data)方法把json数据转化为python数据
data=json.loads(data)
pyecharts模块
- 做出数据可视化效果图
- Echarts是由百度开源的数据可视化
- 官方示例https://gallery.pecharts.org/#/README
pip install pyecharts
构建基础折线图
# 导包,导入Line功能构建折线图对象
from pyecharts.chart import Line
# 得到折线图对象
line=Line()
# 添加x轴数据
line.add_xaxis(["中国","美国","英国"])
# 添加y轴数据
line.add_yaxis("GDP",[30, 20, 10])
# 生成图表
line.render()
全局配置选项
set_global_opts方法
全局配置选项可以通过set_global_opts方法来进行配置(标题、图例、工具箱)。
line.set_global_opts(
title_opts=TitleOpts("测试",pos_left="center",pos_bottom="1%"), # 标题
legend_opts=LegendOpts(is_show=True), # 图例
toolbox_opts=ToolboxOpts(is_show=True), # 工具箱
visualmap_opts=VisualMapOpts(is_show=True), # 视觉映射
tooltip_opts=TooltipOpts(is_show=True),
)
数据处理
通过json模块对数据进行处理文章来源:https://www.toymoban.com/news/detail-612684.html
# 处理数据
f_us=open("D:/美国.txt","r",encoding="UTF-8")
us_data=f_us.read()
# 去掉不符合JSON规范的开头
us_data=us_data.replace("jsonp_1629344292311_69436(","")
# 去掉不符合JSON规范的结尾
us_data=us_data[:-2]
# JSON转python字典
us_dict=json.loads(us_data)
# 获取trend key
trend_data=us+dict['data'][0]['trend']
# 获取日期数据,用于x轴
x_data=trend_data['updateDate'][:314]
# 获取确诊数据,用于y轴
y_data=trend_data['list'][0]['data'][:314]
# 生成图表
完成折线图
from pyecharts.charts import Line
# 生成图表
line=Line() #构建折线图对象
# 添加x轴数据
line.add_xaxis(us_x_data)
# 添加y轴数据
line.add_yaxis("美国确诊人数",us_y_data)
line.add_yaxis("日本确诊人数",jp_y_data)
line.add_yaxis("印度确诊人数",in_y_data)
line.render()
# 关闭文件
f_us.close()
f_jp.close()
f_in.close()
地图
# 地图可视化的基本使用
from pyecharts.charts import Map
# 准备地图对象
map=Map()
# 准备数据
data=[
("北京",99),
("上海",199),
("湖南",299),
("台湾",399)]
# 添加数据
map.add("测试地图",data,"Chiana")
# 绘图
map.render()
全国疫情可视化地图开发
import json
from pyecharts.charts import Map
from pyecharts.options import *
# 读取数据文件
f=open("D:/疫情.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(title="全国疫情地图"),
visualmap_opts=VisualMapOpts(
is_show=True,
is_piecewise=True,
pieces=[
{"min":1,"max":99,"label":"1~99","color":"#CCFFFF"},
{"min":100,"max":999,"label":"100~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")
柱状图
基础柱状图
from pyecharts.charts import Bar
# 构建柱状图对象
bar=Bar()
# 添加x轴数据
bar.add_xaxis(["中国","美国","英国"])
# 添加y轴数据
bar.add_yaxis("GDP",[30,20,10])
# 反转x轴和y轴
bar.reversal_axis()
# 绘图
bar.render("基础柱状图.html")
基础时间线柱状图
Timeline()时间线
from pyecharts.charts import Bar,Timeline
from pyecharts.options import *
bar1=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,30,20],label_opts=LabelOpts(position="right"))
bar2.reversal_axis()
# 创建时间线对象
timeline=Timeline()
# timeline对象添加bar柱状图
timeline.add(bar1,"2021年GDP")
timeline.add(bar2,"2022年GDP")
# 通过时间线绘图而不是bar对象
timeline.render("基础柱状图-时间线.html")
动态柱状图绘制
列表的sort方法
sorted函数可以对数据容器进行排序文章来源地址https://www.toymoban.com/news/detail-612684.html
列表.sort(key=选择排序依据的函数,reverse=True|False)
- 参数key,要求传入一个函数,表示将列表的每一个元素都传入函数中,返回排序的依据
- 参数reverse,是否反转排序结果
带名函数形式
# 嵌套列表要求对外层列表进行排序,依据内层列表第二个元素数字
# 无法使用sorted函数,可以使用列表的sort方法
my_list=[["a",33],["b",55],["c",11]]
# 定义排序方法
def choose_sort_key(element):
return element[1]
my_list.sort(key=choose_sort_key,reverse=True)
print(my_list)
匿名lambda形式
my_list=[["a",33],["b",55],["c",11]]
my_list.sort(key=lambda element:element[1],reverse=True)
print(my_list)
数据处理
from pyecharts.charts import Bar,Timeline
from pyecharts.options import *
from pyecharts.globals import ThemeType
# 读取数据
f=open("D:/1960-2019全球GDP数据.csv","r",encoding="GB2312")
data_lines=f.readlines()
f.close()
# 删除第一个
data_lines.pop(0)
# 将数据转换为字典格式
data_dict={}
for line in data_lines:
year=int(line.split(",")[0])
country=line.split(",")[1]
gdp=float(line.split(",")[2])
try: # 判断字典里有没有指定key
data_dict[year].append([country,gdp])
except KeyError:
data_dict[year].append([country,gdp])
GDP动态图表绘制
# 创建时间线对象
timeline=Timeline({"theme":ThemeType.LIGHT})
# 排序年份
sorted_year_list=sorted(data.dict.keys())
for year in sorted_year_list:
data_dict[year].sort(key=lambda element:element[1],reverse=True)
# 取本年前8的国家
year_data=data_dict[year][0:8]
x_data=[]
y_data=[]
for country_gdp in year_data:
x_data.append(country_gdp[0])
y_data.append(country_gdp[1]/100000000)
bar=Bar()
x_data.reverse()
y_data.reverse()
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))
# for循环每年的数据,创建每年bar对象
# 将每年bar对象添加到时间线中
# 设置时间线自动播放
timeline.add_schema(
play_interval=1000,
is_timeline_show=True,
is_auto_play=True,
is_loop_play=False)
timeline.render("1960~2019全球GDP前8国家.html")
到了这里,关于【python】数据可视化开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!