数据可视化在量化分析当中是一个很是关键的辅助工具,每每咱们须要经过可视化技术,对咱们的数据进行更清晰的展现,这样也能帮助咱们理解交易、理解数据。经过数据的可视化也能够更快速的发现量化投资中的一些问题,更有利于分析并解决它们。接下来咱们主要使用的可视化工具包叫作——Matplotlib
,它是基于Numpy和tkinter二次开发的,它是一个强大的Python绘图和数据可视化的工具包。html
安装方式:python
pip install matplotlibgit
引用方法:github
import matplotlib.pyplot as pltcanvas
matplotlib是python中的2D绘图库,也是目前使用最普遍的python绘图库。虽然它很庞大,可是能够经过简单的概念框架和重要的知识来理解掌握。它的图像大概能够分为如下4层结构。windows
1)canvas(画板):位于最底层,导入matplotlib库时就自动存在。api
2)figure(画布):创建在canvas之上,从这一层就能够开始设置参数数组
3)axes(子图):将figure分红不一样的块,实现分面绘图网络
4)图表信息(构图元素):添件或修改axes上的图形信息,优化图表的显示效果app
根据以上matplotlib的四层图像结构,pyplot模块绘制图形基本都遵循一个流程。
导入模块
先导入相应工具包。根据官方认证方式导入:
import numpy as np import matplotlib.pyplot as plt
建立画布和子图
首先建立一张空白的画布,设置画布大小,根据须要同时展现几个图形,能够将画布划分为多个部分。而后使用对象方法来完成其他的工做。
pic = plt.figure(figsize=(10,10),dpi=80) # 建立一个10 x 10的画布,像素值为80 ax1 = pic.add_subplot(2,1,1) # 划分为2 x 1的图形阵,选择第一张图片
添加画布内容
绘图的主体部分。添加标题、坐标轴名称等操做与绘制图形时并列的,没有前后顺序,能够先绘制图形,也能够先添加各种标签,可是添加图例必定要在绘制图形以后。
方法 | 描述 |
---|---|
plt.title() | 设置图像标题 |
plt.xlabel() | 设置x轴名称 |
plt.ylabel() | 设置y轴名称 |
plt.xlim() | 设置x轴范围 |
plt.ylim() | 设置y轴范围 |
plt.xticks() | 设置x轴刻度 |
plt.yticks() | 设置y轴刻度 |
plt.legend() | 设置曲线图例 |
图形保存与展现
plt.savefig('图片名称+后缀名') # 保存图片,能够自由指定图片格式 plt.show() # 展现图形
总体流程
import numpy as np import matplotlib.pyplot as plt fig = plt.figure(figsize = (10,10),dpi = 80) # 建立画布。大小10x10,像素80 x = np.linspace(0,1,1000) # 经过numpy生成随机数 fig.add_subplot(2,1,1) # 分为2x1图形阵,选择第一张图片绘图 plt.title('y=x^2 or y=x') # 添加标题 plt.xlabel('x') # 添加x轴名称 plt.ylabel('y') # 添加y轴名称 plt.xlim((0,1)) # 设置x轴范围(0,1) plt.ylim((0,1)) # 设置y轴范围(0,1) plt.xticks([0,0.3,0.6,1]) # 设置x轴刻度 plt.yticks([0,0.5,1]) # 设置y轴刻度 plt.plot(x,x**2) plt.plot(x,x) plt.legend(['y=x^2','y=x']) # 添加图例 plt.savefig('总体绘图流程.png') # 保存图片 plt.show() # 展现图片
在matplotlib中,pyplot的一个子模块style当中定义了不少预设风格,方便进行风格转换。每一个预设风格都存储在一个.mplstyle为后缀的style文件中。
经过print(plt.style.available)
能够查看全部预设风格的名称,经过use函数就能够直接设置预设风格。
查看全部风格名称
print(plt.style.available) """ ['seaborn-dark', 'seaborn-darkgrid', 'seaborn-ticks', 'fivethirtyeight', 'seaborn-whitegrid', 'classic', '_classic_test', 'fast', 'seaborn-talk', 'seaborn-dark-palette', 'seaborn-bright', 'seaborn-pastel', 'grayscale', 'seaborn-notebook', 'ggplot', 'seaborn-colorblind', 'seaborn-muted', 'seaborn', 'Solarize_Light2', 'seaborn-paper', 'bmh', 'tableau-colorblind10', 'seaborn-white', 'dark_background', 'seaborn-poster', 'seaborn-deep'] """
修改风格
x = np.linspace(0,1,1000) plt.title('title') plt.style.use('classic') # 使用classic风格 plt.plot(x,x ** 2) plt.plot(x,x) plt.legend(['y=x^2','y=x'])
pyplot模块使用rc配置文件来自定义图形的各类默认属性,称为rc配置或rc参数。经过修改rc参数能够修改默认的属性,包括窗体大小、每英寸的点数、线条宽度、颜色、样式、坐标轴、坐标和网络属性、文本、字体等。
matplotlib将默认参数配置保存在matplotlibrc文件中,经过修改配置文件,可修改图标的的缺省样式。查看默认配置的方式以下:
1)直接打开matplotlibrc文件
2)print(matplotlib.rc_params())
3)print(matplotlib.rcParamsDefault)
4)print(matplotlib.rcParams)
管理线条属性的rc参数lines几乎能够控制线条的每个细节。
线条的经常使用rc参数名称、解释与取值
rc参数名称 | 解释 | 取值 |
---|---|---|
lines.linewidth | 线条宽度 | 取0~10之间的数值,默认为1.5 |
lines.linestyle | 线条样式 | 可取“-”,“—”,“-.”,“:”4中,默认为“--” |
lines.marker | 线条上点的形状 | 可取“o”,"D","h",".",",","S"等20种,默认为None |
lines.markersize | 点的大小 | 取0~10数值,默认为1 |
import matplotlib as mpl fig = plt.figure(figsize = (10,10),dpi = 80) # 建立画布。大小10x10,像素80 x = np.linspace(0,1,1000) # 经过numpy生成随机数 # 绘制第一张子图 fig.add_subplot(2,2,1) # 分为2x2图形阵,选择第一张图片绘图 plt.rcParams['lines.linestyle'] = '-.' # 修改线条类型 plt.rcParams['lines.linewidth'] = 1 # 修改线条宽度 plt.plot(x,x**2) plt.title('y=x^2') # 添加标题 # 绘制第二张子图 fig.add_subplot(2,2,2) # 分为2x2图形阵,选择第二张图片绘图 mpl.rc('lines',linestyle = '--', linewidth = 10) plt.plot(x,x**2) plt.title('y=x^2') # 添加标题 # 绘制第三张子图 fig.add_subplot(2,2,3) # 分为2x2图形阵,选择第三张图片绘图 plt.rcParams['lines.marker'] = None plt.rcParams['lines.linewidth'] = 3 plt.plot(x,x**2) plt.title('y=x^2') # 添加标题 # 绘制第四张子图 fig.add_subplot(2,2,4) # 分为2x2图形阵,选择第四张图片绘图 plt.rcParams['lines.linestyle'] = ':' plt.rcParams['lines.linewidth'] = 6 plt.plot(x,x**2) plt.title('y=x^2') # 添加标题 plt.savefig('修改线条的rc参数.png') plt.show()
一样,管理坐标轴属性的rc参数axes也能控制坐标轴的任意细节。
rc参数名称 | 解释 | 取值 |
---|---|---|
axas.facecolor | 背景颜色 | 接收颜色简写字符。默认为“W” |
axas.edgecolor | 边线颜色 | 接收颜色简写字符。默认为“k” |
axas.linewidth | 轴线宽度 | 接收0~1的float。默认为0.8 |
axas.grid | 添加网格 | 接收bool。默认为False |
axas.titlesize | 标题大小 | 接收‘small’,‘medium’,'large'。默认为‘large’ |
axas.labelsize | 轴标大小 | 接收‘small’,‘medium’,'large'。默认为‘medium’ |
axas.lablelcolor | 轴标颜色 | 接收颜色简写字符。默认为“k” |
axas.spines.{left,botton,top,tight} | 添加坐标轴 | 接收bool。默认为True |
axas.{x,y}margin | 轴余留 | 接收float。默认为0.05 |
原轴:
x = np.linspace(0,10,1000) plt.plot(x, np.sin(x)) plt.show()
修改rc参数以后的轴:
x = np.linspace(0,10,1000) plt.rcParams['axes.edgecolor'] = 'b' # 轴颜色设置为蓝色 plt.rcParams['axes.grid'] = True # 添加网格 plt.rcParams['axes.spines.top'] = False # 去除顶部轴 plt.rcParams['axes.spines.right'] = False # 去除右侧轴 plt.rcParams['axes.xmargin'] = 0.1 # x轴余留为区间长度的0.1倍 plt.plot(x, np.sin(x)) plt.show()
其实用到如今,可能有些同窗已经发现,默认的pyplot字体,并不支持中文字符,所以须要经过修改font.sans-serif
参数来修改绘图时的字体,使得图形能够正常显示中文。同时因为修改字体后会致使坐标轴中负号没法正常显示,所以须要同时修改axes.uncode_minus参数。
rc参数名称 | 解释 | 取值 |
---|---|---|
font.family | 字体族,每一族对应多种字体 | 接收serif、sans-serif、cursive、fantasy、monospace五种。默认为sans-serif |
font.style | 字体风格 | 接收normal(roman)、italic、oblique三种,默认为normal |
font.variant | 字体变化 | 接收normal或small-caps。默认为normal |
font.widget | 字体重量 | 接收normal、bold、bolder、lighter四种及100、200、…、900.默认为nomal |
font.stretch | 字体延伸 | |
font.size | 字体大小 | 接收float。默认为10 |
windows设置中文字体:
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字体 plt.rcParams['axes.unicode_minus'] = False
mac设置中文字体:
plt.rcParams["font.family"] = 'Arial Unicode MS'
折线图是将"散点"按照横坐标顺序用线段依次链接起来的图形。以折线的上升或降低表示某一特征随另一特征变化的增减以及整体变化趋势。通常用于展示某一特征随时间的变化趋势。
plot函数经常使用参数及其说明
参数 | 说明 |
---|---|
x,y | 分别表示x轴和y轴的数据。无默认值 |
color | 接收特定str,指定线条的颜色。默认为None |
linestyle | 接收特定str,指定线条类型。默认为 “-” |
marker | 接收特定str,表示绘制的点的形状。默认为None |
alpha | 接收0~1的小说,表示点的透明度。默认为None |
其中color参数的8种经常使用颜色的缩写。
颜色缩写 | 表明的颜色 |
---|---|
b | 蓝色 |
g | 绿色 |
r | 红色 |
c | 青色 |
m | 品红 |
y | 黄色 |
k | 黑色 |
w | 白色 |
plt.plot([0,3,9,15,30],linestyle = '-.',color = 'r',marker = 'o')
axis函数
plt.plot(y.cumsum()) plt.grid(True) plt.axis('image')
运行结果:
接下来主要介绍axis函数的一些参数:
参数 | 描述 |
---|---|
Empty | 返回当前坐标轴限值 |
off | 关闭坐标轴线和标签 |
equal | 使用等刻度 |
scaled | 经过尺寸变化平衡刻度 |
tight | 使全部数据可见(缩小限值) |
image | 使全部数据可见(使用数据限值) |
[xmin,xmax,ymin,ymax] | 将设置限制为给定的(一组)值 |
一维数据绘图只能说是一种特例,通常来讲,数据集包含多个单独的子集。这些数据的处理也是一样遵循matplotlib处理一维数据时的原则。可是,这种状况会出现一些其余的问题,例如,两个数据集它们可能会有不一样的刻度,没法用相同的y或者x轴刻度进行绘制,还有可能但愿以不一样的方式可视化两组不一样的数据,例如,一组数据使用线图,另外一组使用柱状图。
接下来,首先生成一个二维样本数据。
np.random.seed(2000) y = np.random.standard_normal((20,2)).cumsum(axis=0)
以上代码生成的是一个包含标准正态分布随机数的20*2的ndarray数组,以下:
array([[ 1.73673761, 1.89791391], [-0.37003581, 1.74900181], [ 0.21302575, -0.51023122], [ 0.35026529, -1.21144444], [-0.27051479, -1.6910642 ], [ 0.93922398, -2.76624806], [ 1.74614319, -3.05703153], [ 1.52519555, -3.22618757], [ 2.62602999, -3.14367705], [ 2.6216544 , -4.8662353 ], [ 3.67921082, -7.38414811], [ 1.7685707 , -6.07769276], [ 2.19296834, -6.54686084], [ 1.18689581, -7.46878388], [ 1.81330034, -7.11160718], [ 1.79458178, -6.89043591], [ 2.49318589, -6.05592589], [ 0.82754806, -8.95736573], [ 0.77890953, -9.00274406], [ 2.25424343, -9.51643749]])
将这样的二维数组传递给plot函数,他将自动把包含的数据解释为单独的数据集。
plt.figure(figsize=(7,4)) plt.plot(y,lw=1.5) plt.plot(y,"rd") plt.axis('tight')
像这种数据确定就是看的一头乱麻,因此说咱们须要将它进一步作一下注释,为了让咱们能更好的理解图表。
plt.figure(figsize=(7,4)) # 分别为两条数据添加图例 plt.plot(y[:,0],lw=1.5,label='1st') plt.plot(y[:,1],lw=1.5,label='2nd') plt.plot(y,"rd") plt.grid(True) # 网格设置 plt.legend(loc=0) # 图例标签位置设置 plt.axis('tight') plt.xlabel('index') plt.ylabel('value') plt.title('test1')
经过刚才的操做咱们也可以发现,虽然咱们传进的是一个ndarray数组,可是它是一个二维数组,因此咱们要想将数据所有展现出来就可使用上面那种方式,可是上面的数据刻度都是相差无几的,若是说某一维的数据很是大,而另一维的则都是一些小数据,那要怎么办呢。
首先先来看看会形成什么样的结果:
y[:,0] = y[:,0] * 100 plt.figure(figsize=(7,4)) plt.plot(y[:,0],lw=1.5,label='1st') plt.plot(y[:,1],lw=1.5,label='2nd') plt.plot(y,"rd") plt.grid(True) # 网格设置 plt.legend(loc=0) # 图例标签位置设置 plt.axis("tight") plt.xlabel('index') plt.ylabel('value') plt.title("test2")
运行结果:
第一个数据因为数据量大,因此在这么大的刻度上依然能够将数据显示比较好辨认,而第二个数据就会由于这个缘由看起来像一条直线,咱们已经不能经过图像观察它的数据效果。
处理方式:
首先先来看第一种方法:
fig,ax1 = plt.subplots() # 第一组数据 plt.plot(y[:,0],lw=1.5,label='1st') plt.plot(y[:,0],"rd") plt.grid(True) # 网格设置 plt.legend(loc=8) # 图例标签位置设置 plt.axis("tight") plt.xlabel('index') plt.ylabel('value 1st') # 第二组数据 ax2 = ax1.twinx() plt.plot(y[:,1],'g',lw=1.5,label='2nd') plt.plot(y[:,1],'bd') plt.legend(loc=0) plt.ylabel("value 2nd") plt.title("test3")
运行结果:
这是经过在一张图上经过不一样的刻度来展现不一样的数据。
第二种方式:
plt.figure(figsize=(7,5)) plt.subplot(211) # 指定子图位置,三个参数:行数、列数、子图编号 plt.plot(y[:,0],lw=1.5,label='1st') plt.plot(y[:,0],"rd") plt.grid(True) # 网格设置 plt.legend(loc=0) # 图例标签位置设置 plt.axis("tight") plt.ylabel('value') plt.title("test4") plt.subplot(212) plt.plot(y[:,1],'g',lw=1.5,label='2nd') plt.plot(y[:,1],'rd') plt.grid(True) # 网格设置 plt.legend(loc=0) # 图例标签位置设置 plt.axis("tight") plt.xlabel('index') plt.ylabel('value')
运行结果:
以上操做都是经过折线图来实现的,可是在matplotlib当中还支持不少种类型的图像。
函数 | 说明 |
---|---|
plt.plot(x,y,fmt) | 坐标系 |
plt.boxplot(data,notch,position) | 箱型图 |
plt.bar(left,height,width,bottom) | 柱状图 |
plt.barh(width,bottom,left,height) | 横向柱状图 |
plt.polar(theta,r) | 极坐标系 |
plt.pie(data,explode) | 饼图 |
plt.psd(x,NFFT=256,pad_to,Fs) | 功率谱密度图 |
plt.specgram(x,NFFT=256,pad_to,F) | 谱图 |
plt.cohere(x,y,NFFT=256,Fs) | X-Y相关性函数 |
plt.scatter(x,y) | 散点图 |
plt.step(x,y,where) | 步阶图 |
plt.hist(x,bins,normed) | 直方图 |
# 柱状图 data = [12,34,23,54] labels = ['Jan','Fed','Mar','Apr'] plt.xticks([0,1,2,3],labels) # 设置x轴刻度 plt.bar([0,1,2,3],data)
# 横向柱状图 data = [12,34,23,54] labels = ['Jan','Fed','Mar','Apr'] plt.yticks([0,1,2,3],labels) plt.barh([0,1,2,3],data)
# DataFrame数组图 df = pd.DataFrame({ 'Jan':pd.Series([1,2,3],index=['a','b','c']), 'Fed':pd.Series([4,5,6],index=['b','a','c']), 'Mar':pd.Series([7,8,9],index=['b','a','c']), 'Apr':pd.Series([2,4,6],index=['b','a','c']) }) df.plot.bar() # 水平柱状图,将每一行中的值分组到并排的柱子中的一组 df.plot.barh(stacked=True,alpha=0.5) # 横向柱状图,将每一行的值堆积到一块儿
饼图用于表示不一样类别的占比状况,经过弧度大小来对比各类类别。饼图将一个圆饼按照类别的占比划分红多个区块,整个圆饼表明数据的总量,每一个区块表示该分类占整体的比例大小。饼图能够比较清楚地反映出部分与部分、部分与总体之间的比例关系,易于比例每一个类别相对于总数的大小。但在对于面积大小的不敏感的状况下效果不是很好。
# 饼图 plt.pie([10,20,30,40],labels=list('abcd'),autopct="%.2f%%",explode=[0.1,0,0,0]) # 饼图 plt.axis("equal") plt.show()
对于二维绘图,线图和点图多是金融学中的最重要的,刚才在上面线图已经有过简单接触,接下来主要介绍的就是点图了,这种图表类型可用于绘制一个金融时间序列的收益和另外一个时间序列收益的对比。
散点图又称为散点分布图,是利用坐标点(散点)的分布形态反映特征间的相关关系的一种图形。实际中通常使用二维散点图,经过散点的疏密程度和变化趋势表示两个特征之间的关系。
主要有如下三个特色:
1)表现特征之间是否存在数值或者数量的关联趋势,关联趋势是线性的仍是非线性的。
2)凸显出离群点(异常点)及其对总体的影响
3)数据量越大能发挥的做用越好。
基本语法格式:
matplotlib.pyplot.scatter(x,y,s=None,c=None,marker=None,cmap=None,norm=None,vmin=None, vmax=None,alpha=None,linewidths=None,verts=None,edgecolors=None,*,data=None,**kwargs, )
函数参数相关说明:
参数名称 | 描述 |
---|---|
x,y | 接收array,表示x轴和y轴对应的·数据。无默认值 |
s | 接收数值或者一维array,指定点的大小,一维array表示每一个点的大小。默认为None |
c | 接收颜色或者一堆array,指定点的颜色,一维array表示每一个点的颜色。默认为None |
marker | 接收特定str,表示绘制的点的形状。默认为None |
alpha | 接收0~1的小数,表示点的透明度。默认为None |
y = np.random.standard_normal((1000,2)) # 生成正态分布的二维随机数组 c = np.random.randint(0,10,len(y)) plt.figure(figsize=(7,5)) plt.scatter(y[:,0],y[:,1],c=c,marker='o') # 经过scatter函数加入第三维数据 plt.colorbar() # 经过彩条对不用演示数据进行描述 plt.grid(True) plt.xlabel('1st') plt.ylabel('2nd') plt.title("test5")
运行结果:
plt.figure(figsize=(7,4)) plt.hist(y,label=['1st','2nd'],bins=25) plt.grid(True) # 网格设置 plt.legend(loc=0) # 图例标签位置设置 plt.axis("tight") plt.xlabel('index') plt.ylabel('frequency') plt.title("test6")
运行结果:
直方图是金融应用当中比较经常使用的图表类型,接下来主要介绍一下plt.hist的使用方法以及它的参数说明
plt.hist( ['x', 'bins=None', 'range=None', 'density=None', 'weights=None', 'cumulative=False', 'bottom=None', "histtype='bar'", "align='mid'", "orientation='vertical'", 'rwidth=None', 'log=False', 'color=None', 'label=None', 'stacked=False', 'normed=None', '*', 'data=None', '**kwargs'], )
参数 | 描述 |
---|---|
x | 列表对象,ndarray对象 |
bins | 数据组(bin)数 |
range | 数据组的上界和下界 |
normed | 规范化为整数1 |
weights | x轴上每一个值的权重 |
cumulative | 每一个数据组包含较低组别的计数 |
histtype | 选项:bar,barstacked,step,stepfilled |
align | 选项:left,mid,right |
orientation | 选项:horizontal,vertical |
rwidth | 条块的相对宽度 |
log | 对数刻度 |
color | 每一个数据集的颜色 |
label | 标签所用的字符串或者字符串序列 |
stacked | 堆叠多个数据集 |
箱型图能够简洁地概述数据集的特性,能够很容易的比较多个数据集。
fig,ax = plt.subplots(figsize=(7,4)) plt.boxplot(y) plt.grid(True) plt.setp(ax,xticklabels=['1st','2nd']) plt.xlabel('data set') plt.ylabel("value") plt.title("test7")
运行结果:
以图形的方式说明某个下限和上限之间函数图像下方区域的面积,简而言之就是,从下限到上限之间函数积分值
# 第一步:定义求取积分的函数 def func(x): return 0.5 * np.exp(x) + 1 # 指数函数 # 第二步:定义积分区间,生成必须得数值 a, b = 0.5 , 1.5 x = np.linspace(0,2) y = func(x) # 第三步:绘制函数图像 fig, ax = plt.subplots(figsize=(7,5)) plt.plot(x,y,'b',linewidth=2) plt.ylim(ymin=0) # 第四步:使用Polygon函数生成阴影部分,表示积分面积 Ix = np.linspace(a, b) Iy = func(Ix) verts = [(a,0)] + list(zip(Ix, Iy)) + [(b, 0)] poly = plt.Polygon(verts,facecolor='0.7',edgecolor='0.5') ax.add_patch(poly) # 第五步:使用plt.text和plt.figtext在图表上添加数学公式和一些坐标轴标签 plt.text(0.5 * (a + b),1,r"$\int_a^b f(x)\mathrm{d}x$",horizontalalignment='center',fontsize=20) plt.figtext(0.9, 0.075, "$x$") plt.figtext(0.075,0.9,"$f(x)$") # 第六步:设置刻度标签以及添加网格 ax.set_xticks((a, b)) ax.set_xticklabels(('$a$', '$b$')) ax.set_yticks([func(a), func(b)]) ax.set_yticklabels(('$f(a)$', '$f(b)$')) plt.grid(True)
运行结果:
[ \int_a^bf(x)dx ]
以上绘制出来的数据都是一些经常使用的数据图像,可是在金融行业会有一些独有的图像,以前在matplotlib当中还提供了少许的特殊金融图表,这些图表,就例如烛柱图,主要是用于可视化历史股价数据或者相似的金融时间序列。
如今这个方法已经独立出来自成一个模块了*mpl_finance
*
anaconda中mpl_finance安装方式:
将https://github.com/matplotlib/mpl_finance/archive/master.zip下载到本地
在anaconda环境中运行命令:pip install 本地路径/mpl_finance-master.zip
调用方式:
import mpl_finance as mpf
import matplotlib.pyplot as plt import mpl_finance as mpf import tushare as ts import pandas as pd from matplotlib.pylab import date2num from dateutil.parser import parse import numpy as np import matplotlib.dates as mdate data = ts.get_k_data('000001') # 获取平安的k线数据 data_of = data[:60] # 只取前60份数据 fig, ax = plt.subplots(figsize=(15, 7)) __colorup__ = "r" __colordown__ = "g" # 图表显示中文 plt.rcParams['font.family'] = ['sans-serif'] plt.rcParams['font.sans-serif'] = ['SimHei'] qutotes = [] for index, (d, o, c, h, l) in enumerate( zip(data_of.date, data_of.open, data_of.close, data_of.high, data_of.low)): # 时间须要经过date2num转换为浮点型 d = date2num(parse(d)) # 日期,开盘,收盘,最高,最低组成tuple对象val val = (d, o, c, h, l) # 加val加入qutotes qutotes.append(val) # 使用mpf.candlestick_ochl进行蜡烛绘制,ochl表明:open,close,high,low mpf.candlestick_ochl(ax, qutotes, width=0.8, colorup=__colorup__,colordown=__colordown__) #设置x轴为时间格式,不然x轴显示的将是相似于‘736268’这样的转码后的数字格式 ax.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d')) plt.xticks(pd.date_range('2016-08-01','2016-11-30',freq='W'),rotation=60) plt.grid(True) # 网格设置 plt.title("k线图") ax.autoscale_view() ax.xaxis_date()
plt.savafig('文件名.拓展名')
文件类型是经过文件扩展名推断出来的。所以,若是你使用的是.pdf,就会获得一个PDF文件。
plt.savefig('123.pdf')
savefig并不是必定要写入磁盘,也能够写入任何文件型的对象,好比BytesIO:
from io import BytesIO buffer = BytesIO() plt.savefig(buffer) plot_data = buffer.getvalue()
参数 | 说明 | |
---|---|---|
fname | 含有文件路径的字符串或者Python的文件型对象。 | |
dpi | 图像分辨率,默认为100 | |
format | 显示设置文件格式("png","jpg","pdf","svg","ps",...) | |
facecolor、edgecolor | 背景色,默认为"W"(白色) | |
bbox_inches | 图表须要保存的部分。设置为”tight“,则尝试剪除图表周围空白部分 |
原文出处:https://www.cnblogs.com/guapitomjoy/p/12212562.html