我正在绘制水平线,但是我都在同一条图中。我想要每个子图一行。我尝试使用ax
,但确实得到了子图,但所有线都绘制在最后一个子图中。
我可以更改什么?
此外,我想为随机数组的每个整数分配颜色。因此,当我绘制线条时,我还会看到不同的颜色,而不仅仅是长度。
我已经做到了:
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(3, 3)
randnums= np.random.randint(0,10,9)
y= np.random.randint(1,10,9)
print(randnums)
plt.hlines(y=y, xmin=1, xmax=randnums)
谢谢!
答案 0 :(得分:2)
您需要遍历轴实例,并从每个hlines
中调用Axes
。要分配颜色,您可以从颜色图中创建颜色列表,并同时对其进行迭代。例如:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
fig, axes = plt.subplots(3, 3, sharex=True, sharey=True)
colours = [cm.viridis(i) for i in np.linspace(0, 1, 9)]
randnums = np.random.randint(0, 10, 9)
y = np.random.randint(1, 10, 9)
print(randnums)
for yy, num, col, ax in zip(y, randnums, colours, axes.flat):
ax.hlines(y=yy, xmin=1, xmax=num, color=col)
axes[0, 0].set_xlim(0, 10)
axes[0, 0].set_ylim(0, 10)
plt.show()
答案 1 :(得分:1)
我不确定您要寻找的是什么,但是如果每个子图需要一条随机线,则可以执行以下操作:
import numpy as np
import matplotlib.pyplot as plt
fig, axes = plt.subplots(3, 3, figsize=(10, 10), sharex=True, sharey=True)
line_lengths = np.random.randint(0, 10 ,9)
ys = np.random.randint(1, 10 ,9)
colors = plt.cm.rainbow(np.linspace(0, 1, len(ys)))
for y, line_length, color, ax in zip(ys, line_lengths, colors, axes.flat):
ax.hlines(y=y, xmin=1, xmax=line_length, colors=color)
编辑:与嵌套循环相比,将tmdavison的解决方案与zip
结合使用绝对是一种更干净的解决方案,因此我决定编辑答案。