python学习_day13---pyecharts可视化


+day19 day20pyecharts官网,官网上基本模型的介绍都挺详细的,还有例子。

1、pyecharts基本演示

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker

c = (
    Pie()
    .add("", [list(z) for z in zip(Faker.choose(), Faker.values())])
    .set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"])
    .set_global_opts(title_opts=opts.TitleOpts(title="Pie-设置颜色"))
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    .render("pie_set_color.html")
)

在这里插入图片描述

2、柱状图

#导入配置项
from pyecharts import options as opts
#导入画图包
# from pyecharts.charts import Bar, Pie, Line
from pyecharts.charts import Bar


# 主题
from pyecharts.globals import ThemeType

# 官方写法
"""
c = (
    Bar()  # 实例化柱状图的对象
    .add_xaxis(["华东", "中南", "东北", "华北", "西南", "西北"])  # 增加x轴数据

    # x轴数据 必须2个参数; series_name(指明数据的含义), y_axis(数据)
    .add_yaxis(series_name="销售额", y_axis=[468, 413, 268, 244, 130, 81])
    .render("销售数据可视化.html")  # 输出图像;渲染图像
)
"""

# 推荐写法
bar = Bar(
    # 初始化配置项
    init_opts=opts.InitOpts(
        width="1200px",  # 画布宽度
        height="500px",  # 画布高度,
        # page_title="XXXXXXXXXXXXX",  #网页标题
        bg_color='white',
        # theme=ThemeType.WONDERLAND

    )

)  # 实例化柱状图的对象
bar.add_xaxis(["华东", "中南", "东北", "华北", "西南", "西北"])
bar.add_yaxis(series_name="销售额", y_axis=[468, 413, 268, 244, 130, 81])
# 增加一组 销售数量
bar.add_yaxis(series_name="销售数量", y_axis=[200, 300, 350, 210, 170, 150])

# 增加标题 ----> 去全局配置项中增加
bar.set_global_opts(

    # 关于标题的参数  -----去官网全局配置项->标题配置项中查看
    title_opts=opts.TitleOpts(
        title='各地区销售情况',
        pos_left='center',  # 标题居中
        pos_top="5%"
    ),

    # 图例
    legend_opts=opts.LegendOpts(
        pos_top="10%"
    ),

    # 工具箱
    toolbox_opts=opts.ToolboxOpts(
        # orient='vertical'
        is_show=True,  # 是否显示这个内容
    ),

    # 提示框
    tooltip_opts=opts.TooltipOpts(
        axis_pointer_type="cross"  # 十字锥形
    ),

    # 区域缩放
    # datazoom_opts=opts.DataZoomOpts()

)

# 将柱状图翻转一下
bar.reversal_axis()

# 设置系列配置项
bar.set_series_opts(label_opts=opts.LabelOpts(
    # position='right'
    position='inside'
))


bar.render("销售数据可视化.html")

在这里插入图片描述

3、饼图

# 导入配置项
from pyecharts import options as opts
# 导入绘图包
from pyecharts.charts import Pie

label_name = ["华北", "东北", "西南"]
data = (200, 210, 380)

# 整理为数据对(列表嵌套的形式)
data_pair = [[i, j] for i, j in zip(label_name, data)]
print(data_pair)

# 1. 实例化
pie = Pie()

# 2. 增加数据
pie.add(series_name="销售额",
        # 数据对,系列数据项,格式为 [(key1, value1), (key2, value2)]
        # data_pair=[["华北", 20], ["东北",30]]
        data_pair=data_pair,

        # 半径,内半径 外半径
        radius=["50%", "75%"],

        # 是否展示成南丁格尔图,通过半径区分数据大小,有'radius'和'area'两种模式。
        # radius:扇区圆心角展现数据的百分比,半径展现数据的大小
        # area:所有扇区圆心角相同,仅通过半径展现数据大小
        # rosetype='radius'
        # rosetype='area'

        )

pie.set_global_opts(tooltip_opts=opts.TooltipOpts(formatter="{a}<br/>{b} {d}%")

                    )
# 希望百分比在label上显示
pie.set_series_opts(label_opts=opts.LabelOpts(
    formatter="{b} {d}%"
))

# 3.渲染输出
pie.render("饼图.html")

在这里插入图片描述

4、图

from pyecharts import options as opts
from pyecharts.charts import Pie
import pandas as pd

df=pd.read_excel("D:\pycharm\pythonProject\day19_pyecharts可视化./截至2月17日22时37分疫情数据.xlsx")

#湖北省各个城市的确诊数
con1=df["省份"]=='湖北'
con2=df["城市"]!='湖北'

df=df.loc[con1&con2,["城市","确诊数"]]

# data_pair=[[i,j]for i,j in zip(df["城市"],df["确诊数"])]

data_pair=df.values.tolist()
print(data_pair)
pie=Pie()


# 2. 增加数据
pie.add(series_name="确诊数",
        # 数据对,系列数据项,格式为 [(key1, value1), (key2, value2)]
        # data_pair=[["华北", 20], ["东北",30]]
        data_pair=data_pair,

        # 半径,内半径 外半径
        radius=["50%", "75%"],
        )

pie.set_global_opts(tooltip_opts=opts.TooltipOpts(formatter="{a}<br/>{b} {d}%"),
                    title_opts=opts.TitleOpts(title="湖北省各城市的确诊占比"),
                    legend_opts=opts.LegendOpts(
                        type_='scroll',  #图例显示为滚动的效果
                        pos_left='30%'
                    )

                    )
# 希望百分比在label上显示
pie.set_series_opts(label_opts=opts.LabelOpts(
    formatter="{b} {d}%"
))

# 3.渲染输出
pie.render("湖北省各城市的确诊占比.html")

在这里插入图片描述

5、地图

from pyecharts.charts import Map
from pyecharts import options as opts
import pandas as pd

df = pd.read_excel("D:\pycharm\pythonProject\day19_pyecharts可视化./截至2月17日22时37分疫情数据.xlsx")
# 湖北上各个城市的确诊数
con1 = df["省份"] == '湖北'
con2 = df["城市"] != '湖北'

df = df.loc[con1 & con2, ["城市", "确诊数"]]

df.iloc[:-1, 0] = df.iloc[:-1, 0] + "市"

print(df)
data_pair = df.values.tolist()
# print(data_pair)


# 实例化地图
hubei_map = Map()

hubei_map.add(
    # 地图类型,具体参考 pyecharts.datasets.map_filenames.json 文件
    maptype="湖北",
    series_name="确诊数",
    # data_pair=[["武汉市", 200]]
    data_pair=data_pair,

    is_map_symbol_show=False,  # 关闭地图上的小红点

)

# 视觉映射配置--->全局配置项
hubei_map.set_global_opts(
    visualmap_opts=opts.VisualMapOpts(

        max_=45000,

        is_piecewise=True,  # 颜色以分段的形式呈现

        pieces=[
            # 没有写最小值,默认是-inf
            # 没有写最大值,默认是inf
            # 每个字典是一段数据,指定最小值 最大值,显示的信息 显示的颜色
            {
    
    "min": 10001, "label": ">10000", "color": "#4b0101"},
            {
    
    "max": 10000, "min": 5001, "label": "5001-10000", "color": "#4a0100"},
            {
    
    "max": 5000, "min": 1001, "label": "1001-5000", "color": "#8A0808"},
            {
    
    "max": 1000, "min": 500, "label": "500-1000", "color": "#B40404"},
            {
    
    "max": 499, "min": 100, "label": "100-499", "color": "#DF0101"},
            {
    
    "max": 99, "min": 10, "label": "10-99", "color": "#F5A9A9"},
            {
    
    "max": 9, "min": 1, "label": "1-9", "color": "#FFFFFF"},

            # {"min": 10001, "label": ">10000", "color": "#4b0101"},
            # {"max": 10000, "min": 5001, "label": "5001-10000", "color": "#4a0100"},
            # {"max": 5000, "min": 1001, "label": "1001-5000", "color": "blue"},
            # {"max": 1000, "min": 500, "label": "500-1000", "color": "green"},
            # {"max": 499, "min": 100, "label": "100-499", "color": "pink"},
            # {"max": 99, "min": 10, "label": "10-99", "color": "gray"},
            # {"max": 9, "min": 1, "label": "1-9", "color": "white"},

        ]

    )
)

hubei_map.render("湖北地图.html")

在这里插入图片描述

6、地理流向图

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

from pyecharts.globals import ChartType, SymbolType

ru_01_20 = "孝感、黄冈、鄂州、荆州、黄石、襄阳"
chu_01_20 = "孝感、黄冈、荆州、襄阳、黄石、荆门、鄂州、随州、仙桃"

city_name = set()  # python 中集合元素不能重复
data_pair = []

for city in ru_01_20.split("、"):
    data_pair.append([city, "武汉"])
    city_name.add(city)

for city in chu_01_20.split("、"):
    data_pair.append(["武汉", city])
    city_name.add(city)

print(data_pair)
print("所有城市名称", [[i, 1] for i in city_name])

# 实例化

geo = Geo()

# 添加地图类型
geo.add_schema(
    maptype="湖北",
    # itemstyle_opts=opts.ItemStyleOpts(color="#323c48", border_color="#111"),
    label_opts=opts.LabelOpts(is_show=True)  # 显示地图上的 城市名称
)

geo.add(
    "",
    # [("孝感市", 1), ("武汉市", 1)],
    [[i, 1] for i in city_name],
    type_=ChartType.EFFECT_SCATTER,
    color="red",
)

# 添加数据
geo.add(
    series_name="XXXXXXXX",
    # data_pair=[["孝感市", "武汉市"]],
    data_pair=data_pair,
    type_=ChartType.LINES,
    effect_opts=opts.EffectOpts(
        symbol=SymbolType.ARROW, symbol_size=6, color="blue"
    ),
    linestyle_opts=opts.LineStyleOpts(curve=0.2)
)

# 关闭label信息
geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))

geo.set_global_opts(
    legend_opts=opts.LegendOpts(is_show=False),  # 关闭图例
    title_opts=opts.TitleOpts("湖北省人口流向图",
                              pos_left='center',
                              )

)

geo.render("地理流向图.html")

在这里插入图片描述

7、地理流向图_时间轮转

from pyecharts.charts import Geo, Timeline  # Timeline 时间线、时间轮播多图
from pyecharts import options as opts
from pyecharts.globals import ChartType, SymbolType

# 原始数据
ru_01_20 = "孝感、黄冈、鄂州、荆州、黄石、襄阳"
chu_01_20 = "孝感、黄冈、荆州、襄阳、黄石、荆门、鄂州、随州、仙桃"
ru_01_21 = "孝感、黄冈、荆州、鄂州、黄石"
ru_01_22 = "孝感、黄冈、鄂州、荆州、咸宁、黄石"
chu_01_22 = "孝感、黄冈、荆州、襄阳、荆州、随州、宜昌、黄石、鄂州"


def get_data_pair(ru_data, chu_data):
    data_pair = []
    for city in ru_data.split("、"):
        data_pair.append([city, "武汉"])

    # 判断如果没有出的数据,不做任何操作
    if chu_data == "":
        pass
    else:
        for city in chu_data.split("、"):
            data_pair.append(["武汉", city])
    return data_pair


data_pair_20 = get_data_pair(ru_01_20, chu_01_20)
data_pair_21 = get_data_pair(ru_01_21, "")
data_pair_22 = get_data_pair(ru_01_22, chu_01_22)

data_pair = [data_pair_20,
             data_pair_21,
             data_pair_22
             ]

t1 = Timeline()

t1.add_schema(is_auto_play=True)  # 自动播放

for i, val in zip(range(3), ["01_20", "01_21", "01_22"]):
    geo = (
        # 实例化
        Geo()
            # 添加地图类型
            .add_schema(
            maptype="湖北",
            # itemstyle_opts=opts.ItemStyleOpts(color="#323c48", border_color="#111"),
            label_opts=opts.LabelOpts(is_show=True)  # 显示地图上的 城市名称
        )
            # 添加数据
            .add(
            series_name="XXXXXXXX",
            data_pair=data_pair[i],
            type_=ChartType.LINES,
            effect_opts=opts.EffectOpts(
                symbol=SymbolType.ARROW, symbol_size=6, color="blue"
            ),
            linestyle_opts=opts.LineStyleOpts(curve=0.2)
        )

            # 关闭label信息
            .set_series_opts(label_opts=opts.LabelOpts(is_show=False))

            .set_global_opts(
            legend_opts=opts.LegendOpts(is_show=False),  # 关闭图例
            title_opts=opts.TitleOpts(f"湖北省2020-{
      
      val}人口流向图",
                                      pos_left='center',
                                      )

        )
    )

    t1.add(geo, "2020-{}的情况".format(val))

t1.render("地理流向图_轮播多图.html")

在这里插入图片描述

8、世界地图

from pyecharts.charts import Map
from pyecharts import options as opts
import pandas as pd
from translate import Translator  # pip install translate
from day19_pyecharts可视化.map_transform import cn_en

df = pd.read_excel("E:\pycharm\pythonProject\day19_pyecharts可视化./截至2月17日22时37分疫情数据.xlsx")
con = df["省份"].str[-1] == '洲'
df = df.loc[con, ["城市", "确诊数"]]


def trans_en(val):
    if val in cn_en:
        return cn_en[val]
    else:
        return val


df["城市"] = df["城市"].transform(trans_en)

print(df)

# 世界地图中,国家名称必须是英文的
# cn_en_trans = Translator(from_lang="chinese", to_lang='english')
# en_name = cn_en_trans.translate("法国")
# print("对应的英文名称", en_name)

world_map = Map()

world_map.add(series_name="",
              # data_pair=[["China", 100], ["France", 200]],
              data_pair=df.values.tolist(),
              maptype="world",
              is_map_symbol_show=False
              )

world_map.set_series_opts(label_opts=opts.LabelOpts(is_show=False))

world_map.set_global_opts(
    visualmap_opts=opts.VisualMapOpts(

        max_=45000,

        is_piecewise=True,  # 颜色以分段的形式呈现

        pieces=[
            # 没有写最小值,默认是-inf
            # 没有写最大值,默认是inf
            # 每个字典是一段数据,指定最小值 最大值,显示的信息 显示的颜色
            {
    
    "min": 10001, "label": ">10000", "color": "#4b0101"},
            {
    
    "max": 10000, "min": 5001, "label": "5001-10000", "color": "#4a0100"},
            {
    
    "max": 5000, "min": 1001, "label": "1001-5000", "color": "#8A0808"},
            {
    
    "max": 1000, "min": 500, "label": "500-1000", "color": "#B40404"},
            {
    
    "max": 499, "min": 100, "label": "100-499", "color": "#DF0101"},
            {
    
    "max": 99, "min": 10, "label": "10-99", "color": "#F5A9A9"},
            {
    
    "max": 9, "min": 1, "label": "1-9", "color": "#FFFFFF"},

        ]

    )
)


world_map.render("世界确诊情况.html")

在这里插入图片描述

9、不同数量级折线图

import pandas as pd
import matplotlib.pyplot as plt
from pyecharts.charts import *  # 导入所有图表
from pyecharts import options as opts

df = pd.read_excel("D:\pycharm\pythonProject\day19_pyecharts可视化./疫情历史数据.xls", index_col=0)

# 按照时间排序
df.sort_values(by="时间", inplace=True)
print(df)

# 随着时间的变化 死亡数和治愈数的变化
date_time = df["时间"].astype(str).tolist()  # pyechart遇到数组、series、df记得转列列表
print(date_time)
death_nun = df["死亡数"].tolist()
cure_nun = df["治愈数"].tolist()
Suspected_nun = df["疑似数"].tolist()
ensure_nun = df["确诊数"].tolist()

# 死亡数和疑似数 数据不在一个量级,如果使用matplotlib进行绘制,其中数据少的一组,就乎为一条直线
# plt.plot(date_time, death_nun)
# plt.plot(date_time, Suspected_nun)
# plt.show()

line = Line()
line.add_xaxis(date_time)
line.add_yaxis(series_name="死亡数", y_axis=death_nun,
               yaxis_index=1,  # 参考哪个y轴

               )
line.add_yaxis(series_name="疑似数", y_axis=Suspected_nun,
               yaxis_index=0
               )

# 默认轴的编号为0
line.set_global_opts(yaxis_opts=opts.AxisOpts(
    name="疑似数",
    min_=1000,
    max_=30000
))

# 增加一个y轴,首先设置默认的y轴, 默认y轴在全局配置项中设置  # 新增的轴编号1
line.extend_axis(
    yaxis=opts.AxisOpts(
        name="死亡数",
        min_=0,
        max_=600

    )
)

line.render("疫情历史数据.html")


# 要求:死亡数和治愈数绘制为柱状图,疑似数和确诊数绘制为折线图;放在一个图中


在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45800653/article/details/121626743
今日推荐