交替元组的 Numpy 数组

Numpy array of alternating tuples

我正在寻找一种 pythonic/simple 方法来创建 list/sequence 重复元组(特别是 RGBA 值),以便我可以将其应用于 matplotlib 条形图中条形的颜色。

ax.bar(...
       , color=colorlist
   )

例如

print(colorlist)
array([(0.04, 0.015, 0.02, 1.0),
       (0.8, 0.5, 0.2, 1.0),
       (0.04, 0.015, 0.02, 1.0), ...,
       (0.8, 0.5, 0.2, 1.0),
       (0.04, 0.015, 0.02, 1.0),
       (0.8, 0.5, 0.2, 1.0)], dtype=object)

我知道colorlist(例如N)的长度。我似乎找不到创建 colorlist.

的方法

我正在寻找一种方法来排列两种颜色(比如 color1color2),其中一种颜色紧接着第二种颜色(例如 0,1,0,1,0,1 ,..), 或连续的一些颜色,然后是第二种颜色的另一个数字,并重复直到结束 (0,0,0,1,1,1,0,0,0,1, 1,1,..).

编辑:一个有效的例子;

import numpy as np
import matplotlib.pyplot as plt

colorlist = np.array(
   ([(0.04, 0.015, 0.02, 1.0)] * 1 + [(0.8, 0.5, 0.2, 1.0)] * 1) * 16, dtype=object
)

fig, ax = plt.subplots()
y = np.ones(32)
x = np.linspace(1,32,32)
ax.bar(x, y, facecolor = colorlist)

有错误

ValueError: Invalid RGBA argument: array([[0.04, 0.015, 0.02, 1.0],
       [0.8, 0.5, 0.2, 1.0],
       [0.04, 0.015, 0.02, 1.0],```

类似于:

colorlist = [(0.04, 0.015, 0.02, 1.0), (0.8, 0.5, 0.2, 1.0)] * 10

将列表重复 10 次作为列表,然后您可以根据需要将其转换为数组?

同样,如果您想将每种颜色重复已知次数:

colorlist = ([(0.04, 0.015, 0.02, 1.0)] * 2 + [(0.8, 0.5, 0.2, 1.0)] * 3) * 4

第一种颜色重复 4 次,第二种颜色重复 3 次。

要将其转换为对象数组,对于 ax.bar,您可以执行以下操作:

import numpy as np


colorlist = np.array(
    ([(0.04, 0.015, 0.02, 1.0)] * 2 + [(0.8, 0.5, 0.2, 1.0)] * 3) * 4, dtype=object
)

给出具体的示例代码,使用 color 而不是 facecolor 可以处理原始列表,即使没有转换或数组数据类型:

import matplotlib.pyplot as plt

colorlist = ([(0.04, 0.015, 0.02, 1.0)] * 1 + [(0.8, 0.5, 0.2, 1.0)] * 1) * 16

fig, ax = plt.subplots()
y = [1] * 32
x = range(32)
ax.bar(x, y, color=colorlist)
plt.show()

但是,如果愿意,它也适用于 np.arrayobjecttuple dtype,以及给定的 numpy 数据类型。我只是想展示仅使用基本 Python 和 matplotlib 即可实现的结果。