如何利用字典变量标签绘制带含义标注的条形图/直方图?
解决方法
下面提供两种实用方案,按需选择:
方案1:先替换DataFrame中的分类值,再绘图
直接将原分类列映射为对应的含义文本,后续绘图时X轴会自动显示替换后的值,无需额外调整刻度。
代码示例
import pandas as pd import matplotlib.pyplot as plt # 示例DataFrame df = pd.DataFrame({'food': ['a', 'b', 'a', 'c', 'd', 'b', 'a', 'c']}) # 定义分类映射字典 food_mapping = {'a': 'apple', 'b': 'banana', 'c': 'couscous', 'd': 'dragon'} # 替换列值(可选择创建新列或覆盖原列) df['food'] = df['food'].replace(food_mapping) # 覆盖原列;若不想修改原数据,用df['food_full'] = ... # 绘制条形图 df['food'].value_counts().plot(kind='bar') plt.xlabel('食物类型') plt.ylabel('数量') plt.title('食物分布统计') plt.show()
注:使用replace()而非map()的好处是,若DataFrame中存在映射字典未覆盖的分类值,会保留原数值而非转为NaN。
方案2:不修改原数据,绘图时自定义X轴刻度标签
如果不想改动原始数据集,可先统计分类的计数,再手动替换X轴的刻度文本。
代码示例(Matplotlib)
import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame({'food': ['a', 'b', 'a', 'c', 'd', 'b', 'a', 'c']}) food_mapping = {'a': 'apple', 'b': 'banana', 'c': 'couscous', 'd': 'dragon'} # 统计各分类的出现次数 count_data = df['food'].value_counts() # 绘制条形图 plt.bar(count_data.index, count_data.values) # 替换X轴刻度标签 plt.xticks( ticks=range(len(count_data.index)), labels=[food_mapping[code] for code in count_data.index] ) plt.xlabel('食物类型') plt.ylabel('数量') plt.title('食物分布统计') plt.show()
代码示例(Seaborn)
import seaborn as sns import matplotlib.pyplot as plt df = pd.DataFrame({'food': ['a', 'b', 'a', 'c', 'd', 'b', 'a', 'c']}) food_mapping = {'a': 'apple', 'b': 'banana', 'c': 'couscous', 'd': 'dragon'} # 绘制计数条形图 sns.countplot(data=df, x='food') # 替换刻度标签 plt.xticks( ticks=range(len(food_mapping)), labels=list(food_mapping.values()) ) plt.xlabel('食物类型') plt.ylabel('数量') plt.show()
内容的提问来源于stack exchange,提问作者Abhishek P
相关产品推荐
相关产品推荐

