Numpy和Matplotlib:为条形图分配不同的填充纹样

Numpy和Matplotlib:为条形图分配不同的填充纹样

在数据可视化中,条形图是展示和比较数据的重要方式之一。在Matplotlib中,我们可以使用bar()函数来绘制条形图。而在Matplotlib的bar()中,我们可以通过设置hatch属性来控制不同的填充纹样。本文将介绍如何在bar()中使用Numpy和Matplotlib来为条形图分配不同的填充纹样。

阅读更多:Numpy 教程

使用Numpy生成数据

在此之前,我们需要生成数据。Numpy是一个重要的Python库,提供了许多用于数据操作的函数和方法。例如,我们可以使用numpy.random模块来生成随机数,或使用numpy.arange()函数生成一个数组。下面是一个使用Numpy生成数据的例子:

import numpy as np

np.random.seed(123)  # 让结果可重复

# 生成随机数据
data_1 = np.random.randint(low=0, high=5, size=4)
data_2 = np.random.randint(low=0, high=5, size=4)

# 生成x轴数据
x = np.arange(len(data_1))

print(data_1)
print(data_2)
print(x)
Python

上述代码使用了numpy.random.seed()来设置随机数生成的种子,以保证结果可重复。接着,我们生成了两个长度为4的随机数组,用numpy.arange()生成了与数据数组长度相同的x轴数据,最后打印了这些数据。运行上面的代码,得到如下输出:

[2 2 1 0]
[4 2 1 2]
[0 1 2 3]
Python

使用Matplotlib绘制条形图

我们现在有了数据和x轴数据,可以使用Matplotlib中的bar()函数绘制条形图。

import matplotlib.pyplot as plt

# 绘制条形图
fig, ax = plt.subplots()
rects1 = ax.bar(x, data_1, color='red', hatch='x')
rects2 = ax.bar(x, data_2, color='blue', hatch='//', bottom=data_1)

# 添加轴标签和标题
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_title('Title')

# 图例
ax.legend((rects1[0], rects2[0]), ('Data 1', 'Data 2'))

plt.show()
Python

上述代码中,我们使用matplotlib.pyplot模块中的subplots()函数创建了一个包含一个轴的图形对象。接着,我们使用bar()函数绘制了条形图。bar()函数返回了一个列表,其中的每个元素代表一个rect对象。因为我们在同一轴中绘制了两组数据,使用了bottom参数将第二组数据放在第一组数据的顶部。

最后,我们使用了set_xlabel()set_ylabel()set_title()函数为图形添加标签和标题。使用legend()函数为图形添加图例。

将填充纹样应用于所有矩形

上述代码将两个数据组的矩形分别设置为不同的填充纹样。但是,如果我们有多个数据组,我们不想手动为每个矩形设置填充纹样,那怎么办?

为了将相同的填充纹样应用于所有矩形,我们可以使用循环语句。下面的代码演示了如何在循环语句中使用bar()函数为多组数据设置相同的填充纹样。

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(123)

# 生成随机数据
data_1 = np.random.randint(low=0, high=5, size=4)
data_2 = np.random.randint(low=0, high=5, size=4)
data_3 = np.random.randint(low=0, high=5, size=4)

x = np.arange(len(data_1))

# 颜色和填充纹样
colors = ['red', 'green', 'blue']
hatches = ['//', '\\\\', 'x']

# 绘制条形图
fig, ax = plt.subplots()
rects = []
for i, data in enumerate([data_1, data_2, data_3]):
    rect = ax.bar(x, data, color=colors[i], hatch=hatches[i], bottom=np.sum(data[:i], axis=0))
    rects.append(rect)

# 添加标签和标题
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_title('Title')

# 图例
ax.legend((rects[0][0], rects[1][0], rects[2][0]), ('Data 1', 'Data 2', 'Data 3'))

plt.show()
Python

在上述代码中,我们使用了一个for循环语句,以逐个遍历每个数据绘制矩形。我们将颜色和填充纹样存储在colorshatches列表中,并使用enumerate()函数遍历数据和其对应的颜色和填充纹样。我们在循环中使用bottom参数,将每个数据的矩形放在前一个数据的矩形上方。

最后,我们使用legend()函数为图形添加图例。

总结

在本文中,我们介绍了如何使用Numpy和Matplotlib来为条形图分配不同的填充纹样。我们先使用Numpy生成了随机数据和x轴数据,然后使用Matplotlib的bar()函数绘制了条形图。接着,我们演示了如何将相同的填充纹样应用于所有矩形,以及如何使用循环语句为多组数据设置不同的填充纹样。希望这篇文章对您了解如何使用Matplotlib创建条形图有所帮助。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册