pyecharsts 柱,饼,线,地图, Bar, Pie, Line, Map,改excel表头 地址 标题即用

#-*- coding : utf-8 -*-
from pyecharts.charts import Bar, Pie, Line, Map, Geo, Page, Grid, Liquid
from pyecharts import options as opts
import numpy as np
import pandas as pd
from pandas import DataFrame



#注意修改地质(r'c:\Users\lenovo\Desktop\2020donghang.xls)
total_data =  pd.read_excel(r'c:\Users\lenovo\Desktop\2020donghang.xls',parse_dates=['label_order_time'],dtype={'prices': int})
np.set_printoptions(suppress=True)
pd.set_option('display.float_format', lambda x: ' % .1f' % x)
pd.set_option("precision", 1)


data_frame = DataFrame(total_data)


# 商品名称列表和金额列表
prices_lists = pd.pivot_table(data_frame, index=['brands'], values=['prices'], aggfunc=np.sum)
prices_list = prices_lists.sort_values(by="prices",ascending=True)
prices_totals = prices_list.reset_index()
brand_prices_name = prices_totals['brands'].tolist()
brand_prices = prices_totals['prices'].tolist()
# 商品名称列表和数量列表
# 计算商品 数量求和
number_lists = pd.pivot_table(data_frame, index=['brands'], values=['number'], aggfunc=np.sum)
#按数量从小到大值排序
number_list = number_lists.sort_values(by="number",ascending=True)
#增加索引列
nember_totals = number_list.reset_index()
# 提取商品名称列
brand_number_name = nember_totals['brands'].tolist()
# 提取商品名
brand_number = nember_totals['number'].tolist()
# 提取商数量

#2020各个月份总和

# 提取月份字段
data_frame['month'] = data_frame['label_order_time'].dt.to_period('M')
#按月 提取价格总合
month_prices = pd.pivot_table(data_frame, index=['month'], values=['prices'], aggfunc=np.sum)
list_prices = month_prices['prices'].tolist()

map_list = data_frame["address_province"].value_counts()  #计算每个省会有多少个单子
map_values = map_list.tolist()
map_info = map_list.reset_index()
address_name = map_info["index"].tolist()
#地图信信        dict(zip(address_name,map_values)) 字典
address_list = list(zip(address_name,map_values))  #列表


print(address_list)



# 柱状图
def bar_datazoom_slider() -> Bar:
    c = (
        Bar()
        .add_xaxis(brand_prices_name)
        .add_yaxis("品牌金额", brand_prices)
        # .add_xaxis(brand_number_name)
        # .add_yaxis("订单数量", brand_number, is_selected=False)
        .set_global_opts(
            #标题修改
            title_opts=opts.TitleOpts(title="2020商家销售表(元)",subtitle="总金额:"),
            datazoom_opts=[opts.DataZoomOpts(range_start= 100)],
        )
        .set_series_opts(
            label_opts=opts.LabelOpts(is_show=False),
            markpoint_opts=opts.MarkPointOpts(
                data=[opts.MarkPointItem(type_="max", name="最大值"),  opts.MarkPointItem(type_="min", name="最小值")# 这个用线拉
                ]
            ),

            markline_opts=opts.MarkLineOpts(
                data=[opts.MarkLineItem(type_="average", name="平均值"),  # 这个点标注
                ]
            ),
        )
    )
    return c

#折线图
def line_markpoint() -> Line:
    date_data = ["{}月".format(i)for i in range(1, 13)]
    c = (
        Line()
        # .add_xaxis([str(i+1)+"月" for i in range(0,12)])
        .add_xaxis(date_data)
        .add_yaxis(
            "",
            list_prices,
            markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average", name="平均值")]),
        )
        .set_global_opts(title_opts=opts.TitleOpts(title="各月份销售(元)"))

    )
    return c

#饼图
def pie_rosetype() -> Pie:
    c = (
        Pie()
            .add(
            "",
            [list(z) for z in zip(brand_number_name, brand_number)],
            radius=["40%", "75%"],
        )
            .set_global_opts(
            title_opts=opts.TitleOpts(title="销售总数量及占比(个)",subtitle="总数量:"),
            legend_opts=opts.LegendOpts(type_="scroll",  orient="vertical", pos_top="15%", pos_left="2%"),
        )
            .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c} {d}%"),
                tooltip_opts=opts.TooltipOpts(
                trigger="item", formatter="{b}: {c} ({d}%)"),
        )
    )
    return c


#地图
def map_china() ->Map:
    c = (
        Map()
            .add(series_name="确诊病例", data_pair=address_list , maptype="china", zoom=1, center=[105, 38])
            .set_global_opts(
            title_opts=opts.TitleOpts(title="订单发货地图"),
            visualmap_opts=opts.VisualMapOpts(max_=9999, is_piecewise=True,
              pieces=[{"max": 9, "min": 0, "label": "0-9", "color": "#FFE4E1"},
                      {"max": 99, "min": 10, "label": "10-99", "color": "#FF7F50"},
                      {"max": 499, "min": 100, "label": "100-499", "color": "#F08080"},
                      {"max": 999, "min": 500, "label": "500-999", "color": "#CD5C5C"},
                      {"max": 10000, "min": 1000, "label": "1000-10000", "color": "#7777"},
                      {"max": 59999, "min": 10000, "label": "10000++++", "color": "#8B0000"}]

    )
    )
    )

    return c


def page_simple_layout():
    page = Page(layout=Page.SimplePageLayout)
    page.add(
        bar_datazoom_slider(),
        line_markpoint(),
        pie_rosetype(),
        map_china(),

    )
    page.render("page_simple_layout.html")


if __name__ == "__main__":
    page_simple_layout()

注意改表头字段
在这里插入图片描述
如图例
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值