Matplotlib:如何在循环绘制直方图后统一设置颜色?
当然可以!这里是实现方法
完全可以在循环结束后、plt.show()之前统一修改直方图的颜色。Matplotlib 允许我们获取已绘制的图形元素并调整它们的样式,具体步骤如下:
方法说明
当你用plt.hist()绘制直方图时,每个直方图都会被作为一个**容器(container)**添加到当前坐标轴中。我们可以通过获取坐标轴对象,遍历这些容器来修改其中所有条形的颜色。
修改后的示例代码
import numpy as np import matplotlib.pyplot as plt x = np.array([[1,1,3,4],[1,4,5,6],[1,4,4,6]]) plt.figure() # 先循环绘制所有直方图 for i in range(3): plt.hist(x[i]) # 获取当前坐标轴对象 ax = plt.gca() # 方案1:给每个直方图设置不同的颜色 colors = ['#ff7f0e', '#1f77b4', '#2ca02c'] # 自定义颜色列表 for container, color in zip(ax.containers, colors): for patch in container.patches: patch.set_facecolor(color) # 设置条形填充色 # 可选:设置边框颜色 # patch.set_edgecolor('black') # 方案2:给所有直方图设置同一种颜色 # for container in ax.containers: # for patch in container.patches: # patch.set_facecolor('purple') plt.show()
关键细节解释
plt.gca():获取当前的坐标轴(Axes)对象,所有绘制的图形元素都挂载在这个对象上。ax.containers:包含了当前坐标轴上所有的直方图容器,每个容器对应一次plt.hist()调用生成的所有条形。container.patches:每个容器中的patches属性是该直方图所有条形的集合,遍历它们就能逐个修改样式。
这样你就不用在循环内部设置颜色,而是统一在最后批量调整,非常灵活!
内容的提问来源于stack exchange,提问作者Liwellyen
相关产品推荐
相关产品推荐

