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

3
我正在循环遍历一系列包含各种度量的CSV文件。
每个文件可能来自4个不同的数据源之一。
在每个文件中,我将数据合并为月度数据集,然后将其绘制在3x4网格中。保存此图后,循环会继续并对下一个文件执行相同操作。
这部分我已解决,但我想在图表中添加视觉提示,以了解所表示的数据。据我理解(并尝试过),
plt.subplot(4,3,1)
plt.hist(Jan_Data,facecolor='Red')
plt.ylabel('value count')
plt.title('January')

这种方法确实可以工作,但是我需要手动为12个子图中的每一个添加facecolor='Red'。循环绘制图形在这种情况下行不通,因为我只希望左侧图形有ylabel而底部行有xlabel

在开头设置facecolor

fig = plt.figure(figsize=(20,15),facecolor='Red')

该方法不起作用,因为它仅更改了现在的20x15图形的背景颜色,但当我将其保存为PNG时,它随后被忽略,因为它仅针对屏幕输出设置。

那么,plt.hist(...plt.savefig(...是否有一个简单的setthecolorofallbars='Red'命令?还是我应该将其复制粘贴到所有十二个月份中?


1
你尝试使用过 mpl.rc("axes", facecolor="red") 吗?我不确定你的图应该最终是什么样子,所以这只是一个猜测... - cel
在这种情况下,facecolor 再次成为背景颜色,但我想如果我找到正确的开关,那确实可能是可行的解决方案!我会在文档中阅读相关内容。 - JC_CL
2
抱歉,您想要给什么上色,是直方图条形吗?如果是的话,mpl.rc("axes", color_cycle="red") 应该可以解决。 - cel
谢谢!那正是匹配的命令。你能把它发表为一个答案吗?这样这个问题就不会保持未回答状态了。 - JC_CL
2个回答

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


2

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

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()

所有不固定的特征(如标题)都可以放入数组中,并放置在适当的轴上。

这应该是可以工作的,但是为 12 个图设置三个循环并不特别合理。因此,我的问题是是否存在“全局”设置所有颜色的方法。 - JC_CL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接