![](/img/trans.png)
[英]I'm having trouble plotting graphs in Python 3.7. How can I do it?
[英]How can I combine graphs in Python? (I'm getting multiple graphs.)
我的脚本生成8个独立的图。 我希望能够在一张图表上看到所有线条。 另外,如果出现提示,我想产生子图; 因此,在我的情况下,一张纸上有8张图。
import numpy as np
import matplotlib.pyplot as plt
columns = input('How many columns? ')
data = np.genfromtxt('csv_file',delimiter=',', dtype = float)
m = 1
p = 0
while p == 0:
if m < (columns):
x = [row[0] for row in data]
y = [row[m] for row in data]
fig = plt.figure()
ax = fig.add_subplot(111, axisbg = 'w')
ax.plot(x,y,lw=1.3)
plt.show()
else:
p = 1
m = m+1
得到多个绘图的原因是,在每个循环中,您都在调用plt.figure
来创建一个新的图形窗口。 将其放在循环之前,然后在循环内创建新的子sublot
。
您只需通过[1, 2, 3, ..., columns]
的m
值即可。 这是作为range
内置的,其中range(columns)
给出[0, 1, 2, ..., columns-1]
,所以range(1, columns+1)
将是您想要的。 您不需要手动增加m
,也不需要使用p
来停止循环:这将在m
具有范围内的每个值时自动发生。
要获取数据的第m
列,您可以切片“ column”维,这是第二维: data[:, m]
给出第m
列中的所有行。 empty :
表示“所有行”, m
表示“列m”。 (您可以像使用列表一样处理整个切片,但是可以在多个维度上进行处理)。 有关更多信息,请参见此处和此处 。
对于子图,必须为每个图更改第一个参数。 您可以这样称呼它: fig.add_subplot(nrows, ncols, plot_number)
。 因此,您希望循环中的plot_number
为m
。
所有这些加在一起:
import numpy as np
import matplotlib.pyplot as plt
data = np.genfromtxt('csv_file',delimiter=',', dtype = float)
columns = data.shape[1] - 1 # a numpy array's `shape` is (rows, columns, etc). I am subtracting the x column.
nrows, ncols = 4, 2 # the product of these should be number of plots (I'm assuming columns=8)
fig = plt.figure()
x = data[:, 0] # same as [row[0] for row in data], and doesn't change in loop, so only do it once.
for m in range(1, columns+1): # this loops from 1 through columns
y = data[:, m] # same as [row[m] for row in data]
ax = fig.add_subplot(nrows, ncols, m, axisbg = 'w')
ax.plot(x, y, lw=1.3)
plt.show() # after loop finishes, only need to show once.
每次执行plt.show()时,它将显示到目前为止的图形并将其重置为下一个图形。
如果将plt.show()放在末尾,将有一个包含所有线条的图形。
对于subplot选项,您将需要循环遍历add_subplots 241、242、243、244、245、246、247、248(最后是plt.show()),而不是111。
开头有一些输入,另一些if语句应该可以指导您!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.