# 划分区间 bins = [0,1,2,3,4,5,10,15,20,25,30,35,40,45,50,60,70,80,90,100,1220] data=data_forecast_is_stk_bs_rpt_zq_befor_big['本年比上一年归母倍数'] # 统计每个柱子的数据 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=(18, 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() x轴的显示顺序能不能按bins的顺序,目前是按柱子的统计量排序
时间: 2023-12-14 10:36:49 浏览: 30
是可以按照 bins 的顺序来显示 x 轴的。你可以先将 labels 按照 bins 的顺序排序,然后再将 x 轴标签设置为排序后的 labels。代码示例:
```
# 将 labels 按照 bins 的顺序排序
labels = [f'{bins[i]}-{bins[i+1]}' for i in range(len(bins)-1)]
labels_sorted = sorted(labels, key=lambda x: bins[labels.index(x)])
# 绘制柱形图并设置 x 轴标签
plt.bar(labels_sorted, counts.values)
plt.xticks(labels_sorted)
# 其他代码不变
plt.title('Score Distribution')
plt.xlabel('Range')
plt.ylabel('Count')
plt.show()
```
相关问题
# 划分区间 bins = [0,1,2,3,4,5,10,15,20,25,30,35,40,45,50,60,70,80,90,100,1220] data = data_forecast_is_stk_bs_rpt_zq_befor_big['本年比上一年归母倍数'] # 统计每个柱子的数据 hist, edges = pd.cut(data, bins=bins, right=False, include_lowest=True, retbins=True) counts = hist.value_counts() # 按照 bins 的顺序给每个柱子指定标签 labels = counts.index.astype(str) fig, ax = plt.subplots(figsize=(18, 6)) # 绘制柱形图 plt.bar(labels, counts) # 添加数据标签 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() 用xticks修改成按bins顺序排
可以在绘制柱形图时,使用参数tick_label来指定x轴刻度的标签,将标签设置为bins列表即可按照bins的顺序排列。修改后的代码如下:
```python
import matplotlib.pyplot as plt
import pandas as pd
# 划分区间
bins = [0, 1, 2, 3, 4, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 60, 70, 80, 90, 100, 1220]
data = data_forecast_is_stk_bs_rpt_zq_befor_big['本年比上一年归母倍数']
# 统计每个柱子的数据
hist, edges = pd.cut(data, bins=bins, right=False, include_lowest=True, retbins=True)
counts = hist.value_counts()
# 按照 bins 的顺序给每个柱子指定标签
labels = [str(bins[i]) + '-' + str(bins[i+1]-1) for i in range(len(bins)-1)]
fig, ax = plt.subplots(figsize=(18, 6))
# 绘制柱形图
plt.bar(labels, counts, tick_label=labels)
# 添加数据标签
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()
```
修改后的代码将每个柱子的标签设置为了区间范围,例如"0-1"、"1-2"等,同时在绘制柱形图时使用了参数tick_label来指定x轴刻度的标签,以按照bins的顺序排列。
# 划分区间 bins = [0,1,2,3,4,5,10,15,20,25,30,35,40,45,50,60,70,80,90,100,1220] data=data_forecast_is_stk_bs_rpt_zq_befor_big['本年比上一年归母倍数'] # 统计每个柱子的数据 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=(18, 6)) # 绘制柱形图 plt.bar(counts.index.astype(str), counts[labels]) # 添加数据标签 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() KeyError: "None of [['0-1', '1-2', '2-3', '3-4', '4-5', '5-10', '10-15', '15-20', '20-25', '25-30', '30-35', '35-40', '40-45', '45-50', '50-60', '60-70', '70-80', '80-90', '90-100', '100-1220']] are in the [index]"
这个 KeyError 的原因是因为 hist.value_counts() 方法返回的是一个以区间标签作为索引的 Series,而在 plt.bar(counts.index.astype(str), counts[labels]) 中使用了 counts[labels],这里的 labels 是一个列表,不是一个合法的索引。可以将 labels 改为 counts.index.astype(str),即可解决该问题。修改后的代码如下:
```
# 划分区间
bins = [0,1,2,3,4,5,10,15,20,25,30,35,40,45,50,60,70,80,90,100,1220]
data = data_forecast_is_stk_bs_rpt_zq_befor_big['本年比上一年归母倍数']
# 统计每个柱子的数据
hist, edges = pd.cut(data, bins=bins, right=False, include_lowest=True, retbins=True)
counts = hist.value_counts()
# 按照 bins 的顺序给每个柱子指定标签
labels = counts.index.astype(str)
fig, ax = plt.subplots(figsize=(18, 6))
# 绘制柱形图
plt.bar(labels, counts)
# 添加数据标签
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()
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![exe](https://img-home.csdnimg.cn/images/20210720083343.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)