这一章接着上一篇博客的内容,介绍一些我们常见的基本图形。
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()
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()
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()
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()
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()
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()
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()
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()
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(
# 数据值,如果包含 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()
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()