在Jupyter Notebook中绘制字典数值所有组合和的图表求助
实现方案:生成字典元素所有组合的和并可视化
我来帮你搞定这个需求,下面是在Jupyter Notebook中用matplotlib和seaborn实现的完整步骤,代码可直接运行:
步骤1:导入所需工具库
首先要导入生成组合的工具、数据处理库和可视化库:
import itertools import pandas as pd import matplotlib.pyplot as plt import seaborn as sns
步骤2:预处理原始字典
先把原始字典的键值对按数值降序排序,这样后续生成的组合内部元素可以直接按数值从大到小展示:
dict1 = {'l': 12, 'b': 20, 'k': 1, 'a': 10, 'd': 30} # 按值降序排序,得到键值对列表 sorted_items = sorted(dict1.items(), key=lambda x: -x[1]) # 提取排序后的键和值,方便后续使用 sorted_keys = [item[0] for item in sorted_items]
步骤3:生成所有非空组合并计算和
用itertools.combinations生成所有长度从1到5的非空组合,同时计算每个组合的和,生成可读性强的组合标签(比如d(30)+b(20)):
combinations_data = [] # 遍历所有可能的组合长度(1到字典元素总数) for length in range(1, len(sorted_items)+1): # 基于排序后的键生成当前长度的所有组合 for combo in itertools.combinations(sorted_keys, length): # 计算组合的和 combo_sum = sum([dict1[key] for key in combo]) # 生成组合标签:按数值降序展示元素 combo_label = "+".join([f"{key}({dict1[key]})" for key in combo]) # 把数据存入列表 combinations_data.append({"组合": combo_label, "和": combo_sum})
步骤4:按和降序排序数据
把数据转换成DataFrame,然后按和列降序排列:
df = pd.DataFrame(combinations_data) # 按和降序排序,若和相同则按组合标签排序(可选) df_sorted = df.sort_values(by="和", ascending=False).reset_index(drop=True)
步骤5:绘制可视化图表
用seaborn绘制条形图,同时处理x轴标签重叠的问题:
# 设置绘图风格 sns.set_style("whitegrid") plt.figure(figsize=(12, 8)) # 绘制条形图 sns.barplot(data=df_sorted, x="组合", y="和", palette="viridis") # 设置图表标题与标签 plt.title("字典元素所有组合的和(降序排列)", fontsize=14) plt.xlabel("组合(元素按数值降序)", fontsize=12) plt.ylabel("组合和", fontsize=12) # 旋转x轴标签,避免重叠 plt.xticks(rotation=90, fontsize=10) # 调整布局,防止标签被截断 plt.tight_layout() # 显示图表 plt.show()
额外说明
- 这里生成的是所有非空组合,如果需要包含空组合(和为0),只需在循环中加入长度为0的情况即可。
- 组合内的元素默认按数值降序展示,因为我们预先对字典做了排序处理,生成组合时基于排序后的键,标签自然符合要求。
- 你可以根据实际需求调整图表尺寸、颜色主题或者x轴标签的旋转角度。
内容的提问来源于stack exchange,提问作者user3206440
相关产品推荐
相关产品推荐

