我创建了一个代码,可以根据坐标向我显示图形。
import matplotlib.pyplot as plt
draws = [['4X13' , 0.105, 0.103, 0.008, 0.007, 0.088],
['5X16' , 0.127, 0.127, 0.009, 0.006, 0.108],
['5X19' , 0.130, 0.127, 0.010, 0.006, 0.108],
['6X8.5' , 0.148, 0.100, 0.004, 0.004, 0.138],
['6X9' , 0.149, 0.100, 0.005, 0.004, 0.138],
['6X12' , 0.153, 0.101, 0.007, 0.005, 0.138]]
for i in range(len(draws)):
xi_down = 0
yi_down = 0
xf_down = draws[i][2]
yf_down = 0
xi_up = 0
yi_up = draws[i][1]
xf_up = draws[i][2]
yf_up = draws[i][1]
xi_mid = draws[i][2]/2
yi_mid = 0
xf_mid = draws[i][2]/2
yf_mid = draws[i][1]
plt.plot((xi_down, xf_down), (yi_down, yf_down), linewidth = draws[i][3]*1000)
plt.plot((xi_up, xf_up), (yi_up, yf_up), linewidth = draws[i][3]*1000)
plt.plot((xi_mid, xf_mid), (yi_mid, yf_mid), linewidth = draws[i][4]*1000)
plt.title('P W '+draws[i][0])
plt.axis('equal')
plt.show()
问题是每个图形都彼此重叠,我想要的是将它们显示在单独的窗口中,如下所示:
一种解决方法是再次为列表中的每一行调用plot方法,但我认为这样效率不高,有没有更好的方法?
谢谢
答案 0 :(得分:0)
您只需在每次迭代的开始添加以下行:
for i in range(len(draws)):
plt.figure()
...
如果要查看所有图已打开,请从循环中删除以下行:
plt.show()
这将生成一个图形对象,并且在每次迭代中使用绘图时,它将显示在不同的窗口中。
生成6个绘图图形的整个代码为:
import matplotlib.pyplot as plt
draws = [['4X13' , 0.105, 0.103, 0.008, 0.007, 0.088],
['5X16' , 0.127, 0.127, 0.009, 0.006, 0.108],
['5X19' , 0.130, 0.127, 0.010, 0.006, 0.108],
['6X8.5' , 0.148, 0.100, 0.004, 0.004, 0.138],
['6X9' , 0.149, 0.100, 0.005, 0.004, 0.138],
['6X12' , 0.153, 0.101, 0.007, 0.005, 0.138]]
for i in range(len(draws)):
plt.figure()
xi_down = 0
yi_down = 0
xf_down = draws[i][2]
yf_down = 0
xi_up = 0
yi_up = draws[i][1]
xf_up = draws[i][2]
yf_up = draws[i][1]
xi_mid = draws[i][2]/2
yi_mid = 0
xf_mid = draws[i][2]/2
yf_mid = draws[i][1]
plt.plot((xi_down, xf_down), (yi_down, yf_down), linewidth = draws[i][3]*1000)
plt.plot((xi_up, xf_up), (yi_up, yf_up), linewidth = draws[i][3]*1000)
plt.plot((xi_mid, xf_mid), (yi_mid, yf_mid), linewidth = draws[i][4]*1000)
plt.title('P W '+draws[i][0])
plt.axis('equal')
plt.show()