如何在Plotly饼图中添加带百分比与记录数的指示箭头?
解决Plotly饼图添加指示箭头与自定义文本的问题
核心修改点
要实现带指示箭头、同时显示百分比和记录数的效果,需完成两个关键调整:
- 启用饼图的指示箭头(通过
pull参数) - 自定义文本内容,结合百分比与记录数信息
修改后的完整代码
import pandas as pd import plotly.express as px from sklearn.model_selection import train_test_split moneyFlow = pd.read_excel('moneyFlow.xlsx').drop(columns=['Unnamed: 0']) X = moneyFlow.drop(["Sentiment"], axis=1) y = moneyFlow["Sentiment"] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=42) split_df = pd.DataFrame({ 'DataSplit': ['Train', 'Test'], 'Percentage': [round((len(X_train) / len(X)) * 100, 3), round((len(X_test) / len(X)) * 100, 3)], 'Number of Records': [len(X_train), len(X_test)] }) # 生成自定义显示文本,格式为「百分比% (记录数)」 split_df['DisplayText'] = split_df.apply(lambda row: f"{row['Percentage']}% ({row['Number of Records']})", axis=1) fig = px.pie(split_df, values='Percentage', names='DataSplit', color="DataSplit", title='Percentage of Data Split using train_test_split', labels={'Percentage': 'Percentage (%)'}, hover_data=['Number of Records'], hole=0.3, color_discrete_map={'Train':'darkblue', 'Test':'royalblue'}) # 配置指示箭头与自定义文本 fig.update_traces( textinfo='text', text=split_df['DisplayText'], pull=[0.05, 0.05], # 拉出饼块以显示箭头,数值可按需调整 textposition='outside' ) fig.show()
关键说明
- 自定义文本:通过
apply方法生成包含百分比和记录数的组合文本,避开textinfo默认参数的限制 - 指示箭头:设置
pull参数让饼块轻微向外拉出,Plotly会自动生成连接饼块与文本的指示箭头;textposition='outside'确保文本显示在饼块外侧 - 样式调整:
pull的数值可根据视觉需求修改,数值越大,饼块拉出的距离越远,箭头效果越明显
内容的提问来源于stack exchange,提问作者Riddle
相关产品推荐
相关产品推荐

