考试周和周六上午的工数竞赛刚刚结束,百无聊赖,又懒得拼那个HG的AGE-3,就来matplotlib画廊学学画图。突然兴起,想把自己学习matplotlib的过程记录下来,于是就有了这篇博客。。。
第一次写博客,内容简单,难免会有差错或不适当的地方,见谅,hh (^人^)
先介绍学习资料的来源,无意中找到的一个很强大的Python专用数学绘图库matplotlib的绘图展示网站:Thunbnail gallery 里面涵盖了matplotlib能画的绝大部分图片的教程。
今天学习的是在所谓的“lines_bars_and_markers example”目录下的所谓的“line_demo_dash_control”的图。虽然我还不知道它明确的定义,但在此就先叫它为“简单自定义曲线”吧,因为绘制出来的图就是圆滑的曲线。。。
实例地址在这:Click here!
原始完整代码贴在这里:
"""
=======================================
A simple plot with a custom dashed line
=======================================
A Line object's ``set_dashes`` method allows you to specify dashes with
a series of on/off lengths (in points).
"""
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 500)
dashes = [10, 5, 100, 5] # 10 points on, 5 off, 100 on, 5 off
fig, ax = plt.subplots()
line1, = ax.plot(x, np.sin(x), '--', linewidth=2,
label='Dashes set retroactively')
line1.set_dashes(dashes)
line2, = ax.plot(x, -1 * np.sin(x), dashes=[30, 5, 10, 5],
label='Dashes set proactively')
ax.legend(loc='lower right')
plt.show()
我用的是Python3.6,集成开发环境是PyCharm,可以成功运行,不过Python2的版本应该也能无bug地运行。”import”部分里的numpy库和matplotlib库的安装步骤就不在此阐述了。。。
绘制出来的图是这个样子的:
这是什么样的图,是用来统计什么的?下面用我凭运气压线飘过六级的英语水平来翻译一下我认为的几个关键词,看看能不能给我们理解这段代码和这张图带来帮助。
- x = np.linspace(0, 10, 500)
指用numpy库里的linspace函数来间隔采样,从0到10之间取出500个数; - dashes = [10, 5, 100, 5]
指曲线上的点分为无数个“第一段+第二段”的组合,第一段是先显示10 个点再隐藏5个点,第二段是先显示100个点再隐藏5个点 ,依次循环“第一段+第二段”的组合; - fig, ax = plt.subplots()
用子图绘制函数subplots来绘图的步骤,函数返回一个figure图像和一个子图ax的array列表。括号里可以填参数,分别代表子图的行数和列数,在这里缺省了(在这张图的绘制里形参括号里填(1,1)和缺省的效果是一样的,但填(2,2)就出bug了); - line1, = ax.plot(x, np.sin(x), ‘–’, linewidth=2, label=’Dashes set retroactively’)
画曲线1,横轴变量x映射成的y是正弦sin函数,线条样式是’–’,宽度是2,第一条线的名称是’Dashes set retroactively’(破折号追溯?迷之翻译。。。) - line1.set_dashes(dashes)
按照dashes函数设置的线条样式画曲线1 - line2, = ax.plot(x, -1 * np.sin(x), dashes=[30, 5, 10, 5], label=’Dashes set proactively’)
画曲线2,这里可以看到plot函数的参数设置有所改变,映射的y对象变成负正弦函数,dashes样式也改变了; - ax.legend(loc=’lower right’)
这行代码用来在图中显示曲线1与曲线2的”label”信息。
经以上的简单分析后,绘制这张图的基本方法就算大概掌握了(虽然曲线的”label”信息的具体意思暂时翻译不出来。。。)
有空的话,再进一步更新吧。第一次写博客,版面略寒酸,语言的阐述也有毛病,但还是感觉挺刺激的(滑稽脸) 2017.6.24-11:47pm .