扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
今天开始琢磨用Python画图,没使用之前是一脸懵的,我使用的开发环境是Pycharm,这个输出的是一行行命令,这个图画在哪里呢?
嘉黎网站制作公司哪家好,找创新互联建站!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。创新互联建站2013年开创至今到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联建站。
搜索之后发现,它会弹出一个对话框,然后就开始画了,比如下图
第一个常用的库是Turtle,它是Python语言中一个很流行的绘制图像的函数库,这个词的意思就是乌龟,你可以想象下一个小乌龟在一个x和y轴的平面坐标系里,从原点开始根据指令控制,爬行出来就是绘制的图形了。
它最常用的指令就是旋转和移动,比如画个圆,就是绕着圆心移动;再比如上图这个怎么画呢,其实主要就两个命令:
turtle.forward(200)
turtle.left(170)
第一个命令是移动200个单位并画出来轨迹
第二个命令是画笔顺时针转170度,注意此时并没有移动,只是转角度
然后呢? 循环重复就画出来这个图了
好玩吧。
有需要仔细研究的可以看下这篇文章 ,这个牛人最后用这个库画个移动的钟表,太赞了。
Turtle虽好玩,但是我想要的是我给定数据,然后让它画图,这里就找到另一个常用的画图的库了。
Matplotlib是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行制图。其中,matplotlib的pyplot模块一般是最常用的,可以方便用户快速绘制二维图表。
使用起来也挺简单,
首先import matplotlib.pyplot as plt 导入画图的图。
然后给定x和y,用这个命令plt.plot(x, y)就能画图了,接着用plt.show()就可以把图形展示出来。
接着就是各种完善,比如加标题,设定x轴和y轴标签,范围,颜色,网格等等,在 这篇文章里介绍的很详细。
现在互联网的好处就是你需要什么内容,基本上都能搜索出来,而且还是免费的。
我为什么要研究这个呢?当然是为了用,比如我把比特币的曲线自己画出来可好?
假设现在有个数据csv文件,一列是日期,另一列是比特币的价格,那用这个命令画下:
这两列数据读到pandas中,日期为df['time']列,比特币价格为df['ini'],那我只要使用如下命令
plt.plot(df['time'], df['ini'])
plt.show()
就能得到如下图:
自己画的是不是很香,哈哈!
然后呢,我在上篇文章 中介绍过求Ahr999指数,那可不可以也放到这张图中呢?不就是加一条命令嘛
plt.plot(df['time'], df['Ahr999'])
图形如下:
但是,Ahr999指数怎么就一条线不动啊, 原来两个Y轴不一致,显示出来太怪了,需要用多Y轴,问题来了。
继续谷歌一下,把第二个Y轴放右边就行了,不过呢得使用多图,重新绘制
fig = plt.figure() # 多图
ax1 = fig.add_subplot(111)
ax1.plot(df['time'], df['ini'], label="BTC price") # 绘制第一个图比特币价格
ax1.set_ylabel('BTC price') # 加上标签
# 第二个直接对称就行了
ax2 = ax1.twinx()# 在右边增加一个Y轴
ax2.plot(df['time'], df['Ahr999'], 'r', label="ahr999") # 绘制第二个图Ahr999指数,红色
ax2.set_ylim([0, 50])# 设定第二个Y轴范围
ax2.set_ylabel('ahr999')
plt.grid(color="k", linestyle=":")# 网格
fig.legend(loc="center")#图例
plt.show()
跑起来看看效果,虽然丑了点,但终于跑通了。
这样就可以把所有指数都绘制到一张图中,等等,三个甚至多个Y轴怎么加?这又是一个问题,留给爱思考爱学习的你。
有了自己的数据,建立自己的各个指数,然后再放到图形界面中,同时针对异常情况再自动进行提醒,比如要抄底了,要卖出了,用程序做出自己的晴雨表。
在函数拟合中,如果用p表示函数中需要确定的参数,那么目标就是找到一组p,使得下面函数S的值最小:
这种算法称为最小二乘法拟合。Python的Scipy数值计算库中的optimize模块提供了 leastsq() 函数,可以对数据进行最小二乘拟合计算。
此处利用该函数对一段弧线使用圆方程进行了拟合,并通过Matplotlib模块进行了作图,程序内容如下:
Python的使用中需要导入相应的模块,此处首先用 import 语句
分别导入了numpy, leastsq与pylab模块,其中numpy模块常用用与数组类型的建立,读入等过程。leastsq则为最小二乘法拟合函数。pylab是绘图模块。
接下来我们需要读入需要进行拟合的数据,这里使用了 numpy.loadtxt() 函数:
其参数有:
进行拟合时,首先我们需要定义一个目标函数。对于圆的方程,我们需要圆心坐标(a,b)以及半径r三个参数,方便起见用p来存储:
紧接着就可以进行拟合了, leastsq() 函数需要至少提供拟合的函数名与参数的初始值:
返回的结果为一数组,分别为拟合得到的参数与其误差值等,这里只取拟合参数值。
leastsq() 的参数具体有:
输出选项有:
最后我们可以将原数据与拟合结果一同做成线状图,可采用 pylab.plot() 函数:
pylab.plot() 函数需提供两列数组作为输入,其他参数可调控线条颜色,形状,粗细以及对应名称等性质。视需求而定,此处不做详解。
pylab.legend() 函数可以调控图像标签的位置,有无边框等性质。
pylab.annotate() 函数设置注释,需至少提供注释内容与放置位置坐标的参数。
pylab.show() 函数用于显示图像。
最终结果如下图所示:
用Python作科学计算
numpy.loadtxt
scipy.optimize.leastsq
1.1 例如:print(hex(2))案例
1.2 输出函数:print(hex(2))
1.3 输出结果:0x2
1.4 解析说明:返回16进制的数。
2.1 例如:print(chr(10))案例
2.2 输出函数:print(chr(10))
2.3 输出结果:0o12
2.4 解析说明:返回当前整数对应的ASCll码
3.1 例如:print(ord("b"))案例
3.2 输出函数:print(ord("b"))
3.3 输出结果:98
3.4 解析说明:返回当前ASCll码的10进制数
4.1 例如:print(chr(97))
4.2 输出函数:print(chr(97))
4.3 输出结果:b
4.4 解析说明:返回当前ASCll码的10进制数。
案例一:给你一个字符串,s = 'hello kitty'
1.1 输出函数:print(s.capitalize())
1.2 输出结果:0x2
1.3 解析说明:返回16进制的数。
2.1输出函数:print(s.replace('kitty','kuang'))
2.2 输出结果:hello kuang
2.3 解析说明:替换功能,将kitty换成kuang。
2.4 输出函数:print(s.replace('4','KK'))
2.5 输出结果:12KK12KK
2.6 解析说明:所有的4都替换成KK
2.7 输出函数:print(s.replace('4','KK'))
2.8 输出结果:12KK12KK124
2.9 解析说明:将前两个的4替换成go
案例一:给你一个字符串,ip = '192.168.1.1'
3.1 输出函数:print(ip.split(','))
3.2 输出结果:['192.168.1.1']
3.3 解析说明:将字符串分割成列表
案例一:给你一个字符串,ip = '192.168.1.1'
3.3 输出函数:print(ip.split(',',2))
3.4 输出结果:['192.168.1.1']
3.5 解析说明:从第二个开始分割成列表
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流