交替元组的Numpy数组



我正在寻找一种python/简单的方法来创建重复元组的列表/序列(特别是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,1,1,1,1,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.arrayobjecttupledtype,以及给定的numpy数据类型。我只是想展示仅使用基本的Python和matplotlib就可以实现的结果。

相关内容

  • 没有找到相关文章

最新更新