如何在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()
关键实现说明
- 实时价格获取:调用Binance公开API批量获取各币种的实时价格,并处理获取失败的情况,过滤无效数据。
- 指标计算:基于CSV数据和实时价格,计算当前价值、买入成本、涨跌幅百分比等核心指标。
- Treemap自定义标签:通过
customdata传入自定义数据,再利用texttemplate配置标签展示格式,解决了Plotly Treemap默认标签无法满足需求的问题。
内容的提问来源于stack exchange,提问作者Rectanglle
相关产品推荐
相关产品推荐

