我有一个三维数组。
第一个维度有4个元素。 第二个维度有10个元素。 第三个维度有5个元素。
我想按如下方式绘制此数组的内容。
第一维的每个元素都有自己的图(页面上有四个图) 第二维的值对应于图的y值。 (每个图表上有10行) 第三维的值对应于图的x值(10行中的每一行具有5个x值)
我对python很新,甚至更新的图形。 我想出了如何使用数据正确加载我的数组...而我甚至都没有尝试让“一页上的四个图”方面正常工作。
现在我只想让一个图表正常工作。 这是我到目前为止所做的一切(一旦我的阵列设置完毕,我已正确加载我的数组。现在图表显示,但它是空白的,x轴包含负值。我的数据都不是负数)
for n in range(1):
for m in range(10):
for o in range(5):
plt.plot(quadnumcounts[n][m][o])
plt.xlabel("Trials")
plt.ylabel("Frequency")
plt.show()
任何帮助都会非常感激!
编辑。进一步澄清。假设我的数组加载如下:
myarray[0][1][0] = 22
myarray[0][1][1] = 10
myarray[0][1][2] = 15
myarray[0][1][3] = 25
myarray[0][1][4] = 13
我希望有一条线,y值为22,10,15,25,13,x值为1,2,3,4,5(因为它是0索引,我可以只有+1之前打印标签)
然后,让我说我有
myarray[0][2][0] = 10
myarray[0][2][1] = 17
myarray[0][2][2] = 9
myarray[0][2][3] = 12
myarray[0][2][4] = 3
我希望这是另一条线,遵循与第一条相同的规则。
答案 0 :(得分:1)
以下是创建数据子图的示例。您尚未提供数据集,因此我使用x
作为0
到360
度的角度,y
成为x
的三角函数(正弦和余弦)。
代码示例:
import numpy as np
import pylab as plt
x = np.arange(0, 361) # 0 to 360 degrees
y = []
y.append(1*np.sin(x*np.pi/180.0))
y.append(2*np.sin(x*np.pi/180.0))
y.append(1*np.cos(x*np.pi/180.0))
y.append(2*np.cos(x*np.pi/180.0))
z = [[x, y[0]], [x, y[1]], [x, y[2]], [x, y[3]]] # 3-dimensional array
# plot graphs
for count, (x_data, y_data) in enumerate(z):
plt.subplot(2, 2, count + 1)
plt.plot(x_data, y_data)
plt.xlabel('Angle')
plt.ylabel('Amplitude')
plt.grid(True)
plt.show()
输出:
<强>更新强> 使用您在更新中提供的样本日期,您可以按以下步骤操作:
import numpy as np
import pylab as plt
y1 = (10, 17, 9, 12, 3)
y2 = (22, 10, 15, 25, 13)
y3 = tuple(reversed(y1)) # generated for explanation
y4 = tuple(reversed(y2)) # generated for explanation
mydata = [y1, y2, y3, y4]
# plot graphs
for count, y_data in enumerate(mydata):
x_data = range(1, len(y_data) + 1)
print x_data
print y_data
plt.subplot(2, 2, count + 1)
plt.plot(x_data, y_data, '-*')
plt.xlabel('Trials')
plt.ylabel('Frequency')
plt.grid(True)
plt.show()
请注意,尺寸与您的尺寸略有不同。这里它们是mydata[0][0] == 10
,mydata[1][3] == 25
等。输出显示如下:
答案 1 :(得分:1)
这里是如何制作4个图,每个图中有10行。
import matplotlib.pyplot as plt
for i, fig_data in enumerate(quadnumcounts):
# Set current figure to the i'th subplot in the 2x2 grid
plt.subplot(2, 2, i + 1)
# Set axis labels for current figure
plt.xlabel('Trials')
plt.ylabel('Frequency')
for line_data in fig_data:
# Plot a single line
xs = [i + 1 for i in range(len(line_data))]
ys = line_data
plt.plot(xs, ys)
# Now that we have created all plots, show the result
plt.show()