【发布时间】:2020-03-16 09:43:50
【问题描述】:
出于特定目的,我想使用matplotlib 绘制 2-3 个不同的图形,并为每个图形添加不同的图形。我的特殊要求很复杂,很难解释,所以我会尝试用一个更简单的例子来解释。
例如,假设我有一个信号列表,称为
[signal_1,signal_2,signal_3, .... , signal _40]
其中每个“signal_XXX”代表一个 numpy 数组,一些长度为 5000,另一些长度为 10,000。
我想将所有这些信号绘制在 2 个不同的图表中,具体取决于它们的长度。
import matplotlib.pyplot as plt
my_signals = [ signal_1,signal_2,....,signal_40]
fig_5000 = plt.figure(1)
fig_10000 = plt.figure(2)
for signal_i in my_signals :
if len(signal_i) == 5000 :
fig_5000.plot(signal_i)
if len(signal_i) == 10000 :
fig_10000.plot(signal_i)
# now I want to individually show these 2 figures
fig_5000.show()
" do something else here "
fig_10000.show()
显然我写的代码不会工作,如果我使用最后一部分
plt.show() 两个图表会同时显示,这是我不想要的。
有什么方法可以使用 matplotlib 做我想做的事情吗?还是我应该尝试其他方法?
编辑
在 Diziet Asahi 的建议下,我包含了一个“工作”代码,
import numpy
import matplotlib.pyplot as plt
my_signals = []
for i in range (0,25):
if i//2 == 0 :
my_signals.append( numpy.random.rand(100))
if i//2 == 1 :
my_signals.append( numpy.random.rand(200))
"""numpy.random.rand craetes an array with random numbers of the given shape.
now we have a list of 50 arrays with 100 and 200 lengths """
fig_100 = plt.figure(1)
ax100 = fig_100.add_subplot(111)
plt.title(" length = 100")
fig_200 = plt.figure(2)
plt.title(" length = 200")
ax200 = fig_200.add_subplot(111)
for arrayzz in my_signals :
if len(arrayzz) == 100 :
ax100.plot(arrayzz)
if len(arrayzz) == 200:
ax200.plot(arrayzz)
plt.show()
这解决了前面问题的第一部分。不过,我无法单独展示它们。
【问题讨论】:
-
您介意更正您的问题及其标题中的语法、拼写、大写吗?
-
"Obviously the code which I wrote will not work'- 您应该解释为什么它不起作用,这样我们就不必运行它并为我们自己找出答案。 -
你能做一个最小可重现的例子吗 (stackoverflow.com/help/minimal-reproducible-example) 即让你发布的代码真正起作用。
-
因为 `'Figure' 对象没有属性 'plot'`,所以我们无法按照我尝试的方式指定绘图应该转到哪个图形。
标签: python matplotlib