- matplotlib Plotting Cookbook
- Alexandre Devert
- 381字
- 2021-07-16 12:16:26
Plotting stacked bar charts
Stacked bar charts are of course possible by using a special parameter from the pyplot.bar()
function.
How to do it...
The following script stacks two bar charts on each other:
import matplotlib.pyplot as plt A = [5., 30., 45., 22.] B = [5., 25., 50., 20.] X = range(4) plt.bar(X, A, color = 'b') plt.bar(X, B, color = 'r', bottom = A) plt.show()
The preceding script will produce the following graph:

How it works...
The optional bottom
parameter of the pyplot.bar()
function allows you to specify a starting value for a bar. Instead of running from zero to a value, it will go from the bottom to value. The first call to pyplot.bar()
plots the blue bars. The second call to pyplot.bar()
plots the red bars, with the bottom of the red bars being at the top of the blue bars.
There's more...
When stacking more than two set of values, the code gets less pretty as follows:
import numpy as np import matplotlib.pyplot as plt A = np.array([5., 30., 45., 22.]) B = np.array([5., 25., 50., 20.]) C = np.array([1., 2., 1., 1.]) X = np.arange(4) plt.bar(X, A, color = 'b') plt.bar(X, B, color = 'g', bottom = A) plt.bar(X, C, color = 'r', bottom = A + B) plt.show()
For the third bar chart, we have to compute the bottom values as A + B
, the coefficient-wise sum of A and B. Using NumPy helps to keep the code compact but readable. This code is, however, fairly repetitive and works for only three stacked bar charts. We can do better using the following code:
import numpy as np import matplotlib.pyplot as plt data = np.array([[5., 30., 45., 22.], [5., 25., 50., 20.], [1., 2., 1., 1.]] color_list = ['b', 'g', 'r'] X = np.arange(data.shape[1]) for i in range(data.shape[0]): plt.bar(X, data[i], bottom = np.sum(data[:i], axis = 0), color = color_list[i % len(color_list)]) plt.show()
Here, we store the data in a NumPy array, one row for one bar chart. We iterate over each row of data. For the ith row, the bottom
parameter receives the sum of all the rows before the ith row. Writing the script this way, we can stack as many bar charts as we wish with minimal effort when changing the input data.

- Hands-On Machine Learning with scikit:learn and Scientific Python Toolkits
- Python爬蟲開發:從入門到實戰(微課版)
- WSO2 Developer’s Guide
- 零基礎學MQL:基于EA的自動化交易編程
- The Data Visualization Workshop
- 手把手教你學C語言
- Swift Playgrounds少兒趣編程
- 軟件測試教程
- Learning Material Design
- 計算機應用基礎教程(Windows 7+Office 2010)
- R語言數據可視化:科技圖表繪制
- Qlik Sense? Cookbook
- Python計算機視覺和自然語言處理
- Unity 5.X從入門到精通
- JavaScript Concurrency