如何修改Pandas直方图的X轴以匹配目标样式?
问题
我有一个存储智能手机容量数据的DataFrame,数据示例如下:
| index | capacity |
|---|---|
| 1 | 128 |
| 2 | 64 |
| 3 | 256 |
| 4 | 512 |
| 5 | 64 |
| 6 | 32 |
| ... | ... |
我希望为该数据生成直方图,尝试使用以下代码:
data.hist(column="capacity", bins=data["capacity"].unique().size, range=(0, max(data["capacity"])), grid=False, edgecolor='black') plt.show()
当前生成的直方图X轴按100区间划分,我希望将其调整为以具体容量值为X轴的样式,请问该如何实现?
解决方案
你的容量数据是离散的固定值,默认的hist()方法会按连续区间划分X轴,要改成显示具体容量值,有两种实用方法:
方法一:用柱状图直接展示离散频数(推荐)
直接统计每个容量的出现次数,用bar()绘制柱状图,X轴自然就是具体的容量值:
import matplotlib.pyplot as plt # 统计每个容量的出现次数并按容量排序 capacity_counts = data["capacity"].value_counts().sort_index() # 绘制柱状图 plt.bar(capacity_counts.index, capacity_counts.values, edgecolor='black') # 设置图表标签 plt.xlabel("Capacity") plt.ylabel("Count") plt.title("Smartphone Capacity Distribution") plt.show()
方法二:调整hist()的bins参数
如果坚持用hist()方法,需要手动设置bins的边界,让每个柱子刚好对应一个容量值,再把X轴刻度改成具体容量:
import matplotlib.pyplot as plt # 获取排序后的唯一容量值 unique_caps = sorted(data["capacity"].unique()) # 设置bins边界,每个容量值前后各留小范围,确保柱子对应准确 bins = [cap - 1 for cap in unique_caps] + [unique_caps[-1] + 1] # 绘制直方图 data.hist(column="capacity", bins=bins, grid=False, edgecolor='black') # 设置X轴刻度为具体容量值 plt.xticks(unique_caps) plt.xlabel("Capacity") plt.ylabel("Count") plt.show()
两种方法都能实现你要的效果,第一种更适合离散数据的展示逻辑,操作也更简单。
内容的提问来源于stack exchange,提问作者Topinambur
相关产品推荐
相关产品推荐

