Matplotlib 中的叠加条形图
我们在 Matplotlib 中使用 matplotlib.pyplot.bar()
方法生成条形图。为了将某个数据集的条形图堆叠在另一个数据集上,我们将所有需要堆叠的数据集相加,并将总和作为 bottom
参数传递给 bar()
方法。
import matplotlib.pyplot as plt
data1 = [30, 20, 10, 0, 0]
data2 = [20, 20, 20, 20, 0]
data3 = [50, 60, 70, 80, 100]
year = ["2015", "2016", "2017", "2018", "2019"]
fig, ax = plt.subplots(3, 1, figsize=(10, 8))
ax[0].bar(year, data1, color="red")
ax[0].legend(["C++"])
ax[1].bar(year, data2, color="yellow")
ax[1].legend(["JavaScript"])
ax[2].bar(year, data3, color="green")
ax[2].legend(["Python"])
plt.show()
输出:
在这里,我们有三个独立的条形图,分别代表了某公司员工五年来对一种编程语言的偏好。我们将讨论如何将一门语言的条形图叠加到另一门语言上,并通过一张条形图来研究多年来人们对编程语言的整体选择。
叠加条形图 Matplotlib
import numpy as np
import matplotlib.pyplot as plt
data1 = [30, 20, 10, 0, 0]
data2 = [20, 20, 20, 20, 0]
data3 = [50, 60, 70, 80, 100]
year = ["2015", "2016", "2017", "2018", "2019"]
plt.figure(figsize=(9, 7))
plt.bar(year, data3, color="green", label="Python")
plt.bar(year, data2, color="yellow", bottom=np.array(data3), label="JavaScript")
plt.bar(year, data1, color="red", bottom=np.array(data3) + np.array(data2), label="C++")
plt.legend(loc="lower left", bbox_to_anchor=(0.8, 1.0))
plt.show()
输出:
它将一个条形图叠加在另一个条形图上。在图中,我们先将 data3
绘制成 Python 数据,作为其他条形图的基础,然后再绘制 data2
的条形图,将 data3
的条形图作为 data2
条形图的基础。为了将 data2
的条形图叠加到 data3
上,我们设置 bottom=np.array(data3)
。
同样,在绘制 data1
的条形图时,我们以 data2
和 data3
的条形图为基础。为此,我们在绘制 data1
的条形图时,设置 bottom=np.array(data3)+np.array(data2)
。
需要注意的是,我们必须使用 NumPy
数组来添加 bottom
参数的数据。如果我们设置 bottom=data3+data2
,它将通过在列表 data3
的末尾追加 data2
的元素来创建列表。
如果我们不想使用 NumPy
数组,我们可以使用列表推导法来添加 list 的对应元素。
import numpy as np
import matplotlib.pyplot as plt
data1 = [30, 20, 10, 0, 0]
data2 = [20, 20, 20, 20, 0]
data3 = [50, 60, 70, 80, 100]
year = ["2015", "2016", "2017", "2018", "2019"]
plt.figure(figsize=(9, 7))
plt.bar(year, data3, color="green", label="Python")
plt.bar(year, data2, color="yellow", bottom=data3, label="JavaScript")
plt.bar(
year,
data1,
color="red",
bottom=[sum(data) for data in zip(data2, data3)],
label="C++",
)
plt.legend(loc="lower left", bbox_to_anchor=(0.8, 1.0))
plt.show()
输出:
使用 Pandasd 的 Matplotlib 叠加条形图的方法
我们也可以使用 Python 中的 Pandas
库,在 Python 中生成堆叠的柱状图。
import pandas as pd
import matplotlib.pyplot as plt
years = ["2015", "2016", "2017", "2018", "2019"]
data = {
"Python": [50, 60, 70, 80, 100],
"JavaScript": [20, 20, 20, 20, 0],
"C++": [30, 20, 10, 0, 0],
}
df = pd.DataFrame(data, index=years)
df.plot(kind="bar", stacked=True, figsize=(10, 8))
plt.legend(loc="lower left", bbox_to_anchor=(0.8, 1.0))
plt.show()
输出:
它从 Pandas DataFrame 中生成一个堆叠的条形图,其中一列的条形图堆叠在 DataFrame 中每个索引的另一列上。
相关文章
如何在 Matplotlib Pyplot 中显示网格
发布时间:2024/02/04 浏览次数:127 分类:Python
-
本文演示了如何在 Python Matplotlib 中在一个图上画一个网格。使用 grid()函数来绘制网格,并解释了如何改变网格颜色和线条类型。
在 Matplotlib 中的图中添加文字
发布时间:2024/02/04 浏览次数:148 分类:Python
-
本教程展示了我们如何使用 plt.text()方法在 Matplotlib 中为图或轴添加文字。
如何在 Matplotlib 中的多个线条之间进行填充
发布时间:2024/02/04 浏览次数:187 分类:Python
-
`fill_between()` 每次只能填充两条线之间的区域,但是我们可以选择一对行来填充多个线条之间的区域。
如何在 Matplotlib 中画一条任意线
发布时间:2024/02/04 浏览次数:154 分类:Python
-
本教程讲解了我们如何在 Matplotlib 中使用 matplotlib.pyplot.plot()、matplotlib.pyplot.vlines()、matplotlib.pyplot.hlines()方法和 matplotlib.collection.LineCollection 绘制任意线条。
Pandas 在 Matplotlib 柱状图上绘制多列图
发布时间:2024/02/04 浏览次数:173 分类:Python
-
在本教程中,我们将探讨如何使用 `DataFrame` 对象的 `plot()` 方法在柱状图上绘制多列。
如何在 Matplotlib 中绘制数据列表的直方图
发布时间:2024/02/04 浏览次数:166 分类:Python
-
本教程介绍了如何使用 plt.hist()方法从数据列表中绘制直方图。我们可以使用 plt.hist()方法从数据列表中绘制直方图。
Python 中的 Matplotlib.pyplot.specgram()来绘制频谱图
发布时间:2024/02/04 浏览次数:163 分类:Python
-
本教程解释了我们如何使用 matplotlib.pyplot.specgram()和 scipy.signal.spectrogram()方法在 Python 中绘制频谱图。
在 Python 中将 NumPy 数组转换为列表
发布时间:2023/12/24 浏览次数:108 分类:Python
-
本教程演示了如何将 numpy 数组转换为 Python 中的列表。列表和数组是 Python 中两个最基本且最常用的集合对象。
Python 中追加二维数组
发布时间:2023/12/24 浏览次数:172 分类:Python
-
本教程讨论如何在 Python 中将值附加到二维数组。在 Python 中,我们可以有 ND 数组。我们可以使用 NumPy 模块在 Python 中处理数组。