Flu*_*tor 8 python plot matplotlib
我有一些代码:
import matplotlib.pyplot as plt
def print_fractures(fractures):
xpairs = []
ypairs = []
plt.figure(2)
plt.subplot(212)
for i in range(len(fractures)):
xends = [fractures[i][1][0], fractures[i][2][0]]
yends = [fractures[i][1][1], fractures[i][2][1]]
xpairs.append(xends)
ypairs.append(yends)
for xends,yends in zip(xpairs,ypairs):
plt.plot(xends, yends, 'b-', alpha=0.4)
plt.show()
def histogram(spacings):
plt.figure(1)
plt.subplot(211)
plt.hist(spacings, 100)
plt.xlabel('Spacing (m)', fontsize=15)
plt.ylabel('Frequency (count)', fontsize=15)
plt.show()
histogram(spacings)
print_fractures(fractures)
Run Code Online (Sandbox Code Playgroud)
此代码将生成以下输出:
我的问题是:
1)为什么要创建两个单独的数字?我认为subplot命令会将它们组合成一个图形.我以为它可能是多个plt.show()命令,但我尝试将这些命令注释掉,只从我的函数外部调用一次,我仍然有两个窗口.
2)如何将它们正确地组合成1个数字?另外,我希望图2的轴具有相同的比例(即,x轴上的400米与y轴上的400米的长度相同).同样,我也想垂直拉伸直方图 - 这是如何实现的?
正如您已经观察到的那样,figure()
如果您打算只使用一个图形(一个窗口),则无法在每个函数内部调用.相反,只需在函数内部调用subplot()
即可调用show()
.如果您处于模式,show()
将强制pyplot
创建第二个数字plt.ioff()
.在plt.ion()
模式中,您可以将plt.show()
调用保留在本地上下文中(在函数内).
要获得x和y轴相同的比例,请使用plt.axis('equal')
.下面你可以看到这个原型的插图:
from numpy.random import random
import matplotlib.pyplot as plt
def print_fractures():
plt.subplot(212)
plt.plot([1,2,3,4])
def histogram():
plt.subplot(211)
plt.hist(random(1000), 100)
plt.xlabel('Spacing (m)', fontsize=15)
plt.ylabel('Frequency (count)', fontsize=15)
histogram()
print_fractures()
plt.axis('equal')
plt.show()
Run Code Online (Sandbox Code Playgroud)