如何仅堆叠 pandas barh 图中的选定列
How to stack only selected columns in pandas barh plot
我正在尝试绘制一个条形图,其中我想要两个条形图,一个堆叠在一起,另一个不堆叠在堆叠的条形图的旁边。
我有第一个图,它是一个堆积图:
还有另一个图,具有相同的行和列:
我想将它与最后一个图的列并排绘制,而不是堆叠它:
这是复制我的问题的代码片段:
d = pd.DataFrame({'DC': {'col0': 257334.0,
'col1': 0.0,
'col2': 0.0,
'col3': 186146.0,
'col4': 0.0,
'col5': 366431.0,
'col6': 461.0,
'col7': 0.0,
'col8': 0.0},
'DC - IDC': {'col0': 32665.0,
'col1': 0.0,
'col2': 156598.0,
'col3': 0.0,
'col4': 176170.0,
'col5': 0.0,
'col6': 0.0,
'col7': 0.0,
'col8': 0.0},
'No Address': {'col0': 292442.0,
'col1': 227.0,
'col2': 298513.0,
'col3': 117167.0,
'col4': 249.0,
'col5': 747753.0,
'col6': 271976.0,
'col7': 9640.0,
'col8': 211410.0}})
d[['DC', 'DC - IDC']].plot.barh(stacked=True)
d[['No Address']].plot.barh( stacked=False, color='red')
使用position
参数在同一索引上绘制2列:
fig, ax = plt.subplots()
d[['DC', 'DC - IDC']].plot.barh(width=0.4, position=0, stacked=True, ax=ax)
d[['No Address']].plot.barh(width=0.4, position=1, stacked=True, ax=ax, color='red')
plt.show()
您只能通过使用 matplotlib.pyplot 库来实现。首先,您需要导入 NumPy 和 matplotlib 库。
import matplotlib.pyplot as plt
import numpy as np
然后,
plt.figure(figsize=(15,8))
plt.barh(d.index, d['DC'], 0.4, label='DC', align='edge')
plt.barh(d.index, d['DC - IDC'], 0.4, label='DC - IDC', align='edge')
plt.barh(np.arange(len(d.index))-0.4, d['No Address'], 0.4, color='red', label='No Address', align='edge')
plt.legend();
这是我所做的:
- 增加图形大小(可选)
- 为每一列创建一个 BarContainer
- 将每个条形的宽度减小到 0.4 以使其适合
- 将条形的左边缘与 y 位置对齐[=29=]
- 现在通常所有的条都是堆叠的。要将红色条放在一边,您需要将每个 y 坐标减去条的宽度 (0.4)
np.arange(len(d.index))-0.4
- 最后,加个图例
它应该是这样的:
我正在尝试绘制一个条形图,其中我想要两个条形图,一个堆叠在一起,另一个不堆叠在堆叠的条形图的旁边。
我有第一个图,它是一个堆积图:
还有另一个图,具有相同的行和列:
我想将它与最后一个图的列并排绘制,而不是堆叠它:
这是复制我的问题的代码片段:
d = pd.DataFrame({'DC': {'col0': 257334.0,
'col1': 0.0,
'col2': 0.0,
'col3': 186146.0,
'col4': 0.0,
'col5': 366431.0,
'col6': 461.0,
'col7': 0.0,
'col8': 0.0},
'DC - IDC': {'col0': 32665.0,
'col1': 0.0,
'col2': 156598.0,
'col3': 0.0,
'col4': 176170.0,
'col5': 0.0,
'col6': 0.0,
'col7': 0.0,
'col8': 0.0},
'No Address': {'col0': 292442.0,
'col1': 227.0,
'col2': 298513.0,
'col3': 117167.0,
'col4': 249.0,
'col5': 747753.0,
'col6': 271976.0,
'col7': 9640.0,
'col8': 211410.0}})
d[['DC', 'DC - IDC']].plot.barh(stacked=True)
d[['No Address']].plot.barh( stacked=False, color='red')
使用position
参数在同一索引上绘制2列:
fig, ax = plt.subplots()
d[['DC', 'DC - IDC']].plot.barh(width=0.4, position=0, stacked=True, ax=ax)
d[['No Address']].plot.barh(width=0.4, position=1, stacked=True, ax=ax, color='red')
plt.show()
您只能通过使用 matplotlib.pyplot 库来实现。首先,您需要导入 NumPy 和 matplotlib 库。
import matplotlib.pyplot as plt
import numpy as np
然后,
plt.figure(figsize=(15,8))
plt.barh(d.index, d['DC'], 0.4, label='DC', align='edge')
plt.barh(d.index, d['DC - IDC'], 0.4, label='DC - IDC', align='edge')
plt.barh(np.arange(len(d.index))-0.4, d['No Address'], 0.4, color='red', label='No Address', align='edge')
plt.legend();
这是我所做的:
- 增加图形大小(可选)
- 为每一列创建一个 BarContainer
- 将每个条形的宽度减小到 0.4 以使其适合
- 将条形的左边缘与 y 位置对齐[=29=]
- 现在通常所有的条都是堆叠的。要将红色条放在一边,您需要将每个 y 坐标减去条的宽度 (0.4)
np.arange(len(d.index))-0.4
- 最后,加个图例
它应该是这样的: