当前位置: 首页 > article >正文

2024年Python最受欢迎桑基图

桑基图是一种数据可视化技术或流程图,强调从一种状态到另一种状态或从一个时间到另一个时间的流动/移动/变化,其中箭头的宽度与所描绘的广泛属性的流速成正比。桑基图强调系统内的主要转移或流动。它们有助于确定流动中最重要的贡献。它们通常显示定义的系统边界内的守恒量。

对比2023年和2024年最受欢迎编程语言

均以百分数显示,左侧是2023年各语言使用比,右侧是2024年各语言使用比,中间是各语言在2023年至2024年后的变化:上升或下降
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

🍇Python桑基图

桑基图通过定义源来表示源节点、目标来表示目标节点、值来设置流量以及显示节点名称的标签来可视化对流的贡献。

import plotly.graph_objects as go

fig = go.Figure(data=[go.Sankey(
    node = dict(
      pad = 15,
      thickness = 20,
      line = dict(color = "black", width = 0.5),
      label = ["A1", "A2", "B1", "B2", "C1", "C2"],
      color = "blue"
    ),
    link = dict(
      source = [0, 1, 0, 2, 3, 3], # indices correspond to labels, eg A1, A2, A1, B1, ...
      target = [2, 3, 3, 4, 4, 5],
      value = [8, 4, 2, 8, 4, 2]
  ))])

fig.update_layout(title_text="Basic Sankey Diagram", font_size=10)
fig.show()

带有彩色链接的更复杂的桑基图

import plotly.graph_objects as go
import urllib, json

url = 'https://raw.githubusercontent.com/plotly/plotly.js/master/test/image/mocks/sankey_energy.json'
response = urllib.request.urlopen(url)
data = json.loads(response.read())

# override gray link colors with 'source' colors
opacity = 0.4
# change 'magenta' to its 'rgba' value to add opacity
data['data'][0]['node']['color'] = ['rgba(255,0,255, 0.8)' if color == "magenta" else color for color in data['data'][0]['node']['color']]
data['data'][0]['link']['color'] = [data['data'][0]['node']['color'][src].replace("0.8", str(opacity))
                                    for src in data['data'][0]['link']['source']]

fig = go.Figure(data=[go.Sankey(
    valueformat = ".0f",
    valuesuffix = "TWh",
    # Define nodes
    node = dict(
      pad = 15,
      thickness = 15,
      line = dict(color = "black", width = 0.5),
      label =  data['data'][0]['node']['label'],
      color =  data['data'][0]['node']['color']
    ),
    # Add links
    link = dict(
      source =  data['data'][0]['link']['source'],
      target =  data['data'][0]['link']['target'],
      value =  data['data'][0]['link']['value'],
      label =  data['data'][0]['link']['label'],
      color =  data['data'][0]['link']['color']
))])

fig.update_layout(title_text="Energy forecast for 2050<br>Source: Department of Energy & Climate Change, Tom Counsell via <a href='https://bost.ocks.org/mike/sankey/'>Mike Bostock</a>",
                  font_size=10)
fig.show()

Dash 是使用 Plotly 图表在 Python 中构建分析应用程序的最佳方式。

from dash import Dash, dcc, html, Input, Output
import plotly.graph_objects as go
import json, urllib

app = Dash(__name__)

app.layout = html.Div([
    html.H4('Supply chain of the energy production'),
    dcc.Graph(id="graph"),
    html.P("Opacity"),
    dcc.Slider(id='slider', min=0, max=1, 
               value=0.5, step=0.1)
])

@app.callback(
    Output("graph", "figure"), 
    Input("slider", "value"))
def display_sankey(opacity):
    url = 'https://raw.githubusercontent.com/plotly/plotly.js/master/test/image/mocks/sankey_energy.json'
    response = urllib.request.urlopen(url)
    data = json.loads(response.read()) # replace with your own data source

    node = data['data'][0]['node']
    node['color'] = [
        f'rgba(255,0,255,{opacity})' 
        if c == "magenta" else c.replace('0.8', str(opacity)) 
        for c in node['color']]

    link = data['data'][0]['link']
    link['color'] = [
        node['color'][src] for src in link['source']]

    fig = go.Figure(go.Sankey(link=link, node=node))
    fig.update_layout(font_size=10)
    return fig

app.run_server(debug=True)

此示例还使用悬停模式来启用多个工具提示。

import plotly.graph_objects as go
import urllib, json

url = 'https://raw.githubusercontent.com/plotly/plotly.js/master/test/image/mocks/sankey_energy.json'
response = urllib.request.urlopen(url)
data = json.loads(response.read())

fig = go.Figure(data=[go.Sankey(
    valueformat = ".0f",
    valuesuffix = "TWh",
    node = dict(
      pad = 15,
      thickness = 15,
      line = dict(color = "black", width = 0.5),
      label =  data['data'][0]['node']['label'],
      color =  data['data'][0]['node']['color']
    ),
    link = dict(
      source =  data['data'][0]['link']['source'],
      target =  data['data'][0]['link']['target'],
      value =  data['data'][0]['link']['value'],
      label =  data['data'][0]['link']['label']
  ))])

fig.update_layout(
    hovermode = 'x',
    title="Energy forecast for 2050<br>Source: Department of Energy & Climate Change, Tom Counsell via <a href='https://bost.ocks.org/mike/sankey/'>Mike Bostock</a>",
    font=dict(size = 10, color = 'white'),
    plot_bgcolor='black',
    paper_bgcolor='black'
)

fig.show()

👉更新:亚图跨际


http://www.kler.cn/news/354503.html

相关文章:

  • 【LeetCode每日一题】——523.连续的子数组和
  • Qt入门教程:创建我的第一个小程序
  • 【YOLOv11】使用yolov11训练自己的数据集 /验证 /推理 /导出模型/ ONNX模型的使用
  • 【服装识别】Python+卷积神经网络算法+人工智能+深度学习+算法模型训练+Django网页界面+TensorFlow
  • JavaScript 第18章:安全性
  • 前端学习---(1)HTML
  • 如何使用C#实现Padim算法的训练和推理
  • 结构型-适配器模式
  • map和set的模拟实现
  • this指针—静态成员—单例模式
  • Spring AI Java程序员的AI之Spring AI(三)RAG实战
  • 排序算法上——插入,希尔,选择,堆排序
  • PTA L1系列题解(C语言)(L1_065 -- L1_072)
  • 无源雷达的直达波抑制--自适应信号算法
  • 软考-软件设计师(9)-C语言基础语法总结复习-针对简答题C语言代码填空
  • pnpm 和 npm
  • 如何分离人声和背景音乐?精准音频分离,提升你的作品质量
  • 前端容易错的题2
  • 【分布式知识】MapReduce详细介绍
  • 混合索引分配方式