Life is short,show me the code !
人生苦短,python的套路不可谓不深……
当你开开心心地攻破python基础语法并牛刀小试地学会numpy,pandas的时候,新的空间已经为你打开!
沿着可视化方向,可以精进matplotlib、seaborn等可视化库;
沿着人工智能方向,可以精进机器学习(sklearn)、深度学习(tensorflow,keras,pytorch)等库;
沿着爬虫方向,可以精进beautifulsoup,selenium,scrapy,flask等库;
沿着软件开发方向,可以精进django,QT等框架;
沿着数据库方向,可以精进mysql、mongodb,redis,spark等库;
…………
子曰:吾生也有涯,而知也无涯。以有涯随无涯,殆已!人生苦短,身处一个知识浩如烟海的时代,我们或没有“半部论语治天下”的机会了。“一文教会你XXX”,“一周掌握XXX”,“学会XXX,你只需要XXX” 带着强烈心理暗示标题的文章挖空心思地挤进你小小的手机屏幕,他们告诉你,再慢你就来不及了。
是呀!时间太宝贵了,当你打开本文的时候,我也抱着满满的歉意,又浪费你时间了,客套话不说了,上正文吧。
本文代码运行环境为 jupyter notebook
python版本3.7
本文代码依赖库包括
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
两行代码自定义正弦曲线
三行代码完成绘图
x = np.linspace(0, 10, 1000)
y_sin = np.sin(x)
# 自定义正弦曲线
plt.plot(x, y_sin, ls='-', c='black', lw=2, label='sin(x)')
plt.legend()
plt.show()
有时我们更关心局部的一些特征,可以通过以下接口限制图形显示范围
plt.xlim([0, 3])
plt.ylim([0, 1])
添加x轴、y轴标签
plt.xlabel('x-axis',size=15)
plt.ylabel('y-axis',size=15)
添加网格线
plt.grid(which='major', axis='x', c='r', lw=2, ls=":")
plt.grid(which='major', axis='y', c='g', lw=2, ls="--")
plt.axhline(y=0.5, lw=4, c='blue')
plt.axhline(y=0.7, xmin=0.5, xmax=0.75, lw=4, c='blue')
plt.axvline(x=1.8, ymin=0.2, ymax=0.8, lw=4)
添加填充面
plt.axvspan(xmin=0.7, xmax=1.2, ymin=0.4, ymax=0.7, facecolor='r', edgecolor='b',)
plt.axhspan(ymin=0.1, ymax=0.2, xmin=0.4, xmax=0.6, facecolor='y', alpha=0.4)
添加注释
plt.annotate(s='annotate point',
xy=(0.5, 0.2), # 需要被标注的位置
xytext=(1.0, 0.3), # 标注文本所在的位置
weight='bold', # 加粗
color='r', # 标注文本颜色
size=15, # 标注文本字体大小
arrowprops=dict(arrowstyle="->", connectionstyle='arc3',
linestyle='--', linewidth=4, color='r')
)
添加文本
plt.text(x=0.5,
y=0.8,
s='正弦曲线',
family='SimHei',
size=20,
va='bottom', # 垂直方向位置
ha='center' # 水平方向位置
)
添加标题
plt.title('正弦曲线y=sin(x)\n', size=25, family='SimHei')
进一步调整图例
plt.legend(
['sin-x'], # 图例显示标签,默认为传入数据 y的label名称
loc=1, # loc 一共有10个位置选项,通过给定数字或者是特定字符表述
frameon=False, # legend是否需要外边框,True表示有,为默认值
fontsize=20, # 文本大小
)
进一步调整坐标轴标签
plt.xticks(ticks=[0, 0.5, 1.0, 2.0, 3.0] # 自定义刻度
, fontsize=20, fontfamily='Times New Roman')
plt.yticks(ticks=[0.1, 0.4, 0.7, 1.0] # 自定义刻度
, labels=['y-0.1', 'y-0.4', 'y-0.7', 'y-1.0']
, size=20, family='Times New Roman'
)
保存文件
plt.savefig('sin.png',dpi=220,pad_inches=0.0)
至此,我们已经完成了一个虽谈不上美观、但各要素(标题、网格、辅助线、注释、文本、轴标题、轴标签)都相对齐备的图,并且初步尝试了对图例和坐标轴标签进行了定制,后续随着我们更深入地挖掘,你会看到,matplotlib的图层自由度是极高的,每个对象都有多个参数对其修饰。让我们更细致、更深入地去挖掘matplotlib!