美文网首页
python matplotlib库的使用

python matplotlib库的使用

作者: Think123DO | 来源:发表于2017-01-09 11:01 被阅读0次

    matplotlib画折线图
    (一)matplotlib配置属性
    以一个例子开始:
    假如我们想做一个上证50指数历史最高价、收盘价走势折线图。
    首先,需要取得构建图像的数据,也就是获得坐标轴的(x,y)。这里我们从Tushare获取数据。
    引入tushare模块

    import tushare as ts
    #导入上证50指数数据
    #两个日期之间的前复权数据
    data = ts.get_hist_data('sz50',start='2016-11-01',end='2016-12-30')
    data = data.sort_index()
    

    引入matplotlib模块

    import matplotlibimport matplotlib.pyplot as plt
    #为了防止出现中文乱码,在这里进行一下设置
    font = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
    

    获取横纵坐标

    from matplotlib.pylab import datestr2num
    #使用matplotlib.pylab的datestr2num方法,将时间字符串转换为数字(这里纵坐标想要传入日期数据,同时我们也知道横坐标需要传入数字型数据,而我们获取的数据日期格式为字符串)
     #横坐标
    x_date = [datestr2num(i) for i in data.index] 
    #纵坐标
    y_date_close = data['close']
    y_date_high = data['high']
    

    现在横坐标已经有了,下面我们可以开始画图了,首先我们要有一张“画布”,定义一个figure对象,即图形对象。

    plt.figure(figsize=(10,5))
    
    

    画折线

    plt.plot_date(x_date,y_date_close,'-',label="closing price")
    plt.plot_date(x_date,y_date_high,'-',label="peak price")
    
    
    简陋的折线图

    折线画好了,为了使图像更加直观,需要加上图示,标签,标题等信息,以便观看。

    #定义图像标题
    plt.title("上证50指数历史最高价、收盘价走势折线图",fontproperties=font,fontsize = 10)
    #坐标轴标签
    plt.xlabel("时间",fontproperties=font)
    plt.xticks(rotation=0)   #可以使坐标刻度倾斜,这里倾斜0度
    plt.ylabel("指数",fontproperties=font)
    #加入图示
    plt.legend()
    
    增加了信息后的折线图.png

    图像做好了,但看着实在是。。。不忍直视!
    接下来美化一下。
    在这里,我们使用了plt.style.use来设置图形的风格为ggplot。
    matplotlib官方提供了五种不同的图形风格,分别是:bmh、ggplot、dark_background、fivethirtyeight和grayscale。

    #定义图形风格
    plt.style.use('ggplot')
    # 添加图表网格线
    plt.grid(True)
    
    美化后依然丑陋的图像.png

    为了便于观看,修改了部分参数(将标题字体大小设置为50)
    示例代码:

    import matplotlibimport matplotlib.pyplot as plt
    from matplotlib.pylab import datestr2num
    import tushare as ts
    font = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
    data = ts.get_hist_data('sz50',start='2016-11-01',end='2016-12-30')
    data = data.sort_index()
    x_date = [datestr2num(i) for i in data.index]
    y_date_close = data['close']
    y_date_high = data['high']
    plt.style.use('ggplot')
    plt.figure(figsize=(10,5))
    plt.plot_date(x_date,y_date_close,'-',label="closing price")
    plt.plot_date(x_date,y_date_high,'-',label="peak price")
    plt.title("上证50指数历史最高价、收盘价走势折线图",fontproperties=font,fontsize=50)
    plt.xlabel("时间",fontproperties=font)
    plt.xticks(rotation=0)
    plt.ylabel("指数",fontproperties=font)
    plt.legend()
    plt.grid(True)
    plt.show()
    

    一定要加上plt.show(),否则无法显示图像!!!重要的事情说三遍!

    图像会画了,来搞个稍微复杂点的图吧!
    (二)matplotlib
    (三)matplotlib实践
    天天听别人说低价股,甚至简单的将三元以下的股票说成低价股,完全忽略股票的内在价值不谈,虽然看着有点扯淡,但是不防拿来实践一下,找出大盘股低于三元的股票分析一下。

    import tushare as ts
    # 获取实时行情数据
    hq = ts.get_today_all()
    # 节选出股票代码code、名称name、涨跌幅changepercent、股价trade
    hq = hq[['code','name','changepercent','trade']]
    # 筛选出当前股价高于0元低于3元的股票信息
    mins = hq.trade>0.00
    maxs = hq.trade<=2.99
    allselect = mins & maxs
    #print(allselect)
    data = hq[allselect].sort_values(by = 'trade')
    #print(data)
    code_list = []
    for c in data.code:   
        if c[0] != "0":        
            code_list.append(c)
    #print(code_list)
    sh_hist_data = ts.get_hist_data(code='sh',start='2014-12-01',end='2016-12-01')
    sh_hist_data = sh_hist_data[['open','high','close','low','volume','price_change','p_change']].sort_index()
    import matplotlib.pyplot as plt
    from matplotlib.pylab import datestr2num
    import matplotlib
    # 设置中文字体
    font = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
    dates = [datestr2num(i) for i in sh_hist_data.index]
    plt.figure(figsize=(40,30))
    # 新建一个子图,绘制上证指数走势
    plt.subplot(311)
    plt.title("2014年12月1日至2017年1月9日上证指数最低价走势",fontproperties=font,fontsize=10)
    plt.xticks(rotation=0,fontsize=10)
    plt.yticks(fontsize=10)
    plt.plot_date(dates,sh_hist_data.low,'-',linewidth=1.5)
    plt.grid(True)
    # 遍历低价股代码列表,绘制股价走势
    #由于折线太多,在这里分开遍历。
    for i in code_list[0:5]:    
        hist_data = ts.get_hist_data(code=i,start='2014-12-01',end='2017-1-09')  
        code_data = hist_data[['open','high','close','low','volume','price_change','p_change']].sort_index()
        dates = [datestr2num(t) for t in code_data.index]
        plt.subplot(312)
        plt.title("2014年12月1日至2017年1月9日各低价股最低价走势",fontproperties=font,fontsize=10)
        plt.xticks(rotation=0,fontsize=10)
        plt.yticks(fontsize=10)
        plt.plot_date(dates,code_data['low'],'-',linewidth=1.5,label=i)
        plt.legend(loc=1,fontsize=10)
        plt.grid(True)
    for i in code_list[5:]:
        hist_data = ts.get_hist_data(code=i,start='2014-12-01',end='2017-1-09')
        code_data = hist_data[['open','high','close','low','volume','price_change','p_change']].sort_index()
        dates = [datestr2num(t) for t in code_data.index]
        plt.subplot(313)
        plt.title("2014年12月1日至2017年1月9日各低价股最低价价走势",fontproperties=font,fontsize=10)
        plt.xticks(rotation=0,fontsize=10)
        plt.yticks(fontsize=10)
        plt.plot_date(dates,code_data['low'],'-',linewidth=1.5,label=i)
        plt.legend(loc=1,fontsize=10)
        plt.grid(True)
    plt.show()
    
    对比图.png

    至此,我们得到了上证大盘和各低价股的走势对比图
    料已备好。。。。。。可以发挥想象力了

    相关文章

      网友评论

          本文标题:python matplotlib库的使用

          本文链接:https://www.haomeiwen.com/subject/wwncbttx.html