无法在堆积条形图中绘制所有数据?
Cannot plot all data in a stacked bar chart?
我尝试使用以下代码绘制一个水平堆叠条形图,以高程为 y 轴,欧洲和北美(数据)沿 x 轴堆叠。不知道出了什么问题。并未显示所有数据,而且条形图的宽度太细,无法查看。
fig, ax = plt.subplots()
ax.barh(EleRegion['Elevation'], EleRegion['Europe'], label = 'Europe')
ax.barh(EleRegion['Elevation'], EleRegion['North America'], label ='North America' )
数据集如下:
0 0
1 100
2 200
3 300
4 400
5 500
6 600
7 700
8 800
9 900
10 1000
11 1100
12 1200
13 1300
14 1400
15 1500
16 1600
17 1700
18 1800
19 1900
20 2000
21 2100
22 2200
23 2300
Name: Elevation, dtype: int64 0 11188
1 9407
2 8801
3 8801
4 8692
5 7563
6 7134
7 6121
8 5077
9 3684
10 3330
11 1084
12 1084
13 918
14 918
15 776
16 776
17 75
18 75d
19 0
20 0
21 0
22 0
23 0
Name: Europe, dtype: int64
0 2657
1 1786
2 1786
3 1786
4 959
5 885
6 564
7 187
8 187
9 0
10 0
11 0
12 0
13 0
14 0
15 0
16 0
17 0
18 0
19 0
20 0
21 0
22 0
23 0
Name: North America, dtype: int64
///重复 post/// 我尝试绘制水平堆积条形图,以高程为 y 轴,欧洲和北美(数据)沿 x 轴堆叠以下代码。不知道出了什么问题。并未显示所有数据,而且条形图的宽度太细,无法查看。
您可以将 Elevation
设置为索引并使用 DataFrame.plot.barh
:
ax = EleRegion.set_index('Elevation').plot.barh(stacked=True)
ax.set_ylabel('Count')
结果:
无法正常工作的原因:
有两个问题:
Axes.barh
接受 y
、width
和 height
。您通过了前两个,但高度仍然是默认值 0.8
。问题是您的 y
轴在数千范围内,因此条形图太小以至于看不到。您可以将其设置为 50,您将看到它们:
ax.barh(EleRegion['Elevation'], EleRegion['Europe'], 50, label = 'Europe')
为了避免玩弄 height
,您要做的是使用整数(例如,range(len(EleRegion))
作为 y
并将 yticks
设置为正确的数字。这样,默认的 height
会起作用。
- 另一个问题是,使用
Axes.barh
创建的第二个条形图需要 left
参数才能真正“堆叠”,否则第二个图表只会在第一个图表之上呈现:
f, ax = plt.subplots()
ax.barh(EleRegion['Elevation'], EleRegion['Europe'], 50, label='Europe')
ax.barh(EleRegion['Elevation'], EleRegion['North America'], 50, left=EleRegion['Europe'], label='North America' )
plt.show()
这就是为什么,因为您的数据已经是 DataFrame
,所以使用 DataFrame.plot.barh
自动处理所有这些更方便。
我尝试使用以下代码绘制一个水平堆叠条形图,以高程为 y 轴,欧洲和北美(数据)沿 x 轴堆叠。不知道出了什么问题。并未显示所有数据,而且条形图的宽度太细,无法查看。
fig, ax = plt.subplots()
ax.barh(EleRegion['Elevation'], EleRegion['Europe'], label = 'Europe')
ax.barh(EleRegion['Elevation'], EleRegion['North America'], label ='North America' )
数据集如下:
0 0
1 100
2 200
3 300
4 400
5 500
6 600
7 700
8 800
9 900
10 1000
11 1100
12 1200
13 1300
14 1400
15 1500
16 1600
17 1700
18 1800
19 1900
20 2000
21 2100
22 2200
23 2300
Name: Elevation, dtype: int64 0 11188
1 9407
2 8801
3 8801
4 8692
5 7563
6 7134
7 6121
8 5077
9 3684
10 3330
11 1084
12 1084
13 918
14 918
15 776
16 776
17 75
18 75d
19 0
20 0
21 0
22 0
23 0
Name: Europe, dtype: int64
0 2657
1 1786
2 1786
3 1786
4 959
5 885
6 564
7 187
8 187
9 0
10 0
11 0
12 0
13 0
14 0
15 0
16 0
17 0
18 0
19 0
20 0
21 0
22 0
23 0
Name: North America, dtype: int64
///重复 post/// 我尝试绘制水平堆积条形图,以高程为 y 轴,欧洲和北美(数据)沿 x 轴堆叠以下代码。不知道出了什么问题。并未显示所有数据,而且条形图的宽度太细,无法查看。
您可以将 Elevation
设置为索引并使用 DataFrame.plot.barh
:
ax = EleRegion.set_index('Elevation').plot.barh(stacked=True)
ax.set_ylabel('Count')
结果:
无法正常工作的原因:
有两个问题:
Axes.barh
接受y
、width
和height
。您通过了前两个,但高度仍然是默认值0.8
。问题是您的y
轴在数千范围内,因此条形图太小以至于看不到。您可以将其设置为 50,您将看到它们:
ax.barh(EleRegion['Elevation'], EleRegion['Europe'], 50, label = 'Europe')
为了避免玩弄 height
,您要做的是使用整数(例如,range(len(EleRegion))
作为 y
并将 yticks
设置为正确的数字。这样,默认的 height
会起作用。
- 另一个问题是,使用
Axes.barh
创建的第二个条形图需要left
参数才能真正“堆叠”,否则第二个图表只会在第一个图表之上呈现:
f, ax = plt.subplots()
ax.barh(EleRegion['Elevation'], EleRegion['Europe'], 50, label='Europe')
ax.barh(EleRegion['Elevation'], EleRegion['North America'], 50, left=EleRegion['Europe'], label='North America' )
plt.show()
这就是为什么,因为您的数据已经是 DataFrame
,所以使用 DataFrame.plot.barh
自动处理所有这些更方便。