我的脚本会生成8个单独的图表。我希望能够在一个图表上看到所有行。此外,如果提示我想生成子图;所以在我的情况下,1张纸上有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
答案 0 :(得分:2)
你得到几个图的原因是你在每个循环中调用plt.figure
来创建一个新的图形窗口。将它放在循环之前,然后在循环中创建新的sublot
。
您只需通过m
中[1, 2, 3, ..., columns]
的值。这内置为range
,其中range(columns)
提供[0, 1, 2, ..., columns-1]
,因此range(1, columns+1)
将是您想要的。您不需要手动增加m
,并且您不需要使用p
来停止循环:这些都会在m
每次m
时自动发生范围内的值。
要获取数据的data[:, m]
列,您只需切换&#34;列&#34;维度,这是第二维:m
给出:
列中的所有行。空m
表示&#34;所有行&#34;并且fig.add_subplot(nrows, ncols, plot_number)
表示&#34;列m&#34;。 (你可以像列表那样做整个切片,但是在多个维度上)。有关详细信息,请参阅here和here。
对于子图,您必须更改每个图的第一个参数。您可以这样称呼它: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.
。
所有这一切:
chrome.tabs.executeScript({code: "window.myExtensionVariables"}, function(result) {
if (!result[0]) {
/* inject the script */
}
});
答案 1 :(得分:0)
每次执行plt.show()时,它都会显示到目前为止的图形,并将其重置为下一个图形。
如果你把plt.show()放在最后,那么会有一个包含所有行的图表。
对于subplot选项,你需要循环通过add_subplots 241,242,243,244,245,246,247,248(以及最后的plt.show()),而不是111.
一开始的一些输入和一些if语句应该可以看到你!