import pandas as pd import matplotlib.pyplot as plt # 读取数据 df = pd.read_csv('data.csv') # 筛选需要绘制柱形图的列 col_name = 'score' data = df[col_name] # 自定义每个柱子的统计范围 bins = [0, 60, 70, 80, 90, 100] # 统计每个柱子的数据 hist, edges = pd.cut(data, bins=bins, right=False, include_lowest=True, retbins=True) counts = hist.value_counts() # 设置画布大小fig, ax = plt.subplots(figsize=(8, 6))# 绘制柱形图 plt.bar(counts.index.astype(str), counts.values) # 添加数据标签 for i, v in enumerate(counts.values): plt.text(i, v, str(v), ha='center', va='bottom') # 设置图表标题和坐标轴标签 plt.title('Score Distribution') plt.xlabel('Range') plt.ylabel('Count') # 显示图表 plt.show() 柱子从左到右的顺序是根据数量,能否改成根据bins的顺序
时间: 2023-12-14 11:36:15 浏览: 26
可以的,只需要在绘制柱形图时指定 x 轴的顺序即可。可以按照 bins 的顺序给每个柱子指定一个标签,然后将这些标签作为 x 轴的刻度值即可。修改后的代码如下:
```python
import pandas as pd
import matplotlib.pyplot as plt
# 读取数据
df = pd.read_csv('data.csv')
# 筛选需要绘制柱形图的列
col_name = 'score'
data = df[col_name]
# 自定义每个柱子的统计范围
bins = [0, 60, 70, 80, 90, 100]
# 统计每个柱子的数据
hist, edges = pd.cut(data, bins=bins, right=False, include_lowest=True, retbins=True)
counts = hist.value_counts()
# 按照 bins 的顺序给每个柱子指定标签
labels = [f'{bins[i]}-{bins[i+1]}' for i in range(len(bins)-1)]
# 设置画布大小
fig, ax = plt.subplots(figsize=(8, 6))
# 绘制柱形图,并按照 bins 的顺序指定 x 轴刻度值
plt.bar(labels, counts[labels])
# 添加数据标签
for i, v in enumerate(counts[labels]):
plt.text(i, v, str(v), ha='center', va='bottom')
# 设置图表标题和坐标轴标签
plt.title('Score Distribution')
plt.xlabel('Range')
plt.ylabel('Count')
# 显示图表
plt.show()
```
这样就可以根据 bins 的顺序绘制柱形图了。