当前位置:   article > 正文

Python使用pyecharts库制作桑基图_pyecharts桑基图最多只有4列

pyecharts桑基图最多只有4列

桑基图不是特别常见的图表,一般是用于具有流向关系的数据可视化,比如购买链路/路径,可以清晰地知道顾客一二三四单分别买了什么;

数据格式

桑基图需要两组数据

  1. 数据节点(nodes),数据格式如下:

    1. [
    2. {"name": "category1"},
    3. {"name": "category2"},
    4. {"name": "category3"},
    5. {"name": "category4"},
    6. {"name": "category5"},
    7. {"name": "category6"},
    8. ]

    当然你还可以在此单独定义每个数据项的样式,如:

    1. [
    2. {"name": "category1", , itemStyle={"color": '#78b4ff'}},
    3. {"name": "category2"},
    4. {"name": "category3"},
    5. {"name": "category4", , itemStyle={"opacity": 0.3}},
    6. {"name": "category5"},
    7. {"name": "category6"},
    8. ]
  2. 节点之间的关系(links),数据格式如下:

    1. [
    2. {"source": "category1", "target": "category2", "value": 10},
    3. {"source": "category2", "target": "category3", "value": 15},
    4. {"source": "category3", "target": "category4", "value": 20},
    5. {"source": "category5", "target": "category6", "value": 25},
    6. ]

    通过命名其实就可以看出来,source表示源头,target表示目标,value表示数值大小;

参数解释

桑基图支持的参数如下:

  1. def add(
  2. # 系列名称,用于 tooltip 的显示,legend 的图例筛选。
  3. series_name: str,
  4. nodes: Sequence,
  5. links: Sequence,
  6. # 是否选中图例
  7. is_selected: bool = True,
  8. # Sankey 组件离容器左侧的距离。
  9. pos_left: types.Union[str, types.Numeric] = "5%",
  10. # Sankey 组件离容器上侧的距离。
  11. pos_top: types.Union[str, types.Numeric] = "5%",
  12. # Sankey 组件离容器右侧的距离。
  13. pos_right: types.Union[str, types.Numeric] = "20%",
  14. # Sankey 组件离容器下侧的距离。
  15. pos_bottom: types.Union[str, types.Numeric] = "5%",
  16. # 桑基图中每个矩形节点的宽度。
  17. node_width: Numeric = 20,
  18. # 桑基图中每一列任意两个矩形节点之间的间隔。
  19. node_gap: Numeric = 8,
  20. # 桑基图中节点的对齐方式,默认是双端对齐,可以设置为左对齐或右对齐,对应的值分别是:
  21. # justify: 节点双端对齐。
  22. # left: 节点左对齐。
  23. # right: 节点右对齐。
  24. node_align: str = "justify",
  25. # 布局的迭代次数,用来不断优化图中节点的位置,以减少节点和边之间的相互遮盖。
  26. # 默认布局迭代次数:32。
  27. # 注: 布局迭代次数不要低于默认值。
  28. layout_iterations: types.Numeric = 32,
  29. # 桑基图中节点的布局方向,可以是水平的从左往右,也可以是垂直的从上往下。
  30. # 对应的参数值分别是 horizontal, vertical。
  31. orient: str = "horizontal",
  32. # 控制节点拖拽的交互,默认开启。开启后,用户可以将图中任意节点拖拽到任意位置。若想关闭此交互,只需将值设为 false 就行了。
  33. is_draggable: bool = True,
  34. # 鼠标 hover 到节点或边上,相邻接的节点和边高亮的交互,默认关闭,可手动开启。
  35. # false:hover 到节点或边时,只有被 hover 的节点或边高亮。
  36. # true:同 'allEdges'。
  37. # 'allEdges':hover 到节点时,与节点邻接的所有边以及边对应的节点全部高亮。hover 到边时,边和相邻节点高亮。
  38. # 'outEdges':hover 的节点、节点的出边、出边邻接的另一节点 会被高亮。hover 到边时,边和相邻节点高亮。
  39. # 'inEdges':hover 的节点、节点的入边、入边邻接的另一节点 会被高亮。hover 到边时,边和相邻节点高亮。
  40. focus_node_adjacency: types.Union[bool, str] = False,
  41. # 桑基图每一层的设置。可以逐层设置
  42. levels: types.SankeyLevel = None,
  43. # 标签配置项,参考 `series_options.LabelOpts`
  44. label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
  45. # 线条样式配置项,参考 `series_options.LineStyleOpts`
  46. linestyle_opt: Union[opts.LineStyleOpts, dict] = opts.LineStyleOpts(),
  47. # 提示框组件配置项,参考 `series_options.TooltipOpts`
  48. tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
  49. )

分层设置

可以针对桑基图的每一层进行样式配置,支持的配置项如下:

  1. class SankeyLevelsOpts(
  2. # 指定设置的是桑基图哪一层,取值从 0 开始。
  3. depth: Numeric = None,
  4. # 桑基图指定层节点的样式。参考 `global_opts.ItemStyleOpts`
  5. itemstyle_opts: Union[ItemStyleOpts, dict, None] = None,
  6. # 桑基图指定层出边的样式。
  7. # 其中 lineStyle.color 支持设置为'source'或者'target'特殊值,此时出边会自动取源节点或目标节点的颜色作为自己的颜色。
  8. # 参考 `global_opts.LineStyleOpts`
  9. linestyle_opts: Union[LineStyleOpts, dict, None] = None,
  10. )

基本示例

In [1]:

  1. import pandas as pd
  2. import numpy as np
  3. from pyecharts import options as opts
  4. from pyecharts.charts import Sankey
  5. data = pd.read_excel(r'D:\Sone\CODE\sankey\sankey.xlsx')
  6. # 生成nodes
  7. nodes = []
  8. data1=np.append(data["品类1"],data["品类2"])
  9. for i in set(data1):
  10. nodes.append({
  11. 'name':i
  12. })
  13. # 生成links
  14. links = []
  15. for a,b,c in zip(data["品类1"],data["品类2"],data["人数"]):
  16. links.append({
  17. "source":a,
  18. "target":b,
  19. "value":c
  20. })
  21. c = (
  22. Sankey(init_opts=opts.InitOpts(width="1200px", height="800px",theme='westeros'))
  23. .add(
  24. "",
  25. nodes=nodes,
  26. links=links,
  27. focus_node_adjacency=True, #是否高亮
  28. linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color="source"),
  29. label_opts=opts.LabelOpts(position="right"),
  30. )
  31. .set_global_opts(title_opts=opts.TitleOpts(title="桑基图"))
  32. .render("D:\Sone\CODE\sankey\test.html")
  33. )

Out [1]:

  • 欢迎点赞,Fork~~
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/71030
推荐阅读
相关标签
  

闽ICP备14008679号