三维柱形图与堆积面积图

本文介绍了如何使用Python的PyEcharts库创建三维柱形图和堆积面积图。作者首先展示了导入数据和数据处理的步骤,接着详细解释了如何构建和配置图表,包括分组聚合、数据清洗、时间条件筛选等。最后,通过示例代码展示了两种图表的绘制过程,是初学者了解数据可视化的一个良好起点。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

本文分享一下自己学习数据可视化的学习心得,本人只是刚刚接触的萌新,如有错误或者不准确的,请大家多多见谅!


提示:以下是本篇文章正文内容,下面案例可供参考

一、三维柱形图

1.首先导入所需要的库与读取所需要的数据

import pyecharts.options as opts
from pyecharts.charts import Bar3D
import pandas as pd
data = pd.read_excel(r'D:\Code\Jupyter\data'+r'\航空公司数据.xlsx')
data

在这里插入图片描述

2.通过groupby(by=[])方法分组聚合我们所需的数据

gender_level_count = data.groupby(by=['会员卡级别','性别'])['会员卡号'].count()
gender_level_count

3.手动创建list表数据循环写入list表

gender = ['男','女']
level = [4,5,6] # 手动创建list
list = []
for i in range(len(level)):
    for j in range(len(gender)):
        list.append([i,j,int(gender_level_count[level[i],gender[j]])]) # 第三维度的数据需要int类型
list

4.最后画图与配置相关配置项

c = (
    Bar3D(init_opts=opts.InitOpts(width="800px", height="600px"))
    .add(
        series_name="", # 此参数必须有
        data = list, # 必须接收一个二维list,且元素列表的前两位数字为柱体在3d坐标系中位置的索引
        xaxis3d_opts=opts.Axis3DOpts(type_="category", data=level, name='会员卡等级'),
        yaxis3d_opts=opts.Axis3DOpts(type_="category", data=gender, name='性别'),
        zaxis3d_opts=opts.Axis3DOpts(type_="value", name = '人数'),
    )
    .set_series_opts(label_opts=opts.LabelOpts(is_show=True)) # 显示数据标签
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(
            max_ = 5000, # 设置色阶的最大值
#             range_color= Faker.visual_color # 调用Faker数据库的色阶数据
        )
    )
)
c.render_notebook()

效果图:

在这里插入图片描述

二、堆积面积图

1.首先导入所需要的库与读取所需要的数据

import pandas as pd
data_mpv_sale = pd.read_excel(r'D:\CodeProject\blog\MPV销量数据2012-2021(1).xlsx')
data_mpv_sale

在这里插入图片描述

2.通过drop_duplicates和sort_values方法对数据进行去重

data_mpv_sale2 = data_mpv_sale.drop_duplicates(subset=['采集时间','排名'],keep='last')
data_mpv_sale2 = data_mpv_sale2.sort_values(by=['采集时间','排名'])
data_mpv_sale2

3.数据加工之时间条件筛选与时间数据加工

data_mpv_sale3 = data_mpv_sale2[data_mpv_sale2['采集时间']>'2017']
data_mpv_sale3['车型_厂商'] = data_mpv_sale3['车型'] + '_' + data_mpv_sale3['厂商']
data_mpv_sale4 = data_mpv_sale3.copy() # 复制一个表格对象
data_mpv_sale4['年份'] = data_mpv_sale4['采集时间'].agg(lambda x:int(x[:4]))
data_mpv_sale4['月份'] = data_mpv_sale4['采集时间'].agg(lambda x:int(x[-2:]))
def jidu(month):
    if month<=3:
        return 1
    elif month<=6:
        return 2
    elif month<=9:
        return 3
    else:
        return 4
data_mpv_sale4['季度']  = data_mpv_sale4.loc[:,'月份'].agg(jidu)
data_mpv_sale4['年份_季度'] = data_mpv_sale4['年份'].agg(lambda x:str(x)+'年') + data_mpv_sale4['季度'].agg(lambda x:str(x)+'季度')
data_mpv_sale4

4.重新聚合车辆季度销量与定位销量头部车型

sale_season = data_mpv_sale4.groupby(by=['车型_厂商','年份_季度'])['销量'].sum()
sale_total20 = data_mpv_sale4.groupby(by=['车型_厂商'])['销量'].sum().sort_values(ascending=False)[:10].index.values
sale_total20

5.重组数据结构

# 定义时间列表
year = [2017,2018,2019,2020,2021]
season = [1,2,3,4]
list_time = []
for y in year:
    for s in season:
        if y==2021 and s>=3:
            break
        else:
            list_time.append(f'{y}{s}季度')
            
# 定义字典存储20辆车的季度销量信息
sale_dict = {}
for c in sale_total20:
    sale_dict.setdefault(c,[]) # 创建键:c,值:[]
    for t in list_time:
        if t in sale_season[c].index:
            sale_dict[c].append(int(sale_season[c][t]))
        else:
            sale_dict[c].append(0) # 没有销量记录的季度需要手动填入0
sale_dict

6.最后画图与配置相关配置项

import pyecharts.options as opts
from pyecharts.charts import Line
 
c = (
    Line(init_opts=opts.InitOpts(width='800px',height='400px'))
    .add_xaxis(xaxis_data=list_time)
    
    .set_global_opts(
#         title_opts=opts.TitleOpts(title="2017-2021年MPV销量前10名车型走势"),
        tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), # 配置提示框
        yaxis_opts=opts.AxisOpts(
            type_="value",
            axistick_opts=opts.AxisTickOpts(is_show=True),
            splitline_opts=opts.SplitLineOpts(is_show=True),
        ),
        xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=False),
        datazoom_opts=opts.DataZoomOpts(), # 配置滑动条
    )
)
 
for name,sale_list in sale_dict.items():
    c.add_yaxis(
        series_name=name, # 序列名称,由车型名称定义
        stack="总量", # 设置堆积图
        y_axis=sale_list, # 销量数据
        areastyle_opts=opts.AreaStyleOpts(opacity=0.5), # 设置面积图
        label_opts=opts.LabelOpts(is_show=False),
        is_smooth = True, # 显示平滑曲线
    )
c.render_notebook()
# c.render('2017-2021年MPV销量前10名车型走势.html')

效果图:
在这里插入图片描述

总结

记录学习的过程,刚刚入门的萌新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值