pyecharts圖表庫學習:Scatter(散點圖)、 Scatter3D(3D 散點圖)

Scatter(散點圖)

直角座標系上的散點圖可以用來展現數據的 x,y 之間的關係,如果數據項有多個維度,可以用顏色來表現,利用 geo 組件。
Scatter.add() 方法簽名

add(name, x_axis, y_axis,
    extra_data=None,
    symbol_size=10, **kwargs)

name -> str
	圖例名稱
x_axis -> list
	x 座標軸數據
y_axis -> list
	y 座標軸數據
extra_data -> list[int]
	第三維度數據,x 軸爲第一個維度,y 軸爲第二個維度。(可在 visualmap 中將視圖元素映射到第三維度)
extra_name -> list[str]
	額外的數據項的名稱,可以爲每個數據點指定一個名稱。
symbol_size -> int
	標記圖形大小,默認爲 10
from pyecharts import Scatter

v1 = [10, 20, 30, 40, 50, 60]
v2 = [10, 20, 30, 40, 50, 60]
scatter = Scatter("散點圖示例")
scatter.add("A", v1, v2)
scatter.add("B", v1[::-1], v2)
scatter.render()

在這裏插入圖片描述
利用 Visualmap 組件,通過顏色映射數值 is_visualmap=True

scatter = Scatter("散點圖示例")
scatter.add("A", v1, v2)
scatter.add("B", v1[::-1], v2, is_visualmap=True)
scatter.render()

利用 Visualmap 組件,通過圖形點大小映射數值
visual_type="size",
visual_range_size=[20, 80]

scatter = Scatter("散點圖示例")
scatter.add("A", v1, v2)
scatter.add(
    "B",
    v1[::-1],
    v2,
    is_visualmap=True,
    visual_type="size",
    visual_range_size=[20, 80],
)
scatter.render()

利用 Visualmap 組件映射到第三維度數據

data = [
        [28604, 77, 17096869],
        [31163, 77.4, 27662440],
        [1516, 68, 1154605773],
        [13670, 74.7, 10582082],
        [28599, 75, 4986705],
        [29476, 77.1, 56943299],
        [31476, 75.4, 78958237],
        [28666, 78.1, 254830],
        [1777, 57.7, 870601776],
        [29550, 79.1, 122249285],
        [2076, 67.9, 20194354],
        [12087, 72, 42972254],
        [24021, 75.4, 3397534],
        [43296, 76.8, 4240375],
        [10088, 70.8, 38195258],
        [19349, 69.6, 147568552],
        [10670, 67.3, 53994605],
        [26424, 75.7, 57110117],
        [37062, 75.4, 252847810]
    ]

x_lst = [v[0] for v in data]
y_lst = [v[1] for v in data]
extra_data = [v[2] for v in data]
sc = Scatter()
sc.add(
    "scatter",
    x_lst,
    y_lst,
    extra_data=extra_data,
    is_visualmap=True,
    visual_dimension=2,
    visual_orient="horizontal",
    visual_type="size",
    visual_range=[254830, 1154605773],
    visual_text_color="#000",
)
sc.render()

散點圖默認的座標軸都爲數值軸,如果想實現橫座標爲類目軸,可通過 xaxis_type 修改

scatter = Scatter("散點圖示例")
scatter.add("A", ["a", "b", "c", "d", "e", "f"], v2)
scatter.add("B", ["a", "b", "c", "d", "e", "f"], v1[::-1], xaxis_type="category")
scatter.render()

Scatter 還內置了畫畫方法

EffectScatter(帶有漣漪特效動畫的散點圖)

利用動畫特效可以將某些想要突出的數據進行視覺突出。
EffectScatter.add() 方法簽名

add(name, x_axis, y_axis,
    symbol_size=10, **kwargs)

name –> str : 圖例名稱
x_axis –> list : x 座標軸數據
y_axis –> list : y 座標軸數據
symbol_size –> int : 標記圖形大小.

symbol –> str : 標記圖形, 有 “rect”, “roundRect”, “triangle”, “diamond”, “pin”, “arrow” 可選.

effect_brushtype –> str : 波紋繪製方式, 有 “stroke”, “fill” 可選, 默認爲 “stroke”
effect_scale –> float : 動畫中波紋的最大縮放比例, 默認爲 2.5
effect_period –> float : 動畫持續時間, 默認爲 4s.
from pyecharts import EffectScatter

v1 = [10, 20, 30, 40, 50, 60]
v2 = [25, 20, 15, 10, 60, 33]
es = EffectScatter("動態散點圖示例")
es.add("effectScatter", v1, v2)
es.render()

在這裏插入圖片描述
動態散點圖各種圖形

es = EffectScatter("動態散點圖各種圖形示例")
es.add(
    "",
    [10],
    [10],
    symbol_size=20,
    effect_scale=3.5,
    effect_period=3,
    symbol="pin",
)
es.add(
    "",
    [20],
    [20],
    symbol_size=12,
    effect_scale=4.5,
    effect_period=4,
    symbol="rect",
)
es.add(
    "",
    [30],
    [30],
    symbol_size=30,
    effect_scale=5.5,
    effect_period=5,
    symbol="roundRect",
)
es.add(
    "",
    [40],
    [40],
    symbol_size=10,
    effect_scale=6.5,
    effect_brushtype="fill",
    symbol="diamond",
)
es.add(
    "",
    [50],
    [50],
    symbol_size=16,
    effect_scale=5.5,
    effect_period=3,
    symbol="arrow",
)
es.add(
    "",
    [60],
    [60],
    symbol_size=6,
    effect_scale=2.5,
    effect_period=3,
    symbol="triangle",
)
es.render()

在這裏插入圖片描述

Scatter3D(3D 散點圖)

Scatter3D.add()方法簽名

add(name, data,
    grid3d_opacity=1, **kwargs)
name -> str
	圖例名稱
data -> [list], 包含列表的列表
	數據項,數據中,每一行是一個『數據項』,每一列屬於一個『維度』
grid3d_opacity -> int
	3D 笛卡爾座標系組的透明度(點的透明度),默認爲 1,完全不透明。
from pyecharts import Scatter3D

import random
data = [
    [random.randint(0, 100),
    random.randint(0, 100),
    random.randint(0, 100)] for _ in range(80)
]
range_color = [
    '#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf',
    '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026']
scatter3D = Scatter3D("3D 散點圖示例", width=1200, height=600)
scatter3D.add("", data, is_visualmap=True, visual_range_color=range_color)
scatter3D.render()

Note: 可配合 axis3D 通用配置項 一起使用

Surface3D(3D 曲面圖)

Surface3D.add() 方法簽名

add(name, data,
    grid3d_opacity=1, **kwargs)
name -> str
	圖例名稱
data -> [list]/ndarray, 包含列表的列表
	數據項,數據中,每一行是一個『數據項』,每一列屬於一個『維度』
grid3d_opacity -> int
	3D 笛卡爾座標系組的透明度(點的透明度),默認爲 1,完全不透明。
import math

from pyecharts import Surface3D


def create_surface3d_data():
    for t0 in range(-60, 60, 1):
        y = t0 / 60
        for t1 in range(-60, 60, 1):
            x = t1 / 60
            if math.fabs(x) < 0.1 and math.fabs(y) < 0.1:
                z = '-'
            else:
                z = math.sin(x * math.pi) * math.sin(y * math.pi)
            yield [x, y, z]

range_color = [
    "#313695",
    "#4575b4",
    "#74add1",
    "#abd9e9",
    "#e0f3f8",
    "#ffffbf",
    "#fee090",
    "#fdae61",
    "#f46d43",
    "#d73027",
    "#a50026",
]

_data = list(create_surface3d_data())
surface3d = Surface3D("3D 曲面圖示例", width=1200, height=600)
surface3d.add(
    "",
    _data,
    is_visualmap=True,
    visual_range_color=range_color,
    visual_range=[-3, 3],
    grid3d_rotate_sensitivity=5,
)
surface3d.render()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章