不写出y=f(x)这样的表达式,由隐函数的等式直接绘制图像,以x²+y²+xy=1的图像为例,使用sympy间接调用matplotlib工具的代码和该二次曲线图像如下(注意python里的乘幂符号是**而不是^,还有,python的sympy工具箱的等式不是a==b,而是a-b或者Eq(a,b),这几点和matlab的区别很大)
创新互联公司2013年成立,先为东湖等服务建站,东湖等地企业,进行企业商务咨询服务。为东湖企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
直接在命令提示行的里面运行代码的效果
from sympy import *;
x,y=symbols('x y');
plotting.plot_implicit(x**2+y**2+x*y-1);
处理过与时间有关的数据的人都知道,差分变化经常用来使得结果更加直观。在这篇文章里将会教你如何用Python来实现这一目的,读完这篇文章,你将会掌握以下技能:
1、知道什么是差分变换以及滞后差分和差分阶数的设置
2、如何手动计算差分
3、怎样使用Pandas内置的差分函数
所以,让我们赶紧开始吧!
为什么要对时间序列数据进行差分?
首先来看下为什么要对数据进行差分变化,差分变化可以消除数据对时间的依赖性,也就是降低时间对数据的影响,这些影响通常包括数据的变化趋势以及数据周期性变化的规律。进行差分操作时,一般用现在的观测值减去上个时刻的值就得到差分结果,就是这么简单,按照这种定义可以计算一系列的差分变换。
滞后差分
连续观测值之间的差分变换叫做一阶滞后差分。滞后差分的步长需要根据数据的时间结构做调整,例如对于周期性变化的数据,这个时间步长就是数据变化的周期。
差分阶数
在进行一次差分之后,时间项的作用并没有完全去掉,将会继续对差分结果进行差分变化,直到完全消除时间项的影响因素为止,这个过程中进行的差分操作次数就称为差分阶数。
洗发水销售数据
这份数据是三年来每月洗发水的销售情况,总共有36个数据记录,原始数据来自Makridakis, Wheelwright和 Hyndman (1998).,可以从下面的地址下到数据:
下面的代码将会导入数据并将结果画成折线图,如下所示:
手动差分
在这一部分中,我们将会自定义一个函数来实现差分变换,这个函数将会对提供的数据进行遍历并根据指定的时间间隔进行差分变换。具体代码如下:
从上面的代码中可以看到该函数将会根据指定的时间间隔来对数据进行变换,一般来说,通常会计算间隔一个数据的差分,这样的结果比较可靠。当然,我们也可以将上面的函数进行一定的改进,加入差分阶数的指定。
下面将这函数应用到上面洗发水销售的数据中去,运行之后绘出下面的图,具体如下:
自动差分
Pandas库里提供了一个函数可以自动计算数据的差分,这个函数是diff(),输入的数据是“series'或”DataFrame'类型的,像前面自定义函数那样,我们也可以指定差分的时间间隔,不过在这里这个参数叫做周期。
下面的例子是用Pandas内置函数来计算差分的,数据类型是series的,使用Pandas内置函数的好处是代码工作量减少了不少,而且绘出的图中包含更详细的信息,具体效果如下:
总结
读完本文想必你已经学会用python来实现对数据的差分了,尤其是对差分的概念,手动差分,以及使用Pandas内置函数进行差分都有所了解了。如果有什么好的想法欢迎在评论栏里留下。
dta=np.array(dta,dtype=np.float) //这里要转下数据类型,不然运行会报错
dta=pd.Series(dta)
dta.index = pd.Index(sm.tsa.datetools.dates_from_range('2001','2090')) //应该是2090,不是2100
dta.plot(figsize=(12,8))
plt.show() // 在Scala IDE要输入这个命令才能显示图!
raw_input获取的输入是字符串,不能直接用np.array,需要用split进行切分,然后强制转化成数值类型,才能用plot函数
我把你的代码稍微修改了一下,可能不太漂亮,不过能运行了
x=[1,2,3]
a = raw_input('function')
a = a.split(' ')#依空格对字符串a进行切分,如果是用逗号分隔,则改成a.split(',')
b = []
for i in range(len(a)):#把切分好的字符强制转化成int类型,如果是小数,将int改为float
b.append(int(a[i]))
plt.plot(x, b, label='x', color="green", linewidth=1)
1、plt.legendplt.legend(loc=0)#显示图例的位置。
2、plt.figureplt.figure(figsize=(14,6),dpi=80)#设置绘图区域的大小和像素。
3、plt.xticksplt.xticks(new_year)#设置x轴的刻度线为new_year,new_year可以为数组。
4、plt.xlabelplt.xlabel('year')#x轴标签。
5、plt.plotplt.plot(number,color='blue',label="actualvalue")#将实际值的折线设置为蓝色。
6、两个图分开fig,axes=plt.subplots(2,1,sharex=True,figsize=(10,10))。
7、画竖直线plt.axvline(99,linestyle="dotted",linewidth=4,color='r')#99表示横坐标。
8、图片保存plt.savefig('timeseries_y.jpg')。
为避免中文显示出错,需导入matplotlib.pylab库
1.2.1 确定数据
1.2.2 创建画布
1.2.3 添加标题
1.2.4 添加x,y轴名称
1.2.5 添加x,y轴范围
1.2.6 添加x,y轴刻度
1.2.7 绘制曲线、图例, 并保存图片
保存图片时,dpi为清晰度,数值越高越清晰。请注意,函数结尾处,必须加plt.show(),不然图像不显示。
绘制流程与绘制不含子图的图像一致,只需注意一点:创建画布。
合理调整figsize、dpi,可避免出现第一幅图横轴名称与第二幅图标题相互遮盖的现象.
2.2.1 rc参数类型
2.2.2 方法1:使用rcParams设置
2.2.3 方法2:plot内设置
2.2.4 方法3:plot内简化设置
方法2中,线条形状,linestyle可简写为ls;线条宽度,linewidth可简写为lw;线条颜色,color可简写为c,等等。