如何一次更改多个子图的颜色?

时间:2015-02-23 09:59:43

标签: python matplotlib

我正在遍历包含各种测量值的一堆CSV文件。

每个文件可能来自4个不同的数据源之一。

在每个文件中,我将数据合并到每月数据集中,然后我在3x4网格中绘图。保存此图后,循环继续运行并对下一个文件执行相同操作。

这部分我想通了,但是我想为这些图添加一个视觉线索,关于它是什么数据。据我所知(并尝试过)

plt.subplot(4,3,1)
plt.hist(Jan_Data,facecolor='Red')
plt.ylabel('value count')
plt.title('January')

确实有效,但是这样,我必须手动将facecolor='Red'添加到每12个子图中。循环遍历这个情况不会适用于这种情况,因为我希望ylabel仅用于最左边的图,而xlabel用于底行。

开头设置facecolor
fig = plt.figure(figsize=(20,15),facecolor='Red')

不起作用,因为它现在只改变20乘15的背景颜色,当我将其保存到PNG时会被忽略,因为它只会被设置为屏幕输出。

那么,setthecolorofallbars='Red'plt.hist(…只有一个简单的plt.savefig(…命令,我会丢失,或者我应该将其粘贴到所有十二个月?

2 个答案:

答案 0 :(得分:3)

您可以使用mpl.rc("axes", color_cycle="red")设置所有轴的默认颜色周期。

在这个小玩具示例中,我使用with mpl.rc_context块来限制mpl.rc对块的影响。这样您就不会破坏整个会话的默认参数。

import matplotlib as mpl
import matplotlib.pylab as plt
import numpy as np
np.random.seed(42)

# create some toy data
n, m = 2, 2
data = []
for i in range(n*m):
    data.append(np.random.rand(30))

# and do the plotting
with mpl.rc_context():
    mpl.rc("axes", color_cycle="red")
    fig, axes = plt.subplots(n, m, figsize=(8,8))
    for ax, d in zip(axes.flat, data):
        ax.hist(d)

plot

答案 1 :(得分:2)

使用plt.subplots可以解决x和y标签的问题(使用循环时),因为您可以单独访问每个轴。

import matplotlib.pyplot as plt
import numpy.random

# creating figure with 4 plots
fig,ax = plt.subplots(2,2)

# some data
data = numpy.random.randn(4,1000)

# some titles
title = ['Jan','Feb','Mar','April']

xlabel = ['xlabel1','xlabel2']
ylabel = ['ylabel1','ylabel2']

for i in range(ax.size):
    a = ax[i/2,i%2]
    a.hist(data[i],facecolor='r',bins=50)
    a.set_title(title[i])

# write the ylabels on all axis on the left hand side
for j in range(ax.shape[0]):
    ax[j,0].set_ylabel(ylabel[j])

# write the xlabels an all axis on the bottom
for j in range(ax.shape[1]):
    ax[-1,j].set_xlabel(xlabels[j])


fig.tight_layout()

所有非常量的特征(如标题)都可以放入数组并放在适当的轴上。