如何为字母识别创建正确直方图?matplotlib绘图异常求助
问题出在哪?
你用plt.hist()的思路错了——hist()是给原始数据做频数统计用的,比如直接扔一堆字母进去,它会自动数每个字母出现多少次并画图。但你已经用value_counts()算好了每个字母的数量,再把这个结果塞给hist(),它会把这些数量值当成新数据再统计一遍,自然x轴就变成数量了。
两种解决办法
你要的是展示“字母-数量”对应关系的条形图,不是直方图,用下面两种方法都能搞定:
方法一:Pandas一键绘图(最省事)
不用额外拼DataFrame,直接对统计结果调用绘图接口:
import pandas as pd import matplotlib.pyplot as plt letters = pd.read_csv('C:/Users/Lenovo/Desktop/Yapay Zeka/odev1/letter_recognition.data') # 统计+绘图一步到位 letters['Letter'].value_counts().plot(kind='bar') plt.ylabel('数量') plt.xlabel('字母') plt.show()
方法二:Matplotlib手动画条形图
如果想自己控制细节,用plt.bar()直接传字母和数量:
import pandas as pd import matplotlib.pyplot as plt letters = pd.read_csv('C:/Users/Lenovo/Desktop/Yapay Zeka/odev1/letter_recognition.data') # 先拿到统计好的字母和数量 count_result = letters['Letter'].value_counts() # 画条形图 plt.bar(count_result.index, count_result.values) plt.ylabel('数量') plt.xlabel('字母') # 字母太多挤在一起的话,加个旋转标签的代码 plt.xticks(rotation=45) plt.show()
额外提一句
如果你非要用直方图的形式(其实没必要,条形图更适合类别数据),直接扔原始的字母列进去就行,hist()会自动帮你统计:
plt.hist(letters['Letter']) plt.ylabel('数量') plt.xlabel('字母') plt.show()
内容的提问来源于stack exchange,提问作者Duthé
相关产品推荐
相关产品推荐

