python dataframe某列数据要做成柱形图 自定义柱形图每个柱子的统计范围,每个柱子范围不一样,添加数据标签
时间: 2023-12-14 10:35:56 浏览: 107
可以使用matplotlib库来绘制自定义柱形图,并且在每个柱子上添加数据标签。具体的实现步骤如下:
1. 导入相关库:
```python
import pandas as pd
import matplotlib.pyplot as plt
```
2. 创建数据框:
假设需要绘制的柱形图的数据如下:
| 名称 | 数量 |
| --- | --- |
| A | 50 |
| B | 100 |
| C | 150 |
| D | 200 |
| E | 250 |
可以使用如下代码创建数据框:
```python
data = {'名称': ['A', 'B', 'C', 'D', 'E'], '数量': [50, 100, 150, 200, 250]}
df = pd.DataFrame(data)
```
3. 设置柱子范围:
在本例中,我们需要自定义柱子的统计范围,可以直接在数据框中增加一列来表示每个柱子的范围,如下所示:
```python
df['范围'] = [(0, 75), (75, 125), (125, 175), (175, 225), (225, 300)]
```
4. 绘制柱形图:
使用matplotlib库的bar函数来绘制柱形图,并且设置x轴的刻度为每个柱子的名称,y轴的刻度为每个柱子的数量。同时,设置柱子的颜色为蓝色。
```python
fig, ax = plt.subplots()
ax.bar(df['名称'], df['数量'], color='blue')
```
5. 设置柱子范围:
在绘制柱形图的基础上,我们需要根据柱子的范围来设置每个柱子的宽度。可以使用matplotlib库的Rectangle函数来创建每个柱子,并且设置每个柱子的左边界、宽度和高度。
```python
for i in range(len(df)):
left = df['范围'][i][0]
width = df['范围'][i][1] - df['范围'][i][0]
height = df['数量'][i]
ax.add_patch(plt.Rectangle((left, 0), width, height, color='blue'))
```
6. 添加数据标签:
在绘制完所有的柱子之后,我们需要在每个柱子上添加数据标签。可以使用matplotlib库的text函数来实现。其中,x坐标为每个柱子的中心位置,y坐标为每个柱子的数量加上一个偏移量。
```python
for i in range(len(df)):
x = (df['范围'][i][0] + df['范围'][i][1]) / 2
y = df['数量'][i] + 5
ax.text(x, y, str(df['数量'][i]), ha='center')
```
7. 显示图形:
最后,调用show函数显示图形。
```python
plt.show()
```
完整代码如下:
```python
import pandas as pd
import matplotlib.pyplot as plt
data = {'名称': ['A', 'B', 'C', 'D', 'E'], '数量': [50, 100, 150, 200, 250]}
df = pd.DataFrame(data)
df['范围'] = [(0, 75), (75, 125), (125, 175), (175, 225), (225, 300)]
fig, ax = plt.subplots()
ax.bar(df['名称'], df['数量'], color='blue')
for i in range(len(df)):
left = df['范围'][i][0]
width = df['范围'][i][1] - df['范围'][i][0]
height = df['数量'][i]
ax.add_patch(plt.Rectangle((left, 0), width, height, color='blue'))
for i in range(len(df)):
x = (df['范围'][i][0] + df['范围'][i][1]) / 2
y = df['数量'][i] + 5
ax.text(x, y, str(df['数量'][i]), ha='center')
plt.show()
```
阅读全文