Python:嵌套字典可视化的优化方案咨询(附示例)
嘿,我懂你现在的烦恼——当数据量变大时,默认的pandas柱状图确实会变得杂乱不堪,选手名字挤在一起、国家之间的对比也不清晰。这里有几个更优的可视化方案,能让你的数据展示得更直观:
方案1:分面(Facet)柱状图
这种方式会把每个国家的选手数据单独放在一个子图里,完全避免了不同国家数据的拥挤重叠,每个国家内部的选手得分对比也一目了然。适合需要聚焦单个国家选手表现,同时也能整体浏览所有国家情况的场景。
代码示例:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 把嵌套字典转换为长格式DataFrame,方便seaborn处理 df = pd.DataFrame(players_info).stack().reset_index() df.columns = ['Player', 'Country', 'Score'] # 创建分面柱状图 g = sns.catplot( data=df, x='Player', y='Score', col='Country', kind='bar', col_wrap=2, # 每行显示2个国家的子图 height=4, aspect=1.2 ) # 旋转x轴标签,避免重叠 g.set_xticklabels(rotation=45, ha='right') # 添加标题和调整布局 plt.suptitle('T20 Runs by Players per Country', y=1.02) plt.tight_layout() plt.show()
方案2:横向分组条形图
如果选手名字比较长,横向条形图(barh)能避免x轴标签的重叠问题,同时可以按国家对选手进行分组,让不同国家的同位置选手得分对比更直观。
代码示例:
import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame(players_info) # 绘制横向分组条形图 ax = df.plot(kind='barh', figsize=(10, 8), width=0.8) # 添加标签和标题 ax.set_xlabel('Total Runs') ax.set_ylabel('Players') ax.set_title('T20 Runs Comparison Across Countries') # 添加数据标签,方便读取具体数值 for container in ax.containers: ax.bar_label(container, fmt='%.1f') plt.tight_layout() plt.show()
方案3:堆叠柱状图(按国家汇总+选手细分)
如果你既想看到每个国家的总得分,又想知道单个选手对国家得分的贡献,堆叠柱状图是个不错的选择。它把每个国家的选手得分堆叠在一起,既能对比国家总得分,也能看到内部选手的占比。
代码示例:
import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame(players_info) # 绘制堆叠柱状图(转置后国家作为x轴) ax = df.T.plot(kind='bar', stacked=True, figsize=(10, 6)) # 旋转x轴标签 ax.set_xticklabels(ax.get_xticklabels(), rotation=0) # 添加标题和标签 ax.set_title('Total T20 Runs per Country (Stacked by Players)') ax.set_xlabel('Country') ax.set_ylabel('Total Runs') # 添加图例,放在合适位置 plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left') plt.tight_layout() plt.show()
这些方案各有侧重,你可以根据自己的需求选择:
- 想单独看每个国家的选手表现选分面柱状图
- 选手名字长、想对比同一选手在不同国家的得分选横向分组条形图
- 想同时看国家总分和选手贡献选堆叠柱状图
内容的提问来源于stack exchange,提问作者muazfaiz
相关产品推荐
相关产品推荐

