数据可视化之pyecharts(3)

这一章接着上一篇博客的内容,介绍一些我们常见的基本图形。

极坐标系:Polar

import math
import random

from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Page, Polar

polar_scatter0 = Polar()
data = [(i, random.randint(1, 100)) for i in range(101)]
#type:bar,scatter,line,effectScatter
polar_scatter0.add("", data, type_="scatter", label_opts=opts.LabelOpts(is_show=False))
polar_scatter0.set_global_opts(title_opts=opts.TitleOpts(title="Polar-Scatter0"))
polar_scatter0.render_notebook()

数据可视化之pyecharts(3)_第1张图片

polar_scatter2 = Polar()
data = [(i, random.randint(1, 100)) for i in range(10)]
polar_scatter2.add("", data, type_="effectScatter",
                   effect_opts=opts.EffectOpts(scale=10, period=5),
                   label_opts=opts.LabelOpts(is_show=False))
polar_scatter2.set_global_opts(title_opts=opts.TitleOpts(title="Polar-Scatter2"))
polar_scatter2.render_notebook()

数据可视化之pyecharts(3)_第2张图片

极坐标系径向轴配置项

RadiusAxisOpts:( polar_index = None,data,boundary_gap = None,type= None,name,name_location = None, min= None,max=None,is_scale = False,splitline_opts= None,axisline_opts= None, axislabel_opts= None,z)

  • 径向轴所在的极坐标系的索引,默认使用第一个极坐标系。
    polar_index: Optional[int] = None,

  • 数据项,参考 global_options.RadiusAxisItem
    data: Optional[Sequence[Union[RadiusAxisItem, dict, str]]] = None,

  • 坐标轴两边留白策略,类目轴和非类目轴的设置和表现不一样。 类目轴中 boundaryGap 可以配置为 true 和 false。默认为
    true,这时候刻度只是作为分隔线, 标签和数据点都会在两个刻度之间的带(band)中间。
    非类目轴,包括时间,数值,对数轴,boundaryGap是一个两个值的数组,分别表示数据最小值和最大值的延伸范围
    可以直接设置数值或者相对的百分比,在设置 min 和 max 后无效。 示例:boundaryGap: [‘20%’, ‘20%’]。
    boundary_gap: Union[bool, Sequence] = None,

  • 坐标轴类型。可选:
    ‘value’: 数值轴,适用于连续数据。
    ‘category’: 类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据。
    ‘time’:时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同 。例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。
    ‘log’ 对数轴。适用于对数数据。
    type_: Optional[str] = None,

  • 坐标轴名称。 name: Optional[str] = None,

  • 坐标轴名称显示位置。可选: ‘start’, ‘middle’ 或者 ‘center’,‘end’ name_location:Optional[str] = None,

  • 坐标轴刻度最小值。 可以设置成特殊值 ‘dataMin’,此时取数据在该轴上的最小值作为最小刻度。
    不设置时会自动计算最小值保证坐标轴刻度的均匀分布。 在类目轴中,也可以设置为类目的序数(如类目轴 data: [‘类A’, ‘类B’,
    ‘类C’] 中,序数 2 表示 ‘类C’ 也可以设置为负数,如 -3)。
    min_: Union[str, Numeric, None] = None,

  • 坐标轴刻度最大值。 可以设置成特殊值 ‘dataMax’,此时取数据在该轴上的最大值作为最大刻度。
    不设置时会自动计算最大值保证坐标轴刻度的均匀分布。 在类目轴中,也可以设置为类目的序数(如类目轴 data: [‘类A’, ‘类B’,
    ‘类C’] 中,序数 2 表示 ‘类C’ 也可以设置为负数,如 -3)。
    max_: Union[str, Numeric, None]= None,

  • 只在数值轴中(type: ‘value’)有效。 是否是脱离 0 值比例。设置成 true 后坐标刻度不会强制包含零刻度。在双数值轴的散点图中比较有用。 在设置 min 和 max 之后该配置项无效。
    is_scale:bool = False,

  • 分割线配置项,参考 series_options.SplitLineOpts
    splitline_opts:Union[SplitLineOpts, dict, None] = None,

  • 坐标轴线风格配置项,参考 series_options.AxisLineOpts

  • axisline_opts:Union[AxisLineOpts, dict, None] = None,

  • 坐标轴线标签配置项,参考 series_options.LabelOpts

  • axislabel_opts:Union[LabelOpts, dict, None] = None,

  • 半径轴组件的所有图形的 z 值。控制图形的前后顺序。z 值 小的图形会被 z 值大的图形覆盖。
    z: Optional[int] =None,

#stack:数据堆叠,同个类目轴上系列配置相同的stack值可以堆叠放置。
polar_radiusaxis = Polar()
polar_radiusaxis.add_schema(
            radiusaxis_opts=opts.RadiusAxisOpts(data=Faker.week, type_="category")
        )
polar_radiusaxis.add("A", [1, 2, 3, 4, 3, 5, 1], type_="bar", stack="stack0")
polar_radiusaxis.add("B", [2, 4, 6, 1, 2, 3, 1], type_="bar", stack="stack0")
polar_radiusaxis.add("C", [1, 2, 3, 4, 1, 2, 5], type_="bar", stack="stack0")
polar_radiusaxis.set_global_opts(title_opts=opts.TitleOpts(title="Polar-RadiusAxis"))

polar_radiusaxis.render_notebook()

数据可视化之pyecharts(3)_第3张图片

AngleAxisOpts:极坐标系角度轴配置项

AngleAxisOpts(polar_index= None,data = None,start_angle= None,is_clockwise= False, boundary_gap= None,type= None, min= None,max= None,splitline_opts= None, axisline_opts= None,axislabel_opts= None,z= None)

polar_angleaxis=Polar()
polar_angleaxis.add_schema(
            angleaxis_opts=opts.AngleAxisOpts(data=Faker.week, type_="category")
        )
polar_angleaxis.add("A", [1, 2, 3, 4, 3, 5, 1], type_="bar", stack="stack0")
polar_angleaxis.add("B", [2, 4, 6, 1, 2, 3, 1], type_="bar", stack="stack0")
polar_angleaxis.add("C", [1, 2, 3, 4, 1, 2, 5], type_="bar", stack="stack0")
polar_angleaxis.set_global_opts(title_opts=opts.TitleOpts(title="Polar-AngleAxis")) 
polar_angleaxis.render_notebook()

数据可视化之pyecharts(3)_第4张图片

polar_flower = Polar()
data = []
for i in range(101):
    theta = i / 100 * 360
    r = 5 * (1 + math.sin(theta / 180 * math.pi))
    data.append([r, theta])
hour = [i for i in range(1, 25)]

polar_flower.add_schema(
        angleaxis_opts=opts.AngleAxisOpts(
            data=hour, type_="value", boundary_gap=False, start_angle=0
            )
        )
polar_flower.add("love", data, label_opts=opts.LabelOpts(is_show=False))
polar_flower.set_global_opts(title_opts=opts.TitleOpts(title="Polar-Love"))

polar_flower.render_notebook()

数据可视化之pyecharts(3)_第5张图片

polar_flower = Polar()
data = []
for i in range(361):
    t = i / 180 * math.pi
    r = math.sin(2 * t) * math.cos(2 * t)
    data.append([r, i])

polar_flower.add_schema(angleaxis_opts=opts.AngleAxisOpts(start_angle=0, min_=0))
polar_flower.add("flower", data, label_opts=opts.LabelOpts(is_show=False))
polar_flower.set_global_opts(title_opts=opts.TitleOpts(title="Polar-Flower"))
polar_flower.render_notebook()

数据可视化之pyecharts(3)_第6张图片

雷达图:Radar

from pyecharts import options as opts
from pyecharts.charts import Radar
radar_air_quality= Radar()
value_bj = [
        [55, 9, 56, 0.46, 18, 6, 1],
        [25, 11, 21, 0.65, 34, 9, 2],
        [56, 7, 63, 0.3, 14, 5, 3],
        [33, 7, 29, 0.33, 16, 6, 4],
        [42, 24, 44, 0.76, 40, 16, 5],
        [82, 58, 90, 1.77, 68, 33, 6],
        [74, 49, 77, 1.46, 48, 27, 7],
        [78, 55, 80, 1.29, 59, 29, 8],
        [267, 216, 280, 4.8, 108, 64, 9],
        [185, 127, 216, 2.52, 61, 27, 10],
        [39, 19, 38, 0.57, 31, 15, 11],
        [41, 11, 40, 0.43, 21, 7, 12],
    ]
value_sh = [
        [91, 45, 125, 0.82, 34, 23, 1],
        [65, 27, 78, 0.86, 45, 29, 2],
        [83, 60, 84, 1.09, 73, 27, 3],
        [109, 81, 121, 1.28, 68, 51, 4],
        [106, 77, 114, 1.07, 55, 51, 5],
        [109, 81, 121, 1.28, 68, 51, 6],
        [106, 77, 114, 1.07, 55, 51, 7],
        [89, 65, 78, 0.86, 51, 26, 8],
        [53, 33, 47, 0.64, 50, 17, 9],
        [80, 55, 80, 1.01, 75, 24, 10],
        [117, 81, 124, 1.03, 45, 24, 11],
        [99, 71, 142, 1.1, 62, 42, 12],
    ]
c_schema = [
        {"name": "AQI", "max": 300, "min": 5},
        {"name": "PM2.5", "max": 250, "min": 20},
        {"name": "PM10", "max": 300, "min": 5},
        {"name": "CO", "max": 5},
        {"name": "NO2", "max": 200},
        {"name": "SO2", "max": 100},
    ]
#shape:雷达图绘制类型,可选 'polygon' 和 'circle'
radar_air_quality.add_schema(schema=c_schema, shape="circle")
radar_air_quality.add("北京", value_bj, color="darkcyan")
radar_air_quality.add("上海", value_sh, color="indigo")
radar_air_quality.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
radar_air_quality.set_global_opts(title_opts=opts.TitleOpts(title="Radar-空气质量"))
#设置单列模式
'''radar_selected_mode.set_global_opts(
            legend_opts=opts.LegendOpts(selected_mode="single"),
            title_opts=opts.TitleOpts(title="Radar-单例模式"),
        )'''
radar_air_quality.render_notebook()

数据可视化之pyecharts(3)_第7张图片

桑基图:Sankey

import json
import os

from pyecharts import options as opts
from pyecharts.charts import Page, Sankey


sankey = Sankey()
nodes = [
        {"name": "category1"},
        {"name": "category2"},
        {"name": "category3"},
        {"name": "category4"},
        {"name": "category5"},
        {"name": "category6"},
    ]
links = [
        {"source": "category1", "target": "category2", "value": 10},
        {"source": "category2", "target": "category3", "value": 15},
        {"source": "category3", "target": "category4", "value": 20},
        {"source": "category5", "target": "category6", "value": 25},
    ] 
sankey.add(
            "sankey",
            nodes,
            links,
            linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color="source"),
            label_opts=opts.LabelOpts(position="right"),
        )
sankey.set_global_opts(title_opts=opts.TitleOpts(title="Sankey-基本示例"))
sankey.render_notebook()

数据可视化之pyecharts(3)_第8张图片

旭日图:Sunburst

add(

# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,

# 数据项。
data_pair: Sequence,

# 旭日图的中心(圆心)坐标,数组的第一项是横坐标,第二项是纵坐标。
# 支持设置成百分比,设置成百分比时第一项是相对于容器宽度,第二项是相对于容器高度。
center: Optional[Sequence] = None,

# 旭日图的半径。可以为如下类型:
# Sequence.:数组的第一项是内半径,第二项是外半径。
radius: Optional[Sequence] = None,

# 当鼠标移动到一个扇形块时,可以高亮相关的扇形块。
# 'descendant':高亮该扇形块和后代元素,其他元素将被淡化;
# 'ancestor':高亮该扇形块和祖先元素;
# 'self':只高亮自身;
# 'none':不会淡化其他元素。
highlight_policy: str = "descendant",

# 点击节点后的行为。可取值为:false:节点点击无反应。
# 'rootToNode':点击节点后以该节点为根结点。
# 'link':如果节点数据中有 link 点击节点后会进行超链接跳转。
node_click: str = "rootToNode",

# 扇形块根据数据 value 的排序方式,如果未指定 value,则其值为子元素 value 之和。
# 'desc':降序排序;
# 'asc':升序排序;
# 'null':表示不排序,使用原始数据的顺序;
# 使用 javascript 回调函数进行排列:
sort_: Optional[JSFunc] = "desc",

# 旭日图多层级配置
# 目前配置方式可以参考: https://www.echartsjs.com/option.html#series-sunburst.levels
levels: Optional[Sequence] = None,

# 标签配置项,参考 `series_options.LabelOpts`
label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),

# 数据项的配置,参考 `series_options.ItemStyleOpts`
itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,

)

SunburstItem: 旭日图的数据项

SunburstItem(

# 数据值,如果包含 children,则可以不写 value 值。
# 这时,将使用子元素的 value 之和作为父元素的 value。
# 如果 value 大于子元素之和,可以用来表示还有其他子元素未显示。
value: Optional[Numeric] = None,

# 显示在扇形块中的描述文字。
name: Optional[str] = None,

# 点击此节点可跳转的超链接。须 Sunburst.add.node_click 值为 'link' 时才生效
link: Optional[str] = None,

# 意义同 HTML  标签中的 target,跳转方式的不同
# blank 是在新窗口或者新的标签页中打开
# self 则在当前页面或者当前标签页打开
target: Optional[str] = "blank",

# 标签配置项,参考 `series_options.LabelOpts`
label_opts: Union[LabelOpts, dict, None] = None,

# 数据项配置项,参考 `series_options.ItemStyleOpts`
itemstyle_opts: Union[ItemStyleOpts, dict, None] = None,

# 子节点数据项配置配置(和 SunburstItem 一致, 递归下去)
children: Optional[Sequence] = None,
)
from pyecharts import options as opts
from pyecharts.charts import Sunburst


sunburst = Sunburst()
data = [
        opts.SunburstItem(
            name="Grandpa",
            children=[
                opts.SunburstItem(
                    name="Uncle Leo",
                    value=15,
                    children=[
                        opts.SunburstItem(name="Cousin Jack", value=2),
                        opts.SunburstItem(
                            name="Cousin Mary",
                            value=5,
                            children=[opts.SunburstItem(name="Jackson", value=2)],
                        ),
                        opts.SunburstItem(name="Cousin Ben", value=4),
                    ],
                ),
                opts.SunburstItem(
                    name="Father",
                    value=10,
                    children=[
                        opts.SunburstItem(name="Me", value=5),
                        opts.SunburstItem(name="Brother Peter", value=1),
                    ],
                ),
            ],
        ),
        opts.SunburstItem(
            name="Nancy",
            children=[
                opts.SunburstItem(
                    name="Uncle Nike",
                    children=[
                        opts.SunburstItem(name="Cousin Betty", value=1),
                        opts.SunburstItem(name="Cousin Jenny", value=2),
                    ],
                )
            ],
        ),
    ]

sunburst.add(series_name="", data_pair=data, radius=[0, "90%"])
sunburst.set_global_opts(title_opts=opts.TitleOpts(title="Sunburst-基本示例"))
sunburst.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}"))
    
sunburst.render_notebook()

数据可视化之pyecharts(3)_第9张图片

主题河流图:ThemeRiver

from pyecharts import options as opts
from pyecharts.charts import Page, ThemeRiver


themeriver = ThemeRiver()
data = [
        ["2015/11/08", 10, "DQ"],
        ["2015/11/09", 15, "DQ"],
        ["2015/11/10", 35, "DQ"],
        ["2015/11/14", 7, "DQ"],
        ["2015/11/15", 2, "DQ"],
        ["2015/11/16", 17, "DQ"],
        ["2015/11/17", 33, "DQ"],
        ["2015/11/18", 40, "DQ"],
        ["2015/11/19", 32, "DQ"],
        ["2015/11/20", 26, "DQ"],
        ["2015/11/08", 35, "TY"],
        ["2015/11/09", 36, "TY"],
        ["2015/11/10", 37, "TY"],
        ["2015/11/11", 22, "TY"],
        ["2015/11/12", 24, "TY"],
        ["2015/11/13", 26, "TY"],
        ["2015/11/14", 34, "TY"],
        ["2015/11/15", 21, "TY"],
        ["2015/11/16", 18, "TY"],
        ["2015/11/17", 45, "TY"],
        ["2015/11/18", 32, "TY"],
        ["2015/11/19", 35, "TY"],
        ["2015/11/20", 30, "TY"],
        ["2015/11/08", 21, "SS"],
        ["2015/11/09", 25, "SS"],
        ["2015/11/10", 27, "SS"],
        ["2015/11/11", 23, "SS"],
        ["2015/11/12", 24, "SS"],
        ["2015/11/13", 21, "SS"],
        ["2015/11/14", 35, "SS"],
        ["2015/11/15", 39, "SS"],
        ["2015/11/16", 40, "SS"],
        ["2015/11/17", 36, "SS"],
        ["2015/11/18", 33, "SS"],
        ["2015/11/19", 43, "SS"],
        ["2015/11/20", 40, "SS"],
        ["2015/11/14", 7, "QG"],
        ["2015/11/15", 2, "QG"],
        ["2015/11/16", 17, "QG"],
        ["2015/11/17", 33, "QG"],
        ["2015/11/18", 40, "QG"],
        ["2015/11/19", 32, "QG"],
        ["2015/11/20", 26, "QG"],
        ["2015/11/21", 35, "QG"],
        ["2015/11/22", 40, "QG"],
        ["2015/11/23", 32, "QG"],
        ["2015/11/24", 26, "QG"],
        ["2015/11/25", 22, "QG"],
        ["2015/11/08", 10, "SY"],
        ["2015/11/09", 15, "SY"],
        ["2015/11/10", 35, "SY"],
        ["2015/11/11", 38, "SY"],
        ["2015/11/12", 22, "SY"],
        ["2015/11/13", 16, "SY"],
        ["2015/11/14", 7, "SY"],
        ["2015/11/15", 2, "SY"],
        ["2015/11/16", 17, "SY"],
        ["2015/11/17", 33, "SY"],
        ["2015/11/18", 40, "SY"],
        ["2015/11/19", 32, "SY"],
        ["2015/11/20", 26, "SY"],
        ["2015/11/21", 35, "SY"],
        ["2015/11/22", 4, "SY"],
        ["2015/11/23", 32, "SY"],
        ["2015/11/24", 26, "SY"],
        ["2015/11/25", 22, "SY"],
        ["2015/11/08", 10, "DD"],
        ["2015/11/09", 15, "DD"],
        ["2015/11/10", 35, "DD"],
        ["2015/11/11", 38, "DD"],
        ["2015/11/12", 22, "DD"],
        ["2015/11/13", 16, "DD"],
        ["2015/11/14", 7, "DD"],
        ["2015/11/15", 2, "DD"],
        ["2015/11/16", 17, "DD"],
        ["2015/11/17", 33, "DD"],
        ["2015/11/18", 4, "DD"],
        ["2015/11/19", 32, "DD"],
        ["2015/11/20", 26, "DD"],
    ]

themeriver.add(
            ["DQ", "TY", "SS", "QG", "SY", "DD"],
            data,
            singleaxis_opts=opts.SingleAxisOpts(type_="time", pos_bottom="10%"),
        )
themeriver.set_global_opts(title_opts=opts.TitleOpts(title="ThemeRiver-基本示例"))

themeriver.render_notebook()

数据可视化之pyecharts(3)_第10张图片

你可能感兴趣的:(数据可视化之pyecharts(3))