python 绘制走势图

1.工具

matplotlib

numpy

2.matplotlib使用

import matplotlib.pyplot as plt #plt用于显示图片
import matplotlib.image as mping #mping用于读取图片
import datetime as dt
import matplotlib.dates as mdates
from pylab import *

def draw_trend_chart(dates,y):
    mpl.rcParams[‘font.sans-serif‘] = [‘SimHei‘] #指定默认字体
    mpl.rcParams[‘axes.unicode_minus‘] = False #解决保存图像是负号‘-‘显示为方块的问题
    
    x = [dt.datetime.strptime(d,‘%Y/%m/%d‘).date() for d in dates]
    #plt.figure(figsize=(8,8))
    plt.figure()

#plt.gca().xaxis.set_major_formatter(mdates.DateFormatter(‘%m/%d/%Y‘))
    #plt.gca().xaxis.set_major_locator(mdates.DayLocator())
    #plt.plot(x,y,"r--",linewidth=2)
    plt.plot(x,y,"r",linewidth=1)
    #plt.gcf().autofmt_xdate()
    
    #plt.xlabel("DATE") #x轴标签
    plt.ylabel("WEIGHT") #y轴标签
    plt.title("MY HEALTH TRACKING")#标题

plt.savefig("liuyang.png") #保存图片名称

lena = mping.imread(‘liuyang.png‘)  #读取图片文件信息
    lena.shape #(512,512,3)

plt.imshow(lena) #显示图片
    plt.axis(‘off‘) #不显示坐标轴
    plt.title("")
    plt.show() #显示

def get_weight_data(filename):
    time = []
    weight = []
    fileContent=open(filename,"r")
    for eachline in fileContent:
        eachData = eachline.strip(‘\n‘).split(",")
        if eachData[-1].strip() ==‘‘:
            continue
        else:
            time.append(eachData[0])
            weight.append(eachData[1])
    return [time, weight]

data = get_weight_data("data.csv")
draw_trend_chart(data[0],data[1])

3.numpy

.numpy数组

numpy是常用的数据处理库,我将000001.SZ的股价数据(时间范围从20150101到20150930)导入到csv中,然后通过numpy读取得到日期和价格数组。csv文件中包含了两列,日期和价格,分割符号为",",读取过程代码如下:

dates, close = np.loadtxt(filename,delimiter=",", unpack= True, converters={0:mdates.strpdate2num(‘%Y-%m-%d‘)})

  numpy的loadtxt方法:设定了文件中的分隔符号为“,”,unpack是否将数组拆分,True为拆分,即:得到两个数组分别表示日期和收盘价格,converters是将日期类型的字符串转为数组,因为numpy规定其数组中的类型需要一致。

2.绘制基础走势图

通过numpy得到日期和收盘价格之后,参照先前的示例,通过plot方法进行绘制:

ax1.plot(dates,close)

  图表如下所示:

在上图中,x轴通过数值标识,而不是日期类型。因为我们通过numpy构造数组时,日期按照数值类型存储,可以通过如下方法转换为日期类型:

    ax1.xaxis.set_major_locator(mdates.DayLocator(bymonthday=range(1,32), interval=15))
    ax1.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d"))
      for label in ax1.xaxis.get_ticklabels():
       label.set_rotation(45)

  X-轴设置主要刻度locator为每日刻度,格式为:DateFormatter("%Y-%m-%d"),每日刻度从第1日到第31日,间隔为15日。图表如下所示:

其中,对于X-轴上面的每个ticker标签都向右倾斜45度,这样标签不会重叠在一起便于查看。

也可以按照每月进行显示,X-轴设置主要刻度为每月刻度,格式为:DateFormatter("%Y-%m"),转换代码如下:

    ax1.xaxis.set_major_locator(mdates.MonthLocator())
     ax1.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m"))

  图表如下所示:

3.图形边框调整

细心的读者可能会发现,在上图中底部(bottom)处的日期标签,显示不完整。此时可以点击【configure subplots】按钮,调整左右和上下边框,然后保存即可。图表如下所示:

也可以通过subplots_adjust方法对于边框进行调整:

    plt.subplots_adjust(bottom=0.13,top=0.95)

4.绘制价格平均线

在前面的示例中绘制了基本的股票走势图,本节我们利用ta-lib【4】证券技术指标库,绘制5日和10日价格平均线。

ta-lib中提供了方法talib.SMA得到价格简单平均线,timeperiod为时间参数,timeperiod=5为五日均线,基于上图增加五日和十日均线,代码如下:

    sma5 = talib.SMA(close, timeperiod = 5)
     ax1.plot(dates,sma5)
      sma10 = talib.SMA(close, timeperiod = 10)
     ax1.plot(dates,sma10)

  其中,sma5和sma10均为numpy数组。

图表如下所示:

在坐标轴中有三条曲线,matplotlib会自动改变线条颜色,此时如果没有说明并不方便使用,可以在右上角增加图例,表明各线条所代表的含义,并增加图表的网格效果,代码如下:

plt.legend((‘daily‘, ‘SMA5‘, ‘SMA10‘))
 plt.grid(True)

  图表如下所示:

4.http://www.cnblogs.com/bradleon/p/6832867.html

时间: 2024-10-08 19:35:02

python 绘制走势图的相关文章

使用Python绘制漫步图

代码如下: 1 import matplotlib.pyplot as plt 2 from random import choice 3 class RandomWalk(): 4 def __init__(self,num_points=5000): 5 self.num_points=num_points 6 self.x_values=[0] 7 self.y_values=[0] 8 def fill_walk(self): 9 while len(self.x_values)<sel

用python绘制趋势图

import matplotlib.pyplot as plt #plt用于显示图片 import matplotlib.image as mping #mping用于读取图片 import datetime as dt import matplotlib.dates as mdates from pylab import * def draw_trend_chart(dates,y): mpl.rcParams['font.sans-serif'] = ['SimHei'] #指定默认字体 m

Python中使用matplotlib 如何绘制折线图?

本文和大家分享的主要是python开发中matplotlib 绘制折线图相关内容,一起来看看吧,希望对大家学习和使用这部分内容有所帮助. matplotlib 1.安装matplotlib ① linux系统安装 # 安装matplotlib模块 $ sudo apt-get install python3-matplotlib# 如果是python2.7 执行如下命令 $ sudo apt-get install python-matplotlib# 如果你安装较新的Python,安装模块一乐

Html5 canvas 绘制彩票走势图

因需要 要实现一个类似彩票走势图的功能,初次学Html5 ,很多地方不明白,前段时间也发帖请教过这个问题,也是没给个明确说话,在网上搜了很多,也没有实现的例子,今天仔细研究了下,发现其实也不是很难,现将代码贴出来,共同学习! 先来一张效果图: 实现的代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <me

【python】pandas &amp; matplotlib 数据处理 绘制曲面图

Python matplotlib模块,是扩展的MATLAB的一个绘图工具库,它可以绘制各种图形 建议安装 Anaconda后使用 ,集成了很多第三库,基本满足大家的需求,下载地址,对应选择python 2.7 或是 3.5 的就可以了: https://www.continuum.io/downloads#windows 脚本默认执行方式:              1.获取当前文件夹下的1.log文件              2.将数据格式化为矩阵              3.以矩阵的列

利用python进行折线图,直方图和饼图的绘制

我用10个国家某年的GDP来绘图,数据如下: labels   = ['USA', 'China', 'India', 'Japan', 'Germany', 'Russia', 'Brazil', 'UK', 'France', 'Italy'] quants   = [15094025.0, 11299967.0, 4457784.0, 4440376.0, 3099080.0, 2383402.0, 2293954.0, 2260803.0, 2217900.0, 1846950.0] 首

Python绘制语谱图+时域波形

1 """Python绘制语谱图""" 2 """Python绘制时域波形""" 3 4 # 导入相应的包 5 import numpy, wave 6 import matplotlib.pyplot as plt 7 import numpy as np 8 import os 9 10 filepath = 'G:/实战培训/Python生成语谱图/ReNoise/Prim10/'

[转]用Matplotlib绘制 折线图 散点图 柱状图 圆饼图

Matplotlib是一个Python工具箱,用于科学计算的数据可视化.借助它,Python可以绘制如Matlab和Octave多种多样的数据图形. 安装 Matplotlib并不是Python的默认组件,需要额外安装. 官方下载地址 http://matplotlib.org/downloads.html 必须下载与自己的Python版本,操作系统类型对应的安装包.如Windows 64位+Python3.3,应该下载matplotlib-1.3.1.win-amd64-py3.3.exe 第

使用python绘制常用的图表

使用python绘制常用的图表 本文介绍如果使用python汇总常用的图表,与Excel的点选操作相比,用python绘制图表显得比较比较繁琐,尤其提现在对原始数据的处理上.但两者在绘制图表过程中的思路大致相同,Excel中能完成的工作python大多也能做到.为了更清晰的说明使用python绘制图表的过程,我们在汇总图表的代码中进行注解,说明每一行代码的具体作用.并在文章的最后给出了自定义字体和图表配色的对应表. 准备工作 ? 1 2 3 4 5 import numpy as np impo