lzykevin
5/3/2020 - 3:49 AM

pyecharts

map和geo画广东和全国地图

# pip install echarts-countries-pypkg
from pyecharts.charts import Map, Geo
from pyecharts import options as opts
from pyecharts.faker import Faker
from pyecharts.globals import ChartType, SymbolType
import os


# 设置工作目录,图表都会保存到这里
os.chdir('E:\\python\\pyecharts')

# 将数据处理成列表
locate = ['北京', '天津', '河北', '山西', '内蒙古', '辽宁', '吉林', '黑龙江', '上海', '江苏', '浙江', '安徽', '福建', '江西', '山东',
          '河南', '湖北', '湖南', '广东', '广西', '海南', '重庆', '四川', '贵州', '云南', '陕西', '甘肃', '青海', '宁夏', '新疆', '西藏']
app_price = [10.84, 8.65, 18.06, 8.90, 5.04, 29.20, 8.98, 17.80, 27.81, 24.24, 12.72, 11.10, 6.30, 7.00, 22.45,
             16.92, 11.00, 14.99, 18.85, 5.85, 1.40, 7.32, 14.61, 4.62, 6.05, 8.07, 6.73, 15.54, 13.00, 39.07, 25.61, 21.3]
list1 = [[locate[i], app_price[i]] for i in range(len(locate))]
# list2 = [list(z) for z in zip(locate, app_price)]


# eg1.普通写法,不建议,建议用链式写法
# 普通写法,不建议,建议用链式写法
# eg1 = Map()
# eg1.set_global_opts(
#     title_opts=opts.TitleOpts(title="2019年全国各省苹果价格表"),
#     visualmap_opts=opts.VisualMapOpts(max_=50)  # 最大数据范围
# )
# eg1.add("2019年全国各省苹果价格", list1, maptype="china")
# eg1.render('eg1.html')

# eg2.中国地图,链式写法
list1 = [list(z) for z in zip(Faker.provinces, Faker.values())]
map_china = (
    Map()
    .add("系列名称", list1, maptype="china")
    # .set_series_opts(label_opts=opts.LabelOpts(is_show=False))  # 默认显示标签
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Map-基本示例"),
        visualmap_opts=opts.VisualMapOpts(max_=50)  # 最大数据范围
        # visualmap_opts=opts.VisualMapOpts(max_=50, is_piecewise=True)  # 默认为连续型,is_piecewise=True 改为分段型
        )
    )
map_china.render('map_china.html')

# eg2.map_world
list2 = [list(z) for z in zip(Faker.country, Faker.values())]
map_world = (
    Map()
    .add('系列名称',list2, maptype='world')
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))  # 默认显示标签
    .set_global_opts(
        title_opts=opts.TitleOpts(title='Map_world')
    )
)
map_world.render('map_world.html')

# eg4.map_guangdong
list3 = [list(z) for z in zip(Faker.guangdong_city, Faker.values())]
map_guangdong = (
    Map()
    .add("系列名称", list3, maptype="广东")
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Map-广东地图"),
        visualmap_opts=opts.VisualMapOpts()
    )
)
map_guangdong.render('map_guangdong.html')

# eg4.geo_china
geo_china = (
    Geo()
    .add_schema(maptype='china')
    .add('系列名称', list1)
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))  # 默认显示标签
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(),
        title_opts=opts.TitleOpts(title='geo-基本示例'))
    )
geo_china.render('geo_china.html')

# eg5.geo 函数写法
def geo_base() -> Geo:  # 函数注释
    c = (
        Geo()
        .add_schema(maptype="china")
        .add("geo", [list(z) for z in zip(Faker.provinces, Faker.values())])
        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
        .set_global_opts(
            visualmap_opts=opts.VisualMapOpts(),
            title_opts=opts.TitleOpts(title="Geo-基本示例"),
        )
    )
    return c

geo_base().render('geo_base.html')



# pyecharts V1.x版本
from pyecharts.charts import Calendar
import random
import datetime
import pyecharts
import pyecharts.charts
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.render import make_snapshot # 渲染图片
from snapshot_selenium import snapshot
from pyecharts.globals import ThemeType
import os

# 查看当前版本 1.x 和 0.5 代码不兼容
print(pyecharts.__version__)

# 设置工作目录,图表都会保存到这里
os.chdir('E:\\python\\pyecharts')

# bar1 链式调用
bar = (
    Bar()
    .add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"])
    .add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])
    .add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])
    # .set_global_opts(title_opts={"text": "衣服销量", "subtext": "副标题"})
    .set_global_opts(title_opts=opts.TitleOpts(title='主标题',subtitle='副标题'))
)
bar.render('myechart1.html')

# bar2 单独调用
x = ["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"]
y1 = [114, 55, 27, 101, 125, 27, 105]
y2 = [57, 134, 137, 129, 145, 60, 49]
bar2 = Bar()
bar2.add_xaxis(x)
bar2.add_yaxis("商家A",y1)
bar2.add_yaxis("商家B",y2)
bar2.set_global_opts(title_opts={"text": "衣服销量", "subtext": "副标题"})
bar2.render('myechart2.html')

# 渲染图片
bar = (
    Bar()
    .add_xaxis(x)
    .add_yaxis("商家A", y1)
)
make_snapshot(snapshot, bar.render(), 'bar.png')

# 使用主题
bar = (
    Bar(init_opts=opts.InitOpts(theme=ThemeType.SHINE))
    .add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"])
    .add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])
    .add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])
    # .set_global_opts(title_opts={"text": "衣服销量", "subtext": "副标题"})
    .set_global_opts(title_opts=opts.TitleOpts(title='主标题',subtitle='副标题'))
)
bar.render('myechart3.html')

# 日历图
import datetime
import random

from pyecharts import options as opts
from pyecharts.charts import Calendar


def calendar_base():
    begin = datetime.date(2017, 1, 1)
    end = datetime.date(2017, 12, 31)
    data = [
        [str(begin + datetime.timedelta(days=i)), random.randint(1000, 25000)]
        for i in range((end - begin).days + 1)
    ]

    c = (
        Calendar()
        .add("", data, calendar_opts=opts.CalendarOpts(range_="2017"))
        .set_global_opts(
            title_opts=opts.TitleOpts(title="Calendar-2017年微信步数情况"),
            visualmap_opts=opts.VisualMapOpts(
                max_=20000,
                min_=500,
                orient="horizontal",
                is_piecewise=True,
                pos_top="230px",
                pos_left="100px",
            ),
        )
    )
    return c
calendar_base().render('calendar.html')

plt.plot(x,y)