玩转可运行代码是学习Python最快的方式之一。
所以,让我们从matplotlib示例库中的代码开始。
根据代码中的注释,该代码似乎分为4个主要部分。第一部分生成一些数据,第二部分生成主要图形,第三和第四部分创建插入轴。
我们知道如何生成数据和绘制主要图形,因此让我们专注于第三部分:
a = axes([.65, .6, .2, .2], axisbg='y')
n, bins, patches = hist(s, 400, normed=1)
title('Probability')
setp(a, xticks=[], yticks=[])
将示例代码复制到一个新文件中,命名为 test.py
。
如果我们将 .65
改为 .3
会发生什么?
a = axes([.35, .6, .2, .2], axisbg='y')
运行脚本:
python test.py
你会发现“Probability”插图被移到了左边。因此,
axes
函数控制插图的位置。如果你再试一下不同的数字,你会发现(.35, .6)是插图左下角的位置,(.2, .2)是插图的宽度和高度。这些数字的范围从0到1,(0,0)是图形左下角的位置。
好的,现在我们继续。下一行是:
n, bins, patches = hist(s, 400, normed=1)
你可能会认出这是用于绘制直方图的
matplotlib命令, 如果不知道,将数字400更改为例如10,将生成一个更加粗糙的直方图图像,因此通过调整数字,您很快就会发现此行与插图内部的图像有关。
在这里,您需要调用
semilogx(data[3:8,1],data[3:8,2])
。
显然,
title('Probability')
会在插图上方生成文本。
最后,我们来到
setp(a, xticks=[], yticks=[])
。没有可以操作的数字,所以如果我们在行首添加一个
#
注释掉整行,会发生什么:
重新运行脚本。哦!现在插入轴上有很多刻度线和刻度标签。好的。所以现在我们知道
setp(a, xticks=[], yticks=[])
会从轴
a
中删除刻度线和标签。
理论上,您已经拥有足够的信息来将此代码应用于您的问题。但是还有一个可能的绊脚石:Matplotlib示例使用
from pylab import *
,而您使用
import matplotlib.pyplot as plt
。
Matplotlib FAQ说当编写脚本时,推荐使用
import matplotlib.pyplot as plt
来使用Matplotlib,而
from pylab import *
用于交互式会话。因此,您正在正确地使用它(虽然我建议使用
import numpy as np
代替
from numpy import *
)。
那么,我们如何将Matplotlib示例转换为使用
import matplotlib.pyplot as plt
运行呢?
做这个转换需要一些matplotlib的经验。通常,您只需在像axes和setp这样的裸名称前面添加plt.,但有时函数来自numpy,有时调用应该来自于一个轴对象,而不是模块plt。知道所有这些函数来自哪里需要经验。在Google中搜索函数名称以及"matplotlib"可以帮助。阅读示例代码可以建立经验,但没有简单的捷径。
因此,转换后的代码如下:
ax2 = plt.axes([.65, .6, .2, .2], axisbg='y')
ax2.semilogx(t[3:8],s[3:8])
plt.setp(ax2, xticks=[], yticks=[])
你可以像这样在你的代码中使用它:
from numpy import *
import os
import matplotlib.pyplot as plt
data = loadtxt(os.getcwd()+txtfl[0], skiprows=1)
fig1 = plt.figure()
ax1 = fig1.add_subplot(111)
ax1.semilogx(data[:,1],data[:,2])
ax2 = plt.axes([.65, .6, .2, .2], axisbg='y')
ax2.semilogx(data[3:8,1],data[3:8,2])
plt.setp(ax2, xticks=[], yticks=[])
plt.show()