7-数据可视化-折线图可视化

Posted 卡__卡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7-数据可视化-折线图可视化相关的知识,希望对你有一定的参考价值。

文章目录

1.json数据格式

本质上是一个带有特定格式的字符串(str),负责不同编程语言中的数据传递和交互

json格式是字典,或是字典组成的列表

["name":"jack","age":18,"name":"peter","age":17]
"name":"haha"

例如,我们可以把python中的字典转化成c语言能理解的json(字符串)

(1)python 转 json(dumps)

import json
a=["name":"jack","age":18,"name":"peter","age":17] # 以字典组成的列表为例
a=json.dumps(a) # python 转 json
print(type(a))
print(a)
"""
<class 'str'>
# ["name": "jack", "age": 18, "name": "peter", "age": 17]
"""

若字典中有中文,可以使用ensure_ascii=False

import json
a="name":"张三","age":18
a=json.dumps(a,ensure_ascii=False) 
print(type(a))
print(a)
"""
<class 'str'>
"name": "张三", "age": 18
"""

(2)json 转 python(loads)

import json
b='"name":"haha"' # 字符串必须带引号,为了防止和内部的双引号冲突,外侧使用单引号
b=json.loads(b) # json 转 python
print(type(b))
print(b)
"""
<class 'dict'>
'name': 'haha'
"""

2.pyecharts

先下载pyecharts包

(1)基础
main.py

from pyecharts.charts import Line
line=Line() # 得到折线图对象
line.add_xaxis(["中国","美国","英国"]) # x轴
line.add_yaxis("GDP",[30,20,10]) # y轴
line.render() # 生成图表


打开图像方式


(2)设置全局配置项
①标题
from pyecharts.options import TitleOpts
pos_left=“center” 标题距离左侧:居中
pos_bottom=“1%” 标题距离底部1%

from pyecharts.options import TitleOpts # 导入标题相关
line.set_global_opts(
    title_opts=TitleOpts(title="标题名称",pos_left="center",pos_bottom="1%") # 设置标题
)


②图例
from pyecharts.options import LegendOpts
is_show=False 没有图例
is_show=True 有图例(默认)

from pyecharts.options import LegendOpts # 导入图例相关
line.set_global_opts(
    legend_opts=LegendOpts(is_show=True) # 设置图例
)

③工具箱
from pyecharts.options import ToolboxOpts
is_show=True 有工具箱
is_show=False 没有工具箱(默认)

from pyecharts.options import TitleOpts,LegendOpts,ToolboxOpts # 导入标题相关
line.set_global_opts(
    toolbox_opts=ToolboxOpts(is_show=True)
)

④视觉映射
from pyecharts.options import VisualMapOpts
is_show=True 有
is_show=False 无(默认)

from pyecharts.options import VisualMapOpts 
line.set_global_opts(
    visualmap_opts=VisualMapOpts(is_show=True)
)

总体

from pyecharts.charts import Line
line=Line() # 得到折线图对象
line.add_xaxis(["中国","美国","英国"]) # x轴
line.add_yaxis("GDP",[30,20,10]) # y轴

from pyecharts.options import TitleOpts,LegendOpts,ToolboxOpts,VisualMapOpts # 导入
line.set_global_opts(
    title_opts=TitleOpts(title="标题名称",pos_left="center",pos_bottom="1%"), # 标题
    legend_opts=LegendOpts(is_show=True), # 图例
    toolbox_opts=ToolboxOpts(is_show=True), # 工具箱
    visualmap_opts=VisualMapOpts(is_show=True) # 视觉映射
)

line.render() # 生成图表

其余全局配置项见pyecharts官网

(3)pyecharts模块

pyecharts-gallery官网

复制任意一段代码,运行

使用浏览器打开自动生成的html文件

3.数据处理与图像绘制

数据下载

打开和读取

f_us=open("D:/折线图数据/美国.txt","r",encoding="UTF-8")
us_data=f_us.read()

给出的txt文件时json类型

在编程时需要去掉开头和结尾的不规范数据(未选中部分)

us_data=us_data.replace("jsonp_1629344292311_69436(","") # 开头部分替换为空

us_data=us_data[:-2] # 以切片形式删除最后两个字符


(1)数据查看

在线懒人工具
选择JSON视图

复制txt中的有效代码


(2)数据取出
获取data列表的0号元素,其中有两个key(name和trend),其中trend里面有updateDate和list

import json
us_dict=json.loads(us_data) # json转python字典
trend_data=us_dict["data"][0]["trend"]

①x轴数据
从updateDate中取出
读取日期数据,取第一年每天的日期数据做x轴

x_data=trend_data["updateDate"][:314]

②y轴数据
选取list-0-data作为y轴数据,数据和x轴一一对应,取到314(不含)即可

y_data=trend_data["list"][0]["data"][:314]


完整代码

f_us=open("D:/折线图数据/美国.txt","r",encoding="UTF-8")
us_data=f_us.read()
us_data=us_data.replace("jsonp_1629344292311_69436(","") # 开头部分替换为空
us_data=us_data[:-2] # 以切片形式删除最后两个字符

import json
us_dict=json.loads(us_data) # json转python字典
trend_data=us_dict["data"][0]["trend"]
x_data=trend_data["updateDate"][:314]
y_data=trend_data["list"][0]["data"][:314]

同样,处理其他国家数据,完整代码

f_us=open("D:/折线图数据/美国.txt","r",encoding="UTF-8")
f_jp=open("D:/折线图数据/日本.txt","r",encoding="UTF-8")
f_in=open("D:/折线图数据/印度.txt","r",encoding="UTF-8")
us_data=f_us.read()
jp_data=f_jp.read()
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] # 以切片形式删除最后两个字符

import json
us_dict=json.loads(us_data) # json转python字典
jp_dict=json.loads(jp_data) # json转python字典
in_dict=json.loads(in_data) # json转python字典

us_trend_data=us_dict["data"][0]["trend"]
jp_trend_data=jp_dict["data"][0]["trend"]
in_trend_data=in_dict["data"][0]["trend"]
us_x_data=us_trend_data["updateDate"][:314]
jp_x_data=jp_trend_data["updateDate"][:314]
in_x_data=in_trend_data["updateDate"][:314]
us_y_data=us_trend_data["list"][0]["data"][:314]
jp_y_data=jp_trend_data["list"][0]["data"][:314]
in_y_data=in_trend_data["list"][0]["data"][:314]

(3)图像绘制

from pyecharts.charts import Line
line=Line()
line.add_xaxis(us_x_data) # 横轴都是日期,任选一个即可
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()



可以隐藏图像中出现的数字,使用label_opts=LabelOpts(is_show=False对y坐标处理

from pyecharts.options import LabelOpts
line.add_yaxis("美国确诊人数",us_y_data,label_opts=LabelOpts(is_show=False))
line.add_yaxis("日本确诊人数",jp_y_data,label_opts=LabelOpts(is_show=False))
line.add_yaxis("印度确诊人数",in_y_data,label_opts=LabelOpts(is_show=False))


设置图表标题,增加工具箱和视觉映射

line.set_global_opts(
    title_opts=TitleOpts(title="2020年美日印三国确诊人数对比折线图",pos_left="center",pos_bottom="1%"), # 标题
    toolbox_opts=ToolboxOpts(is_show=True),
    visualmap_opts=VisualMapOpts(is_show=True,pos_right="1%")
)


完整代码

from pyecharts.options import TitleOpts,ToolboxOpts,VisualMapOpts,LabelOpts
f_us=open("D:/折线图数据/美国.txt","r",encoding="UTF-8")
f_jp=open("D:/折线图数据/日本.txt","r",encoding="UTF-8")
f_in=open("D:/折线图数据/印度.txt","r",encoding="UTF-8")
us_data=f_us.read()
jp_data=f_jp.read()
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] # 以切片形式删除最后两个字符

import json
us_dict=json.loads(us_data) # json转python字典
jp_dict=json.loads(jp_data) # json转python字典
in_dict=json.loads(in_data) # json转python字典

us_trend_data=us_dict["data"][0]["trend"]
jp_trend_data=jp_dict["data"][0]["trend"]
in_trend_data=in_dict["data"][0]["trend"]
us_x_data=us_trend_data["updateDate"][:314]
jp_x_data=jp_trend_data["updateDate"][:314]
in_x_data=in_trend_data["updateDate"][:314]
us_y_data=us_trend_data["list"][0]["data"][:314]
jp_y_data=jp_trend_data["list"][0]["data"][:314]
in_y_data=in_trend_data["list"][0]["data"][:314]

from pyecharts.charts import Line
line=Line()
line.add_xaxis(us_x_data) # 横轴都是日期,任选一个即可
line.add_yaxis("美国确诊人数",us_y_data,label_opts=LabelOpts(is_show=False))
line.add_yaxis("日本确诊人数",jp_y_data,label_opts=LabelOpts(is_show=False))
line.add_yaxis("印度确诊人数",in_y_data,label_opts=LabelOpts(is_show=False))

line.set_global_opts(
    title_opts=TitleOpts(title="2020年美日印三国确诊人数对比折线图",pos_left="center",pos_bottom="1%"), # 标题
    toolbox_opts=ToolboxOpts(is_show=True),
    visualmap_opts=VisualMapOpts(is_show=True,pos_right="1%")
)

line.render()
f_us.close()
f_jp.close()
f_in.close()

可视化实验十二:利用Python绘制箱线图折线图

实验目的:

  1. 掌握Python中箱线图、折线图绘图函数的使用及展示图形的意义
  2. 利用上述绘图函数实现数据可视化

实验内容:

  1. 练习python中箱线图、折线图绘图函数的用法,掌握相关参数的概念
  2. 根据步骤一绘图函数要求,处理实验数据
  3. 根据步骤二得到的实验数据,绘制箱线图、折线图
  4. 练习如何通过调整参数使图片呈现不同效果,例如颜色、图例位置、背景网格、坐标轴刻度和标记等

实验过程(附结果截图):

1. 练习python中箱线图、折线图绘图函数的用法,掌握相关参数的概念

(1)绘制箱线图

import matplotlib.pyplot as plt
x = [1, 2, 3, 5]  # 数据集
plt.boxplot(x)  # 垂直显示箱线图
plt.show()  # 显示该图


(2)绘制折线图

import matplotlib.pyplot as plt 
squares=[1, 4, 9, 16, 25]
x=[1, 2, 3, 4, 5]
plt.plot(x, squares)
plt.show()


2. 根据步骤一绘图函数要求,处理实验数据

(1)实验数据

np.random.seed(2)  # 设置随机种子
df = pd.DataFrame(np.random.rand(5, 4),
                  columns=['A', 'B', 'C', 'D'])  # 先生成0-1之间的5*4维度数据,再装入4列DataFrame中

3. 根据步骤二得到的实验数据,绘制箱线图、折线图

(1)绘制箱线图

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
np.random.seed(2)  # 设置随机种子
df = pd.DataFrame(np.random.rand(5, 4),
                  columns=['A', 'B', 'C', 'D'])  # 先生成0-1之间的5*4维度数据,再装入4列DataFrame中
df.boxplot()  # 也可用plot.box()
plt.show()

(2)绘制折线图

import matplotlib.pyplot as plt
from pylab import *  # 支持中文
mpl.rcParams['font.sans-serif'] = ['SimHei']

names = ['5', '10', '15', '20', '25']
x = range(len(names))
y = [0.855, 0.84, 0.835, 0.815, 0.81]
y1 = [0.86, 0.85, 0.853, 0.849, 0.83]
plt.plot(x, y, marker='o', mec='r', mfc='w', label=u'y=x^2曲线图')
plt.plot(x, y1, marker='*', ms=10, label=u'y=x^3曲线图')
plt.xticks(x, names, rotation=45)
plt.margins(0)
plt.subplots_adjust(bottom=0.15)
plt.show()


4. 练习如何通过调整参数使图片呈现不同效果,例如颜色、图例位置、背景网格、坐标轴刻度和标记等

(1)绘制箱线图

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
np.random.seed(2)  # 设置随机种子
df = pd.DataFrame(np.random.rand(5, 4),
                  columns=['A', 'B', 'C', 'D'])  # 先生成0-1之间的5*4维度数据,再装入4列DataFrame中
# df.boxplot()  # 也可用plot.box()
# plt.show()
df.boxplot(sym='r*', vert=False, patch_artist=True,
           meanline=False, showmeans=True)
plt.show()


(2)绘制折线图

import matplotlib.pyplot as plt
from pylab import *  # 支持中文
mpl.rcParams['font.sans-serif'] = ['SimHei']

names = ['5', '10', '15', '20', '25']
x = range(len(names))
y = [0.855, 0.84, 0.835, 0.815, 0.81]
y1 = [0.86, 0.85, 0.853, 0.849, 0.83]
plt.plot(x, y, marker='o', mec='r', mfc='w', label=u'y=x^2曲线图')
plt.plot(x, y1, marker='*', ms=10, label=u'y=x^3曲线图')
plt.legend()  # 让图例生效
plt.xticks(x, names, rotation=45)
plt.margins(0)
plt.subplots_adjust(bottom=0.15)
plt.xlabel(u"time(s)邻居")  # X轴标签
plt.ylabel("RMSE")  # Y轴标签
plt.title("A simple plot")  # 标题
plt.show()

实验小结自己写写就行,本实验仅供参考。

以上是关于7-数据可视化-折线图可视化的主要内容,如果未能解决你的问题,请参考以下文章

十三香吗?网易严选-苹果12商品评论数据可视化分析

数据可视化实验:python数据可视化-柱状图,条形图,直方图,饼图,棒图,散点图,气泡图,雷达图,箱线图,折线图

python使用matplotlib可视化堆积的折线图使用stackplot函数可视化堆积的折线图不同数据在垂直方向堆叠

Python使用matplotlib函数subplot可视化多个不同颜色的折线图为指定的子图添加图例信息(legend)

数据可视化-实用套路总结

R数据可视化-4 折线图