You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Plotly Treemap中配置加密货币组合标签?

加密货币组合Plotly Treemap追踪实现

需求背景

通过CSV文件记录加密货币的币种(symbol)、持有数量(amount)、买入价(PurchasePrice),需要在Plotly Treemap中展示以下信息:

  • 币种名称
  • 当前价值(持有数量 × 实时市价)
  • 买入成本(持有数量 × 买入价)
  • 涨跌幅百分比

此前因Plotly Treemap自定义标签的相关文档较少,尝试多种配置均未成功,最终完成需求并整理出可运行代码。

完整可运行代码

import requests
import pandas as pd
import plotly.express as px
import numpy as np

# Binance公开API获取实时价格
binance_api_url = "https://api.binance.com/api/v3/ticker/price"

# 读取CSV中的组合数据
portfolio_df = pd.read_csv('Crypto.csv')

# 批量获取各币种实时价格
prices = {}
for index, row in portfolio_df.iterrows():
    symbol = row['symbol']
    response = requests.get(binance_api_url, params={'symbol': symbol})
    
    try:
        data = response.json()
        prices[symbol] = float(data['price'])
    except KeyError as e:
        print(f"获取{symbol}价格失败,响应内容: {response.text}")
        prices[symbol] = None

# 过滤掉无法获取价格的币种
portfolio_df = portfolio_df[portfolio_df['symbol'].isin(prices.keys())]

# 计算各币种当前价值
portfolio_df['value'] = round((portfolio_df['amount'] * portfolio_df['symbol'].map(prices)), 2)
# 计算买入总成本
portfolio_df["PurchaseCost"] = portfolio_df['amount'] * portfolio_df['PurchasePrice']
# 计算涨跌幅百分比
portfolio_df["PercentageChange"] = round((portfolio_df['symbol'].map(prices)/portfolio_df["PurchasePrice"])*100 - 100, 2)

# 计算组合总价值及整体涨跌幅
total_portfolio_value = portfolio_df['value'].sum()
# 注:此处portfolio_cost的计算为示例逻辑,可根据实际情况调整
portfolio_cost = (len(portfolio_df.index) + 1) * 100
portfolio_percentage = round((total_portfolio_value/portfolio_cost - 1)*100, 2)

# 创建Treemap,添加统一父节点
portfolio_df['parent'] = '全部加密货币'
fig = px.treemap(
    names=portfolio_df['symbol'],
    parents=portfolio_df['parent'],
    values=portfolio_df['value'],
    title=f"加密货币组合Treemap (当前总价值: {total_portfolio_value:.2f} USD | 整体涨跌幅: {portfolio_percentage}%)",
    color=portfolio_df['value'],
    color_continuous_scale='Viridis'
)

# 自定义Treemap标签内容
fig.data[0].customdata = np.column_stack([
    portfolio_df['symbol'], 
    portfolio_df['value'], 
    portfolio_df["PurchaseCost"], 
    portfolio_df["PercentageChange"]
])
fig.data[0].texttemplate = "%{customdata[0]}<br>当前价值: $%{customdata[1]}<br>买入成本: $%{customdata[2]}<br>涨跌幅: %{customdata[3]}%"

# 展示Treemap
fig.show()

关键实现说明

  1. 实时价格获取:调用Binance公开API批量获取各币种的实时价格,并处理获取失败的情况,过滤无效数据。
  2. 指标计算:基于CSV数据和实时价格,计算当前价值、买入成本、涨跌幅百分比等核心指标。
  3. Treemap自定义标签:通过customdata传入自定义数据,再利用texttemplate配置标签展示格式,解决了Plotly Treemap默认标签无法满足需求的问题。

内容的提问来源于stack exchange,提问作者Rectanglle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 06:26:36