大数据可视化技术

实验六:比例数据可视化

一、实验名称 

比例数据可视化

二、实验目的

通过该实验的实践,要求学生可以理解数据部分与整体的关系,掌握pyecharts的使用过程,能够熟练绘制常见的适合展示比例数据的图表。

三、实验原理

饼图:展示各类的比例分布

环形图:展示各类的比例分布并增加标签说明

百分比堆叠柱状图:展示多个不同类别下的相同子类的占比情况

百分比堆叠面积图:展示多个类别随时间变化的比例变化趋势

矩形树图:通过面积差异展示不同分类的比例差异,通过交互可以下钻到二级分类

四、实验步骤

1、饼图

输入以下代码:

from pyecharts import Pie
import pandas as pd
vote_result = pd.read_csv('/home/ubuntu/vote_result.csv')
pie = Pie("数据可视化-用户感兴趣领域",
          "以下是读者的投票结果。\n"
          "读者对金融、医疗保健、市场业3个领域最感兴趣。",title_pos='left')
#pie = Pie("饼图示例")
pie.add("", vote_result['Areas_of_interest'], vote_result['Votes'], center=[60, 60],legend_orient="vertical",
    legend_pos="right",is_label_show=True)
#pie.add("", vote_result['Areas_of_interest'], vote_result['Votes'],is_legend_show=False,is_label_show=True)
#pie.add("", vote_result['Areas_of_interest'], vote_result['Votes'], is_label_show=False)
pie.render('./1.饼图.html')

输出结果:

2、环形图

from pyecharts import Pie
import pandas as pd
vote_result = pd.read_csv('/home/ubuntu/vote_result.csv')
pie = Pie("数据可视化-用户感兴趣领域",
          "以下是读者的投票结果。\n"
          "读者对金融、医疗保健、市场业3个领域最感兴趣。",title_pos='left')
pie.add("", vote_result['Areas_of_interest'], vote_result['Votes'], center=[60, 60],legend_orient="vertical",
radius=[30, 75],legend_pos="right",is_label_show=True)
pie.render('./2.环形图.html')

输出结果:

3、堆叠柱形图

from pyecharts import Bar
import pandas as pd
pre_approval_rate = pd.read_csv('/home/ubuntu/presidential_approval_rate.csv')
bar = Bar("柱状图数据堆叠示例")
bar.add("支持", pre_approval_rate['political_issue'], pre_approval_rate['support'], is_stack=True)
bar.add("反对", pre_approval_rate['political_issue'], pre_approval_rate['oppose'], is_stack=True)
bar.add("不发表意见", pre_approval_rate['political_issue'], pre_approval_rate['no_opinion'],xaxis_rotate=30, is_stack=True)
bar.render('./3.1堆叠柱形图.html')

输出结果:

4、堆叠柱形图2

输入以下代码:

from pyecharts import Bar
import pandas as pd
pre_approval_rate = pd.read_csv('/home/ubuntu/presidential_approval_rate.csv')
bar = Bar("柱状图数据堆叠示例",title_pos='center')
list_support = ['支持','反对','不发表意见']
for i in range(pre_approval_rate.iloc[:,0].size):
    issue = pre_approval_rate.loc[i,'political_issue']
    bar.add(issue, list_support, pre_approval_rate.loc[i,['support','oppose','no_opinion']], legend_orient="vertical",legend_pos="right",is_stack=True)
bar.render('./3.2堆叠柱形图.html')

输出结果:

5、树图

import os
import json
import codecs
from pyecharts import Tree
with codecs.open(os.path.join("/home/ubuntu", "GDP_data.json"), "r", encoding="utf-8") as f:
    j = json.load(f)
data = [j]
tree = Tree(width=1200, height=800)
tree.add("", data) #, tree_collapse_interval=2
tree.render('./4.1树图.html')

输出结果:

6、矩形树图

import os
import json
from pyecharts import TreeMap
with open(os.path.join("/home/ubuntu", "GDP_data_1.json"), "r", encoding="utf-8") as f:
        data = json.load(f)
treemap = TreeMap("矩形树图示例", width=1200, height=600)
treemap.add("演示数据", data, is_label_show=True, label_pos='inside') #,treemap_left_depth=1
treemap.render('./5.1矩形树图.html')

输出结果:

7、 面积折线图

from pyecharts import Line
import pandas as pd
year_population_age = pd.read_csv('/home/ubuntu/us_population_by_age.csv')
# 面积折线图
line3 =Line("人口老龄化",width=500, height=500)
line3.add("5岁以下",
          year_population_age['year'],
          year_population_age['year_under5'],
          is_fill=True,
          area_color='red',
          #line_opacity=0.2,
          area_opacity=0.5,
          #symbol=None,
          mark_point=['max'],
          is_stack=True)
line3.add("5至19岁",
          year_population_age['year'],
          year_population_age['year5_19'],
          is_fill=True,
          #area_color='#a3aed5',
          area_color='blue',
          area_opacity=0.5,
          is_smooth=True,
          is_stack = True)
line3.add("20至44岁",
          year_population_age['year'],
          year_population_age['year20_44'],
          is_fill=True,
          #area_color='#a3aed5',
          area_color='green',
          area_opacity=0.5,
          is_smooth=True,
          is_stack = True)
line3.add("45至64岁",
          year_population_age['year'],
          year_population_age['year45_64'],
          is_fill=True,
          #area_color='#a3aed5',
          area_color='yellow',
          area_opacity=0.5,
          is_smooth=True,
          is_stack = True)
line3.add("65岁以上",
          year_population_age['year'],
          year_population_age['year65above'],
          is_fill=True,
          #area_color='#a3aed5',
          area_color='orange',
          area_opacity=0.5,
          is_smooth=True,
          xaxis_rotate = 30,
          legend_orient="vertical",
          legend_pos="right",
          is_stack = True)
line3.render(path='./6.面积折线图.html')

输出结果:

五、实验总结

在实验中,通过实践练习,提高学生使用pyecharts进行比例数据可视化的熟练程度,总结适合展示比例数据的图表,能够解释部分与整体的关系。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐