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