搜索之后发现,它会弹出一个对话框,然后就开始画了,比如下图
第一个常用的库是Turtle,它是Python语言中一个很流行的绘制图像的函数库,这个词的意思就是乌龟,你可以想象下一个小乌龟在一个x和y轴的平面坐标系里,从原点开始根据指令控制,爬行出来就是绘制的图形了。
它最常用的指令就是旋转和移动,比如画个圆,就是绕着圆心移动;再比如上图这个怎么画呢,其实主要就两个命令:
turtle.forward(200)
turtle.left(170)
第一个命令是移动200个单位并画出来轨迹
第二个命令是画笔顺时针转170度,注意此时并没有移动,只是转角度
然后呢? 循环重复就画出来这个图了
好玩吧。
有需要仔细研究的可以看下这篇文章 https://blog.csdn.net/zengxiantao1994/article/details/76588580 ,这个牛人最后用这个库画个移动的钟表,太赞了。
Turtle虽好玩,但是我想要的是我给定数据,然后让它画图,这里就找到另一个常用的画图的库了。
Matplotlib是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行制图。其中,matplotlib的pyplot模块一般是最常用的,可以方便用户快速绘制二维图表。
使用起来也挺简单,
首先import matplotlib.pyplot as plt 导入画图的图。
然后给定x和y,用这个命令plt.plot(x, y)就能画图了,接着用plt.show()就可以把图形展示出来。
接着就是各种完善,比如加标题,设定x轴和y轴标签,范围,颜色,网格等等,在 https://blog.csdn.net/guoziqing506/article/details/78975150 这篇文章里介绍的很详细。
现在互联网的好处就是你需要什么内容,基本上都能搜索出来,而且还是免费的。
我为什么要研究这个呢?当然是为了用,比如我把比特币的曲线自己画出来可好?
假设现在有个数据csv文件,一列是日期,另一列是比特币的价格,那用这个命令画下:
这两列数据读到pandas中,日期为df['time']列,比特币价格为df['ini'],那我只要使用如下命令
plt.plot(df['time'], df['ini'])
plt.show()
就能得到如下图:
自己画的是不是很香,哈哈!
然后呢,我在上篇文章 https://www.jianshu.com/p/d4013d8a73de 中介绍过求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轴怎么加?这又是一个问题,留给爱思考爱学习的你。
有了自己的数据,建立自己的各个指数,然后再放到图形界面中,同时针对异常情况再自动进行提醒,比如要抄底了,要卖出了,用程序做出自己的晴雨表。
一、认识绘图区在绘制图形之前,我们首先要了解的就是图表的组成部分,以及各组成部分如何用代码来更改。这也是我们用 Python 绘制图表的基础。
1、建立画布:figure
画布的作用相当于我们绘图过程中用到的画板,有了画板,我们才能将纸固定下来:
# 导入 matplotlib 库
import matplotlib.pyplot as plt
# 建立一个画布,画布大小为(8,6)
plt.figure(figsize=(8, 6))
plt.show()
登录后复制
输出结果:
2、建立绘图区:subplot
建立绘图区就是创建坐标系,用来绘制图形,相当于铺在画布上的纸。
# 创建坐标系(用于绘制图形)
axes = plt.subplot()
登录后复制
输出结果:
Ps:当然,在绘制简单图形时。我们也可以用下面这种方式建立坐标系,也可以达到同样的效果:
# 导入 matplotlib 库
import matplotlib.pyplot as plt
# 建立一个画布,画布大小为(8,6)
plt.figure(figsize=(8, 6))
# 创建坐标系(用于绘制图形)
plt.plot()
plt.show()
登录后复制
但本小白觉得这种绘制单个图形还可以,在一个画布上绘制多个图形时还是要用到 subplot 函数,且更改坐标轴的样式时不太方便,下面将会为大家介绍。
二、更改绘图区参数
1、X、Y轴刻度 tick_params
import matplotlib.pyplot as plt
plt.figure(figsize=(8, 6))
axes = plt.subplot()
# 更改轴上刻度
# axis:代表坐标轴(默认="both")
# both:x,y轴同时更改;axis="x"只更改x轴
# direction="in"代表刻度向里,"out"向外
# bottom,top,right,left:刻度线
# labelbottom, labeltop, labelleft, labelright:刻度线下文字
axes.tick_params(axis="both", direction="in", bottom=False,labelbottom=False)
plt.show()
登录后复制
更多 tick_params 参数
2、边框线 spines
# 图表边框线的修改
# top、bottom、left、right
axes.spines["top"].set_visible(False)
axes.spines["right"].set_visible(False)
axes.spines["bottom"].set_visible(False)
登录后复制
注:前面我们说到用 axes=plt.subplot() 创建绘图区,就是为了能够用 axes.spines... 这段代码,利用 plt.plot() 没有这样方便,而且还利于在一个画布中创建多个坐标轴。
3、实例
# 绘制正、余弦函数
import numpy as np
import matplotlib.pyplot as plt
# 创建画布
plt.figure(figsize=(8, 6))
# 建立坐标系
axes = plt.subplot()
axes.spines["top"].set_visible(False)
axes.spines["right"].set_visible(False)
x = np.linspace(0, 2*np.pi)
y1 = np.sin(x)
y2 = np.cos(x)
axes.plot(x, y1, x, y2)
plt.show()
登录后复制
到此,我们就能够随意更改坐标轴的样式,来创建有特色的图形了。
三、创建子图: subplot函数
通常我们需要在一个画布中绘制多个图形,这样我们就需要用到 subplot函数:
subplot ( nrows, ncols, plot_number )
nrows:子图的行数
ncols:子图的列数
plot_number:子图放的位置
subplot(2,2,1)
# 将画布分为2x2四个区域,并在第一个位置绘图
登录后复制
也可以写成下面的形式,输出结果一样