如何使条形图自动循环显示不同的颜色?

如何使条形图自动循环显示不同的颜色?

如果你正在使用matplotlib绘制条形图,并且希望每个条形的颜色能够自动循环显示不同的颜色,那么你可以使用颜色循环(color cycle)功能实现这一目标。

阅读更多:Python 教程

颜色循环

matplotlib的颜色循环由一个预定义的颜色列表组成,其中包含了许多常用的颜色,例如红色、绿色、蓝色、紫色等等。这个预定义的颜色列表在matplotlib中被称为“默认颜色循环”,你可以通过函数matplotlib.rcParams['axes.prop_cycle'].by_key()['color']来查看默认颜色循环的具体内容。

在绘制条形图时,如果你不指定每个条形的颜色,matplotlib会自动从默认颜色循环中按顺序取出颜色来填充每个条形。

下面是一个绘制简单条形图的示例代码:

import matplotlib.pyplot as plt

x_values = [1, 2, 3, 4, 5]
y_values = [10, 8, 6, 4, 2]

plt.bar(x_values, y_values)
plt.show()

这段代码会生成一个包含5个条形的简单条形图,每个条形的颜色都是从默认颜色循环中按顺序取出来的。

修改颜色循环

如果你希望修改默认颜色循环,可以通过函数matplotlib.rcParams['axes.prop_cycle']来设置新的颜色循环。要设置新颜色循环,你需要提供一个颜色列表,其中每个元素都是一个合法的颜色字符串,在matplotlib中有许多不同的颜色字符串标识方式,例如RGB元组、十六进制值、CSS颜色名等等,你可以通过官方文档查看完整的颜色字符串列表。

下面是一个修改默认颜色循环为红、绿、蓝三种颜色的示例代码:

import matplotlib as mpl
import matplotlib.pyplot as plt

new_colors = ['red', 'green', 'blue']
mpl.rcParams['axes.prop_cycle'] = mpl.cycler(color=new_colors)

x_values = [1, 2, 3, 4, 5]
y_values = [10, 8, 6, 4, 2]

plt.bar(x_values, y_values)
plt.show()

这段代码会生成一个包含5个条形的简单条形图,每个条形的颜色都是从新的颜色循环中按顺序取出来的。

自动循环颜色

接下来,我们来看一种自动循环显示条形图颜色的实现方法。

在matplotlib中,每个坐标轴(axis)对象都拥有自己的颜色循环设置,我们可以通过调用axis对象的set_prop_cycle()方法来设置它的颜色循环属性,进而实现每次绘制条形图时自动循环显示不同的颜色。

下面是一个自动循环显示不同颜色的条形图示例代码:

import matplotlib as mpl
import matplotlib.pyplot as plt

x_values = [1, 2, 3, 4, 5]
y_values = [10, 8, 6, 4, 2]

fig, ax = plt.subplots()

# 定义颜色循环
new_colors = mpl.cm.Set1(range(0, len(x_values)))
ax.set_prop_cycle(color=new_colors)

# 绘制条形图
ax.bar(x_values, y_values)

plt.show()

这段代码会生成一个包含5个条形的简单条形图,每个条形的颜色都是从新定义的颜色循环中按顺序取出来的,当条形数量超出颜色循环中的颜色数量时,颜色会自动循环重复。

在这段代码中,我们先通过plt.subplots()创建一个包含图形和坐标轴的Figure对象和Axes对象。接着,我们定义了一个包含5个元素的列表x_values和一个包含5个元素的列表y_values作为条形图的横纵坐标数据。然后,我们调用ax.set_prop_cycle()方法设置新的颜色循环,这里的mpl.cm.Set1()函数是一个生成一组连续的颜色的函数,它接受一个整数序列作为参数,返回一个由颜色字符串组成的列表,这里我们将其传入range函数,生成一个长度为len(x_values)的整数序列。最后,我们调用ax.bar()方法绘制条形图。

结论

使用matplotlib自带的颜色循环,我们可以轻松地实现条形图颜色的自动循环显示,而且还可以根据具体需求修改预定义的颜色循环。通过调用axis对象的set_prop_cycle()方法,我们还可以进一步实现自动循环显示颜色的效果。秉承着代码即解决问题的信念,相信读者会在实践的过程中获得更多对matplotlib的理解和掌握。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程