精华内容
下载资源
问答
  • matplotlib画K线

    2020-12-22 15:43:55
    实习期间帮公司的交易平台做K线图部分,看到了peakgao大佬的高仿同花顺的代码:https://blog.csdn.net/PeakGao/article/details/105634317 大佬没有直接使用mpl_finance,看上去效果很棒。我就在后面加了键鼠交互的...

    实习期间帮公司的交易平台做K线图部分,看到了peakgao大佬的高仿同花顺的代码:https://blog.csdn.net/PeakGao/article/details/105634317

    大佬没有直接使用mpl_finance,看上去效果很棒。我就在后面加了键鼠交互的内容。这不是用在公司平台上的版本,只是很粗糙的添加了交互功能,代码里还有不少问题。

    增加功能:鼠标移动显示数值,鼠标滚轮缩小放大,方向键左右移动。

    代码部分因为不需要所以把MACD和KDJ注释掉了:

    # -*- coding:utf-8 -*-
    import tushare as ts # 获取股票数据用
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import matplotlib.ticker as ticker # 用于日期刻度定制
    # import mpl_finance as mpf
    # 注释了上面一行的旧版,新版是mplfinance,少了一个下划线,运行没警告,新版绘制蜡烛图性能应该更高,但是限得比较死,
    # 不好加子图,后面我们把关键代码拿出来自己绘制
    from mplfinance import original_flavor as mpf # 用新版库里面的旧版实现(跟mpl_finance一模一样)
    from matplotlib import colors as mcolors  # 用于颜色转换成渲染时顶点需要的颜色格式
    from matplotlib.collections import LineCollection, PolyCollection # 用于绘制直线集合和多边形集合
    # import tools # 计算MACD和KDJ(没有使用talib,有缺陷)
     
    # def calc_macd(df, fastperiod=12, slowperiod=26, signalperiod=9):
    #     ewma12 = df['close'].ewm(span=fastperiod,adjust=False).mean()
    #     ewma26 = df['close'].ewm(span=slowperiod,adjust=False).mean()
    #     df['dif'] = ewma12-ewma26
    #     df['dea'] = df['dif'].ewm(span=signalperiod,adjust=False).mean()
    #     df['bar'] = (df['dif']-df['dea'])*2
    #     # df['macd'] = 0
    #     # series = df['dif']>0
    #     # df.loc[series[series == True].index, 'macd'] = 1
    #     return df
    
    # def calc_kdj(df):
    #     low_list = df['low'].rolling(9, min_periods=9).min()
    #     low_list.fillna(value=df['low'].expanding().min(), inplace=True)
    #     high_list = df['high'].rolling(9, min_periods=9).max()
    #     high_list.fillna(value=df['high'].expanding().max(), inplace=True)
    #     rsv = (df['close'] - low_list) / (high_list - low_list) * 100
    #     df['k'] = pd.DataFrame(rsv).ewm(com=2).mean()
    #     df['d'] = df['k'].ewm(com=2).mean()
    #     df['j'] = 3 * df['k'] - 2 * df['d']
     
    #     # df['kdj'] = 0
    #     # series = df['k']>df['d']
    #     # df.loc[series[series == True].index, 'kdj'] = 1
    #     # # df.loc[series[(series == True) & (series.shift() == False)].index, 'kdjcross'] = 1
    #     # # df.loc[series[(series == False) & (series.shift() == True)].index, 'kdjcross'] = -1
    #     return df
    
    # 获取数据
    df = ts.get_k_data('603986', '2019-09-01') # 获取日K线数据
    df.drop('code', axis=1, inplace=True) # 剔除多余的列
    # calc_macd(df) # 计算MACD值,数据存于DataFrame中
    # calc_kdj(df) # 计算KDJ值,数据存于DataFrame中
    y0 = df.iloc[:,0].tolist()
    columns = df.columns
    vmax = max(df['volume'].tolist())
    # df = df[-150:] # 取最近的N天测试,列顺序为 date,open,close,high,low,volume,dif,dea,bar,k,d,j
     
    # 日期转换成整数序列
    date_tickers=df.date.values
    df.date = range(0, len(df)) # 日期改变成序号
    matix = df.values # 转换成绘制蜡烛图需要的数据格式(date, open, close, high, low, volume)
    xdates = matix[:, 0] # X轴数据(这里用的天数索引)
     
    # 设置外观效果
    plt.rc('font', family='Microsoft YaHei') # 用中文字体,防止中文显示不出来
    plt.rc('figure', fc='k') # 绘图对象背景图
    plt.rc('text', c='#d43221') # 文本颜色
    plt.rc('axes', axisbelow=True, xmargin=0, fc='k', ec='#800000', lw=1.5, labelcolor='#800000', unicode_minus=False) # 坐标轴属性(置底,左边无空隙,背景色,边框色,线宽,文本颜色,中文负号修正)
    plt.rc('xtick', c='#d43221') # x轴刻度文字颜色
    plt.rc('ytick', c='#d43221') # y轴刻度文字颜色
    plt.rc('grid', c='#800000', alpha=0.9, ls=':', lw=0.8) # 网格属性(颜色,透明值,线条样式,线宽)
    plt.rc('lines', lw=0.8) # 全局线宽
     
    # 创建绘图对象和4个坐标轴
    fig = plt.figure(figsize=(16, 8))
    left, width = 0.05, 0.9
    ax1 = fig.add_axes([left, 0.35, width, 0.6]) # left, bottom, width, height
    ax2 = fig.add_axes([left, 0.05, width, 0.3], sharex=ax1) # 共享ax1轴
    # ax3 = fig.add_axes([left, 0.25, width, 0.2], sharex=ax1) # 共享ax1轴
    # ax4 = fig.add_axes([left, 0.05, width, 0.2], sharex=ax1) # 共享ax1轴
    plt.setp(ax1.get_xticklabels(), visible=False) # 使x轴刻度文本不可见,因为共享,不需要显示
    # plt.setp(ax2.get_xticklabels(), visible=False) # 使x轴刻度文本不可见,因为共享,不需要显示
    # plt.setp(ax3.get_xticklabels(), visible=False) # 使x轴刻度文本不可见,因为共享,不需要显示
     
    # 绘制蜡烛图
    def format_date(x, pos=None): return '' if x<0 or x>len(date_tickers)-1 else date_tickers[int(x)] # 日期格式化函数,根据天数索引取出日期值
    ax1.xaxis.set_major_formatter(ticker.FuncFormatter(format_date)) # 设置自定义x轴格式化日期函数
    ax1.xaxis.set_major_locator(ticker.MultipleLocator(max(int(len(df)/8), 5))) # 横向最多排8个左右的日期,最少5个,防止日期太拥挤
    # mpf.candlestick_ochl(ax1, matix, width=0.5, colorup='#ff3232', colordown='#54fcfc')
    # # 下面这一段代码,替换了上面注释的这个函数,因为上面的这个函数达不到同花顺的效果
    opens, closes, highs, lows = matix[:, 1], matix[:, 2], matix[:, 3], matix[:, 4] # 取出ochl值
    avg_dist_between_points = (xdates[-1] - xdates[0]) / float(len(xdates)) # 计算每个日期之间的距离
    delta = avg_dist_between_points / 4.0 # 用于K线实体(矩形)的偏移坐标计算
    barVerts = [((date - delta, open), (date - delta, close), (date + delta, close), (date + delta, open)) for date, open, close in zip(xdates, opens, closes) ] # 生成K线实体(矩形)的4个顶点坐标
    rangeSegLow   = [ ((date, low), (date, min(open, close))) for date, low, open, close in zip(xdates, lows, opens, closes) ] # 生成下影线顶点列表
    rangeSegHigh  = [ ((date, high), (date, max(open, close))) for date, high, open, close in zip(xdates, highs, opens, closes) ] # 生成上影线顶点列表
    rangeSegments = rangeSegLow + rangeSegHigh # 上下影线顶点列表
    cmap = {True: mcolors.to_rgba('#000000', 1.0), False: mcolors.to_rgba('#54fcfc', 1.0)} # K线实体(矩形)中间的背景色(True是上涨颜色,False是下跌颜色)
    inner_colors = [ cmap[opn < cls] for opn, cls in zip(opens, closes) ]  # K线实体(矩形)中间的背景色列表
    cmap = {True: mcolors.to_rgba('#ff3232', 1.0), False: mcolors.to_rgba('#54fcfc', 1.0)} # K线实体(矩形)边框线颜色(上下影线和后面的成交量颜色也共用)
    updown_colors = [ cmap[opn < cls] for opn, cls in zip(opens, closes) ] # K线实体(矩形)边框线颜色(上下影线和后面的成交量颜色也共用)列表
    ax1.add_collection(LineCollection(rangeSegments, colors=updown_colors, linewidths=0.5, antialiaseds=False)) # 生成上下影线的顶点数据(颜色,线宽,反锯齿,反锯齿关闭好像没效果)
    ax1.add_collection(PolyCollection(barVerts, facecolors=inner_colors, edgecolors=updown_colors, antialiaseds=False, linewidths=0.5)) # 生成多边形(矩形)顶点数据(背景填充色,边框色,反锯齿,线宽)
     
    # 绘制均线
    mav_colors = ['#ffffff', '#d4ff07', '#ff80ff', '#00e600', '#02e2f4', '#ffffb9', '#2a6848'] # 均线循环颜色
    mav_period = [5, 10, 20, 30, 60, 120, 180] # 定义要绘制的均线周期,可增减
    n = len(df)
    for i in range(len(mav_period)):
        if n >= mav_period[i]:
            mav_vals = df['close'].rolling(mav_period[i]).mean().values
            ax1.plot(xdates, mav_vals, c=mav_colors[i%len(mav_colors)], label='MA'+str(mav_period[i]))
    ax1.set_title('K线图') # 标题
    ax1.grid(True) # 画网格
    ax1.legend(loc='upper right') # 图例放置于右上角
    ax1.xaxis_date() # 好像要不要效果一样?
     
    # 绘制成交量和成交量均线(5日,10日)
    # ax2.bar(xdates, matix[:, 5], width= 0.5, color=updown_colors) # 绘制成交量柱状图
    barVerts = [((date - delta, 0), (date - delta, vol), (date + delta, vol), (date + delta, 0)) for date, vol in zip(xdates, matix[:,5]) ] # 生成K线实体(矩形)的4个顶点坐标
    ax2.add_collection(PolyCollection(barVerts, facecolors=inner_colors, edgecolors=updown_colors, antialiaseds=False, linewidths=0.5)) # 生成多边形(矩形)顶点数据(背景填充色,边框色,反锯齿,线宽)
    if n>=5: # 5日均线,作法类似前面的均线
        vol5 = df['volume'].rolling(5).mean().values
        ax2.plot(xdates, vol5, c='y', label='VOL5')
    if n>=10: # 10日均线,作法类似前面的均线
        vol10 = df['volume'].rolling(10).mean().values
        ax2.plot(xdates, vol10, c='w', label='VOL10')
    ax2.yaxis.set_ticks_position('right') # y轴显示在右边
    ax2.legend(loc='upper right') # 图例放置于右上角
    ax2.grid(True) # 画网格
    # ax2.set_ylabel('成交量') # y轴名称
     
    # # 绘制MACD
    # difs, deas, bars = matix[:, 6], matix[:, 7], matix[:, 8] # 取出MACD值
    # ax3.axhline(0, ls='-', c='g', lw=0.5) # 水平线
    # ax3.plot(xdates, difs, c='w', label='DIFF') # 绘制DIFF线
    # ax3.plot(xdates, deas, c='y', label='DEA') # 绘制DEA线
    # # ax3.bar(xdates, df['bar'], width= 0.05, color=bar_colors) # 绘制成交量柱状图(发现用bar绘制,线的粗细不一致,故使用下面的直线列表)
    # cmap = {True: mcolors.to_rgba('r', 1.0), False: mcolors.to_rgba('g', 1.0)} # MACD线颜色,大于0为红色,小于0为绿色
    # bar_colors = [ cmap[bar > 0] for bar in bars ]  # MACD线颜色列表
    # vlines = [ ((date, 0), (date, bars[date])) for date in range(len(bars)) ] # 生成MACD线顶点列表
    # ax3.add_collection(LineCollection(vlines, colors=bar_colors, linewidths=0.5, antialiaseds=False)) # 生成MACD线的顶点数据(颜色,线宽,反锯齿)
    # ax3.legend(loc='upper right') # 图例放置于右上角
    # ax3.grid(True) # 画网格
     
    # # 绘制KDJ
    # K, D, J = matix[:, 9], matix[:, 10], matix[:, 11] # 取出KDJ值
    # ax4.axhline(0, ls='-', c='g', lw=0.5) # 水平线
    # ax4.yaxis.set_ticks_position('right') # y轴显示在右边
    # ax4.plot(xdates, K, c='y', label='K') # 绘制K线
    # ax4.plot(xdates, D, c='c', label='D') # 绘制D线
    # ax4.plot(xdates, J, c='m', label='J') # 绘制J线
    # ax4.legend(loc='upper right') # 图例放置于右上角
    # ax4.grid(True) # 画网格
     
    # set useblit = True on gtkagg for enhanced performance
    from matplotlib.widgets import Cursor # 处理鼠标
    cursor = Cursor(ax1, useblit=True, color='w', linewidth=0.5, linestyle='--')
     
    # 鼠标交互
    print(df)
    y1 = df.iloc[:,1].tolist()
    y2 = df.iloc[:,2].tolist()
    y3 = df.iloc[:,3].tolist()
    y4 = df.iloc[:,4].tolist()
    y5 = df.iloc[:,5].tolist()
    len_y = len(y0)
    x = range(len_y)
    y = [y0,y1,y2,y3,y4,y5]
    text = []
    for yi in y:
        # _y = [y[-1]]*len_y
        # text0 = plt.text(len_y-1,y[-1],str(y[-1]),fontsize = 10)
        _y = [yi[-1]]*len_y
        texti = plt.text(len_y-1,yi[-1],str(yi[-1]),fontsize = 10)
        text += [texti]
    def motion(event):
        axtemp=event.inaxes
        x_min, x_max = axtemp.get_xlim()
        try:
            for i in range(len(y)):
                yi = y[i]
                texti = text[i]
                temp = yi[int(np.round(event.xdata))]
    
                for j in range(len_y):
                    _y[j] = temp
                ######
                # text0.set_position((event.xdata, temp+250))
                texti.set_position((x_min, vmax*3-(vmax)/10*i))
                texti.set_text(columns[i] + ':' + str(temp))
                # print(texti)
                
                fig.canvas.draw_idle() # 绘图动作实时反映在图像上
        except:
            pass
    
    # 键盘方向键左右拖动
    def on_key_press(event):
        axtemp=event.inaxes
        x_min, x_max = axtemp.get_xlim()
        step = (x_max - x_min) // 20 + 1
        if event.key == 'right':
            axtemp.set(xlim=(x_min + step, x_max + step))
        elif event.key == 'left':
            axtemp.set(xlim=(x_min - step, x_max - step))
        x_min, x_max = axtemp.get_xlim()
        try:
            for i in range(len(y)):
                yi = y[i]
                texti = text[i]
                temp = yi[int(np.round(event.xdata))]
    
                for j in range(len_y):
                    _y[j] = temp
                ######
                # text0.set_position((event.xdata, temp+250))
                texti.set_position((x_min, vmax*3-(vmax)/10*i))
                texti.set_text(columns[i] + ':' + str(temp))
        except:
            pass
        fig.canvas.draw_idle() 
    
    # 滚轮缩放
    def scroll(event):
        axtemp=event.inaxes
        x_min, x_max = axtemp.get_xlim()
        fanwei_x = (x_max - x_min) / 10
        if event.button == 'up':
            axtemp.set(xlim=(x_min + fanwei_x, x_max - fanwei_x))
            ax1.xaxis.set_major_locator(ticker.MultipleLocator(max(int((x_max-x_min)/8), 5))) # 横向最多排8个左右的日期,最少5个,防止日期太拥挤
        elif event.button == 'down':
            axtemp.set(xlim=(x_min - fanwei_x, x_max + fanwei_x))
            ax1.xaxis.set_major_locator(ticker.MultipleLocator(max(int((x_max-x_min)/8), 5))) # 横向最多排8个左右的日期,最少5个,防止日期太拥挤
        x_min, x_max = axtemp.get_xlim()
        try:
            for i in range(len(y)):
                yi = y[i]
                texti = text[i]
                temp = yi[int(np.round(event.xdata))]
    
                for j in range(len_y):
                    _y[j] = temp
                ######
                # text0.set_position((event.xdata, temp+250))
                texti.set_position((x_min, vmax*3-(vmax)/10*i))
                texti.set_text(columns[i] + ':' + str(temp))
        except:
            pass
        fig.canvas.draw_idle() 
    
    fig.canvas.mpl_connect('motion_notify_event', motion)
    fig.canvas.mpl_connect('key_press_event', on_key_press)
    fig.canvas.mpl_connect('scroll_event', scroll)
    
    plt.show()

     

    展开全文
  • 主要介绍了利用python numpy+matplotlib绘制股票k线图的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • python matplotlib 绘制K线图(蜡烛图)

    千次阅读 2020-07-09 09:50:58
    python matplotlib 绘制K线图(蜡烛图) """ 绘制蜡烛图 """ import numpy as np import datetime as dt import matplotlib.pyplot as mp import matplotlib.dates as md # 方法-日期转换函数 def dmy2ymd(dmy):...

    python matplotlib 绘制K线图(蜡烛图)

    csv文件下载地址:
    链接:https://pan.baidu.com/s/1EvDxEPuIS8zAseLRO1SDBQ
    提取码:lb0t

    """
        绘制蜡烛图
    """
    
    import numpy as np
    import datetime as dt
    import matplotlib.pyplot as mp
    import matplotlib.dates as md
    
    
    # 方法-日期转换函数
    def dmy2ymd(dmy):
        dmy = str(dmy, encoding='utf-8')
        time = dt.datetime.strptime(dmy, '%d-%m-%Y').date()
        t = time.strftime('%Y-%m-%d')
        return t
    
    
    # 1.读取csv文件数据
    dates, open_price, max_price, min_price, close_price, volumes = np.loadtxt(
        r".\aapl.csv",
        delimiter=",",
        usecols=(1, 3, 4, 5, 6, 7),
        unpack=True,
        dtype="M8[D], f8, f8, f8, f8, f8",
        converters={1: dmy2ymd})
    
    print(open_price)
    
    # 2.设置绘图窗口
    mp.figure("Apple K Line", facecolor="lightgray")
    mp.title("Apple K Line", fontsize=16)
    mp.xlabel("Data", fontsize=14)
    mp.ylabel("Price", fontsize=14)
    
    # 3.x坐标(时间轴)轴修改
    ax = mp.gca()
    # 设置主刻度定位器为周定位器(每周一显示主刻度文本)
    ax.xaxis.set_major_locator(md.WeekdayLocator(byweekday=md.MO))
    ax.xaxis.set_major_formatter(md.DateFormatter('%Y-%m-%d'))
    ax.xaxis.set_minor_locator(md.DayLocator())
    
    mp.tick_params(labelsize=8)
    mp.grid(linestyle=":")
    
    # 4.判断收盘价与开盘价 确定蜡烛颜色
    colors_bool = close_price >= open_price
    colors = np.zeros(colors_bool.size, dtype="U5")
    colors[:] = "blue"
    colors[colors_bool] = "white"
    
    # 5.确定蜡烛边框颜色
    edge_colors = np.zeros(colors_bool.size, dtype="U1")
    edge_colors[:] = "b"
    edge_colors[colors_bool] = "r"
    
    # 绘制开盘价折线图片
    dates = dates.astype(md.datetime.datetime)
    mp.plot(dates, open_price, color="b", linestyle="--",
            linewidth=2, label="open", alpha=0.3)
    
    # 6.绘制蜡烛
    mp.bar(dates, (close_price - open_price), 0.8, bottom=open_price, color=colors,
           edgecolor=edge_colors, zorder=3)
    
    # 7.绘制蜡烛直线(最高价与最低价)
    mp.vlines(dates, min_price, max_price, color=edge_colors)
    
    mp.legend()
    mp.gcf().autofmt_xdate()
    mp.show()
    
    

    在这里插入图片描述

    展开全文
  • 使用matplotlib绘制K线图以及和成交量的组合图

    万次阅读 多人点赞 2017-06-22 22:11:44
    matplotlib提供了一些金融图表主要用于可视化历史股票价格,或者类似的金融时间序列数据 在matplotlib.finance的子库中也提供了获取历史数据的函数 版本matplotlib 2.2中,finance会被替换成mpl_finance,但是在2.0...
    matplotlib提供了一些金融图表主要用于可视化历史股票价格,或者类似的金融时间序列数据
    在matplotlib.finance的子库中也提供了获取历史数据的函数
    版本matplotlib 2.2中,finance会被替换成mpl_finance,但是在2.0版本中
    import matplotlib.finance as mpf仍可以使用
    data = mpf.quotes_historical_yahoo('code',start, end)
    但是web数据来源的数据不足以作为任何重要投资的决策基础,本文中的数据通过tushare获取
    # -*- coding:utf-8 -*-
    import matplotlib as mpl
    import tushare as ts
    import matplotlib.pyplot as plt
    import matplotlib.finance as mpf
    %matplotlib inline
    # mpf.quotes_historical_yahoo_ohlc('601558.ss', (2014,1,1),(2014,6,6))
    # 现在不能正常的从雅虎财经获取历史数据了,会出现httpError,本文中的数据通过tushare获取
    # HTTPError: HTTP Error 404: Not Found
    wdyx = ts.get_k_data('002739','2017-01-01')
    wdyx.info()
    wdyx[:3]
    .dataframe thead tr:only-child th { text-align: right; } .dataframe thead th { text-align: left; } .dataframe tbody tr th { vertical-align: top; }
    dateopenclosehighlowvolumecode
    02017-01-0354.01054.07054.11053.71130518.0002739
    12017-01-0454.09056.69156.77153.831103953.0002739
    22017-01-0556.30256.59157.08055.92465414.0002739
    # 由于数据不是通过,mpf.candlestick_ohlc()获取的,所以日期的格式与,绘图函数的不一致
    # tushare回去的数据对象为DataFrame类型
    # 所以要将格式转换为mpf.candlestick_ohlc()能够处理的浮点数格式
    # 导入两个涉及的库
    from matplotlib.pylab import date2num
    import datetime
    
    # 对tushare获取到的数据转换成candlestick_ohlc()方法可读取的格式
    '''
    data_list = []
    for dates,row in hist_data.iterrows():
        # 将时间转换为数字
        date_time = datetime.datetime.strptime(dates,'%Y-%m-%d')
        t = date2num(date_time)
        open,high,low,close = row[:4]
        datas = (t,open,high,low,close)
        data_list.append(datas)
    '''
    def date_to_num(dates):
        num_time = []
        for date in dates:
            date_time = datetime.datetime.strptime(date,'%Y-%m-%d')
            num_date = date2num(date_time)
            num_time.append(num_date)
        return num_time
    # dataframe转换为二维数组
    mat_wdyx = wdyx.as_matrix()
    num_time = date_to_num(mat_wdyx[:,0])
    mat_wdyx[:,0] = num_time
    #         日期,   开盘,     收盘,    最高,      最低,   成交量,    代码
    mat_wdyx[:3]
    array([[736332.0, 54.01, 54.07, 54.11, 53.711, 30518.0, '002739'],
           [736333.0, 54.09, 56.691, 56.771, 53.831, 103953.0, '002739'],
           [736334.0, 56.302, 56.591, 57.08, 55.924, 65414.0, '002739']], dtype=object)
    
    # 数据列的顺序,从左至右是,开盘,收盘,最高,最低,成交量
    # matplotlib.finance中有两个函数,一个是candlestick_ochl(),刚好对应上边的顺序
    # 另一个是candlestick_ohlc(),对应的是开盘,最高,最低,收盘的数据格式
    # 接下来可以绘制K线图了
    
    fig, ax = plt.subplots(figsize=(15,5))
    fig.subplots_adjust(bottom=0.5)
    mpf.candlestick_ochl(ax, mat_wdyx, width=0.6, colorup='g', colordown='r', alpha=1.0)
    plt.grid(True)
    # 设置日期刻度旋转的角度 
    plt.xticks(rotation=30)
    plt.title('wanda yuanxian 17')
    plt.xlabel('Date')
    plt.ylabel('Price')
    # x轴的刻度为日期
    ax.xaxis_date ()
    ###candlestick_ochl()函数的参数
    # ax 绘图Axes的实例
    # mat_wdyx 价格历史数据
    # width    图像中红绿矩形的宽度,代表天数
    # colorup  收盘价格大于开盘价格时的颜色
    # colordown   低于开盘价格时矩形的颜色
    # alpha      矩形的颜色的透明度

    png这里写图片描述

     金融数据每日摘要图表
     开盘价格和收盘价格由两条水平线表示
    fig, ax = plt.subplots(figsize=(15,5))
    mpf.plot_day_summary_oclh(ax, mat_wdyx,colorup='g', colordown='r')
    plt.grid(True)
    ax.xaxis_date()
    plt.title('wandayuanxian 17')
    plt.ylabel('Price')

    png这里写图片描述

    k线图和成交量(柱状图)的组合图表
    fig, (ax1, ax2) = plt.subplots(2, sharex=True, figsize=(15,8))
    mpf.candlestick_ochl(ax1, mat_wdyx, width=1.0, colorup = 'g', colordown = 'r')
    ax1.set_title('wandayuanxian')
    ax1.set_ylabel('Price')
    ax1.grid(True)
    ax1.xaxis_date()
    plt.bar(mat_wdyx[:,0]-0.25, mat_wdyx[:,5], width= 0.5)
    ax2.set_ylabel('Volume')
    ax2.grid(True)

    png

    展开全文
  • 利用 python numpy +matplotlib 绘制股票k线图

    万次阅读 多人点赞 2017-05-03 10:32:48
    # -- coding: utf-8 -- import requests import numpy as np from matplotlib import pyplot as plt from matplotlib import animation fig = plt.figure(figsize=(8,6), dpi=72,facecolor="white") axes = p

    一、python numpy + matplotlib 画股票k线图

    # -- coding: utf-8 --
    import requests
    import numpy as np   
    from matplotlib import pyplot as plt   
    from matplotlib import animation
    
    fig = plt.figure(figsize=(8,6), dpi=72,facecolor="white")
    axes = plt.subplot(111)
    axes.set_title('Shangzheng')
    axes.set_xlabel('time')
    line, = axes.plot([], [], linewidth=1.5, linestyle='-')
    alldata = []
    
    def dapan(code):
    	url = 'http://hq.sinajs.cn/?list='+code
    	r = requests.get(url)
    	data = r.content[21:-3].decode('gbk').encode('utf8').split(',')
    	alldata.append(data[3])
    	axes.set_ylim(float(data[5]), float(data[4]))
    	return alldata
    
    def init():
    	line.set_data([], [])
    	return line
    
    def animate(i): 
      	axes.set_xlim(0, i+10)
      	x = range(i+1)
      	y = dapan('sh000001')
      	line.set_data(x, y)
      	return line
    
    anim=animation.FuncAnimation(fig, animate, init_func=init,  frames=10000, interval=5000)
    
    plt.show()



    二、使用matplotlib轻松绘制股票K线图


    K线图是看懂股票走势的最基本知识,K线分为阴线和阳线,阴线和阳线都包含了最低价、开盘价、最高价和收盘价,一般都K线如下图所示:


    在使用Python进行股票分析的过程中,我们可以很容易的对K线图进行绘制,下面介绍两种情形下的K线图绘制:

    1. 股票数据来源于Matplotlib:

    # 导入需要的库
    import tushare as ts
    import matplotlib.pyplot as plt
    import matplotlib.finance as mpf
     
    %matplotlib inline
     
    # 设置历史数据区间
    date1 = (2014, 12, 1) # 起始日期,格式:(年,月,日)元组
    date2 = (2016, 12, 1)  # 结束日期,格式:(年,月,日)元组
    # 从雅虎财经中获取股票代码601558的历史行情
    quotes = mpf.quotes_historical_yahoo_ohlc('601558.ss', date1, date2)
     
    # 创建一个子图 
    fig, ax = plt.subplots(facecolor=(0.5, 0.5, 0.5))
    fig.subplots_adjust(bottom=0.2)
    # 设置X轴刻度为日期时间
    ax.xaxis_date()
    # X轴刻度文字倾斜45度
    plt.xticks(rotation=45)
    plt.title("股票代码:601558两年K线图")
    plt.xlabel("时间")
    plt.ylabel("股价(元)")
    mpf.candlestick_ohlc(ax,quotes,width=1.2,colorup='r',colordown='green')
    plt.grid(True)
    

    绘制出来的K线图如下:



    2.股票数据来源于Tushare:

    因为从Tushare中获取到的数据为Pandas的DataFrame结构,需要将其转换为matplotlib.finance.candlestick_ohlc()方法能够处理的数据结构。

    from matplotlib.pylab import date2num
    import datetime
     
    # 对tushare获取到的数据转换成candlestick_ohlc()方法可读取的格式
    data_list = []
    for dates,row in hist_data.iterrows():
        # 将时间转换为数字
        date_time = datetime.datetime.strptime(dates,'%Y-%m-%d')
        t = date2num(date_time)
        open,high,low,close = row[:4]
        datas = (t,open,high,low,close)
        data_list.append(datas)
     
    # 创建子图
    fig, ax = plt.subplots()
    fig.subplots_adjust(bottom=0.2)
    # 设置X轴刻度为日期时间
    ax.xaxis_date()
    plt.xticks(rotation=45)
    plt.yticks()
    plt.title("股票代码:601558两年K线图")
    plt.xlabel("时间")
    plt.ylabel("股价(元)")
    mpf.candlestick_ohlc(ax,data_list,width=1.5,colorup='r',colordown='green')
    plt.grid()

    同样也能绘制会一样的K线图:


    链接:https://zhuanlan.zhihu.com/p/24282861




    展开全文
  • python用matplotlib画K线

    2017-11-18 14:15:41
    import matplotlib.pyplot as plt import matplotlib.finance as mpf with open('SH#600004.txt') as obj: text=obj.readlines() baseinfo=text[0] dayinfo=text[2:-1] date_list =[dayinfo[i].split(','...
  • matplotlib画K线

    2018-07-01 12:43:54
    参考:...import matplotlib.pyplot as plt import mpl_finance as mpf import matplotlib as mpl from matplotlib.pylab import date2nu...
  • Python3,matplotlib3 绘制K线图
  • python使用matplotlib绘制k线图

    千次阅读 2017-05-04 10:31:11
    # -*- coding:utf-8 -*- import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotlib.dates import DateFormatter, WeekdayLocator, DayLocator, MONDAY from matplotlib.finance i
  •  其他教程里的k线图都是使用的tushare等现成的库获取数据后直接使用 matplotlib.finance.candlestick_ochl绘制图形,但是对于使用自己的数据的情况并没有详细的说明. 下面从我的代码中摘要部分重点,第一部是包的...
  • Matplotlib画等高线图

    2020-02-28 17:54:35
    所用到的函数如下: matplotlib.pyplot.contour(*args, **kwargs) matplotlib.pyplot.contourf(*args, **...前者是绘制等高线,后者是填充等高线。 keyword建议查看官方文档。 导入库 import numpy as np impor...
  • 前言 每迭代100次保存一次loss...import matplotlib.pyplot as plt from matplotlib import rcParams from matplotlib.ticker import FuncFormatter def mean_list(valid_ids, valid_values, stride=2, iters=1000):
  • matplotlib 绘制K线图

    2019-06-20 17:00:03
    # 绘制蜡烛线 mp.vlines( dates, lowest_prices, highest_prices, color=edgecolor ) # 获取坐标轴对象 ax = mp.gca() # 设置主刻度定位器,每周一为一个主刻度 major_loc = md.WeekdayLocator(byweekday=...
  • 做量化分析,难免要将自己的某些指标等绘制在K线图上,或者对某些指标进行改造观察K线图和指标对应的走势关系。那么用Python如何绘制和炒股软件类似的效果呢。 2 准备工具 (1)数据源:Tushare Tushare大数据...
  • http://www.financecomputing.net/wordpress/?p=1047 ...Matplotlib是Python主要的绘图库。...虽然Matplotlib很强大,它本身就很复杂,你的经过大量的调整才能变精致。因此,作为替代,我推荐你一开始使用
  • python 用mpl_finance画k线图

    千次阅读 2019-10-04 21:26:18
    # 替换 import matplotlib.finance as mpf 画k线图 import mpl_finance as mpf # 替换 import matplotlib.finance as mpf import matplotlib . pyplot as plt # 创建fig对象 fig = plt . figure ( ...
  • 使用matplotlib绘制K线图以及和成交量的组合图 https://blog.csdn.net/u014281392/article/details/73611624/ Python绘图问题:Matplotlib中%matplotlib inline是什么、如何使用? ...
  • import matplotlib as mpl import tushare as ts import matplotlib.pyplot as plt import matplotlib.finance as mpf from matplotlib import rc from matplotlib.pylab import date2num from dat...
  • import matplotlib.pyplot as plt #建立步长为0.01,即每隔0.01取一个点 step = 0.01 x = np.arange(-10,10,step) y = np.arange(-10,10,step) #也可以用x = np.linspace(-10,10,100)表示从-10到10,分100份 #将...
  • python绘制k线图(matplotlib)

    千次阅读 2020-04-17 22:29:58
    1.导入数据分析库 import mpl_finance import tushare as ts import pandas as pd ...import matplotlib.pyplot as plt from matplotlib import ticker from matplotlib.pylab import date2num import n...
  • plt.title('2018年7月1日至今k线图',fontsize=18) plt.ylabel('价格(元)',fontsize=15) mpf.candlestick_ohlc(ax, quotes, width=0.7, colorup='r', colordown='green') # 上涨为红色K线,下跌为绿色,K线宽度...
  • Matplotlib画各种

    万次阅读 多人点赞 2018-06-28 13:24:54
    matplotlib(条形) 看本文前,请看matlplotlib使用教程https://blog.csdn.net/kun1280437633/article/details/80370622,有基础请忽略 一、简单垂直条形 案例一:直辖市GDP水平 中国的四个直辖市分别为北京...
  • 参考资料:http://matplotlib.org/gallery.html matplotlib画廊 有少量修改,如有疑问,请访问原...首先补充一下:两种体系7种颜色 r g b y m c k (红,绿,蓝,黄,品红,青,黑) 在科研的过程中,坐标系中...
  • Matplotlib画各种论文

    千次阅读 多人点赞 2018-05-17 16:30:17
    从各个地方搜集修改的代码,保存svg,再转成emf矢量贴在文章里。在线转换工具。 代码 # coding=utf-8 import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['Arial'] # ...
  • 1、准备工作(过滤警告、显示中文、引入pyplot模块);2、绘制单个曲线(plot函数、添加注释);3、绘制多个曲线(增加subplot函数)。
  • matplotlib画出图像 %matplotlib inline import numpy as np import matplotlib.pyplot as plt from IPython.display import clear_output, display # 生成数据 x = np.arange(100).reshape(100, 1) # 按照y = 10x...
  • 使用matplotlib画折线快速指定颜色

    千次阅读 2021-09-22 11:09:20
    在使用matplotlib画折线时可以用如下方式指定线条颜色 import matplotlib.pyplot as plt plt.plot([1,2],[3.4],color="red") plt.show() 但是其实可以用更简单的方法—用字母来代替颜色 plt.plot([1,2],[3,4],'r'...
  • 1、收敛曲线 x=range(1,10) #x的取值 y=range(1,10) #y的取值 plt.figure(figsize=(8,4)) #图像大小 plt.plot(x,y,c='b',linewidth = 1.0,marker='o',label='LS') #画线 #备注:c='b'表示曲线的颜色,linewidth =...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,956
精华内容 3,582
关键字:

matplotlib画k线图