繁体   English   中英

如何在Python中组合图形? (我得到多个图。)

[英]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
  1. 得到多个绘图的原因是,在每个循环中,您都在调用plt.figure来创建一个新的图形窗口。 将其放在循环之前,然后在循环内创建新的子sublot

  2. 您只需通过[1, 2, 3, ..., columns]m值即可。 这是作为range内置的,其中range(columns)给出[0, 1, 2, ..., columns-1] ,所以range(1, columns+1)将是您想要的。 您不需要手动增加m ,也不需要使用p来停止循环:这将在m具有范围内的每个值时自动发生。

  3. 要获取数据的第m列,您可以切片“ column”维,这是第二维: data[:, m]给出第m列中的所有行。 empty :表示“所有行”, m表示“列m”。 (您可以像使用列表一样处理整个切片,但是可以在多个维度上进行处理)。 有关更多信息,请参见此处此处

  4. 对于子图,必须为每个图更改第一个参数。 您可以这样称呼它: fig.add_subplot(nrows, ncols, plot_number) 因此,您希望循环中的plot_numberm

所有这些加在一起:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM