Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何一次更改多个子批次的颜色?_Python_Matplotlib - Fatal编程技术网

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

Python 如何一次更改多个子批次的颜色?,python,matplotlib,Python,Matplotlib,我正在循环浏览一组包含各种测量值的CSV文件 每个文件可能来自4个不同的数据源之一 在每个文件中,我将数据合并到每月数据集中,然后在3x4网格中绘制。保存此绘图后,循环将继续,并对下一个文件执行相同的操作 这一部分我已经弄明白了,但是我想给情节添加一个视觉线索,关于它是什么数据。据我所知(并尝试过) 确实有效,但是这样,我必须手动将facecolor='Red'添加到每12个子批次中。在绘图中循环不会在这种情况下起作用,因为我希望ylabel仅用于最左边的绘图,而xlabels用于最下面的一行

我正在循环浏览一组包含各种测量值的CSV文件

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

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

这一部分我已经弄明白了,但是我想给情节添加一个视觉线索,关于它是什么数据。据我所知(并尝试过)

确实有效,但是这样,我必须手动将
facecolor='Red'
添加到每12个子批次中。在绘图中循环不会在这种情况下起作用,因为我希望
ylabel
仅用于最左边的绘图,而
xlabel
s用于最下面的一行

在中的开头设置
facecolor

fig = plt.figure(figsize=(20,15),facecolor='Red')
不起作用,因为它现在只更改20乘15的图形的背景色,当我将其保存到PNG时,它会被忽略,因为它只设置为屏幕输出


因此,对于
plt.hist(…
plt.savefig(…
我丢失了,还是应该复制粘贴到所有12个月?

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

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()
所有非恒定的功能(如标题)都可以放入数组并放置在相应的轴上。

您可以使用
mpl.rc(“轴”,color\u cycle=“red”)
为所有轴设置默认颜色周期

在这个小玩具示例中,我使用
和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)

您是否尝试过使用
mpl.rc(“axes”,facecolor=“red”)
?我不确定你的绘图最终会是什么样子,所以这只是一个猜测…在这个例子中,
facecolor
再次成为背景色,但我想如果我找到了正确的开关,这确实是一个可行的解决方案!我将在文档中阅读。对不起,你想在这里涂什么颜色,Historogram条?在这种情况下,
mpl.rc(“axes”,color\u cycle=“red”)
应该可以工作。谢谢!这正是匹配的命令。请将其作为答案发布,这样这个问题就不会一直没有答案了吗?这应该可以工作,但为12个绘图设置三个循环对我来说没有意义。因此,我的问题是“全局”设置所有颜色的方法。
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)