我正在寻找一种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
。
我在寻找一种排列两种颜色(比如color1
和color2
)的方法,要么一种颜色紧跟着第二种颜色(例如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.array
和object
或tuple
dtype
,以及给定的numpy
数据类型。我只是想展示仅使用基本的Python和matplotlib
就可以实现的结果。