精华内容
下载资源
问答
  • 画k线需要的包和环境:python36import tushare as tsimport reimport matplotlib.pyplot as pltimport mpl_finance as mpfimport numpy as npimport talib as tltushare是python的一个第三方库,通过它可以获取股票的...

    画k线需要的包和环境:

    python36

    import tushare as ts

    import re

    import matplotlib.pyplot as plt

    import mpl_finance as mpf

    import numpy as np

    import talib as tl

    tushare是python的一个第三方库,通过它可以获取股票的当日数据和历史数据,可以通过这里进行详细了解;matplotlib用于数据的可视化;mpl_finance是python中可以用来画出蜡烛图、线图的分析工具,目前已经从matplotlib中独立出来;talib是一个Python 金融指数处理库.

    股票数据准备:

    获取股票历史数据可通过tushare库调用get_hist_data或者pro_bar来完成,这里我们通过第二种方法进行采集:

    api = ts.pro_api()

    首先要实例化api,需要在tushare平台注册账号,并获取token(免费);

    df = ts.pro_bar('600073.SH', start_date='2019-12-30 00:00:00', end_date='2019-12-30 15:00:00', freq='1min')[::-1]

    该方法会以dataframe的格式返回数据,其参数分别表示股票代码,起始时间,终止时间,要查询的频率,具体可参考下边参数,由于返回的数据时间上是从后往前的,所以我们通过[::-1]进行调换.

    ts_code

    证券代码,支持股票,ETF/LOF,期货/期权,港股,数字货币

    start_date

    开始日期 YYYYMMDD

    end_date

    结束日期 YYYYMMDD

    freq

    支持1/5/15/30/60分钟,周/月/季/年

    asset

    证券类型 E:股票和交易所基金,I:沪深指数,C:数字货币,FT:期货 FD:基金/O期权/H港股/CB可转债

    exchange

    市场代码,用户数字货币行情

    adj

    复权类型,None不复权,qfq:前复权,hfq:后复权

    ma

    均线,支持自定义均线频度,如:ma5/ma10/ma20/ma60/maN

    offset

    开始行数(分页功能,从第几行开始取数据)

    limit

    本次提取数据行数

    factors

    因子数据,目前支持以下两种:vr:量比,默认不返回,返回需指定:factor=['vr'],tor:换手率,默认不返回,返回需指定:factor=['tor'],

    以上两种都需要:factor=['vr', 'tor']

    retry_count

    网络重试次数

    index = list(map(lambda i: re.findall(r'\d{2}:\d{2}', i)[0], df.trade_time))

    我们以时间为x轴,所以要提取df中的trade_time数据,因为我们的时间比较长,如果都显示看起来比较冗余,所以我们通过正则提取其中的时分秒即可.

    下边我们就开始画k线图:

    sma_10 = tl.SMA(np.array(df['close']), 10)sma_30 = tl.SMA(np.array(df['close']), 30)

    画均线,上边分别是10天内的和30天内的均值计算

    fig = plt.figure(figsize=(38, 18), dpi=100)

    ax = fig.add_subplot(1, 1, 1)

    常见一个画布,设置其长宽,可通过dpi来设置生成图片的像素;在画布中生成一张子图.

    ax.set_title(f'2019-12-27 {600073}', fontsize=30, color='red')

    ax.set_xticks(range(0, len(df.index)))ax.set_xticklabels(index, rotation=-80)

    给子图添加标题,可设置字体大小和颜色,这里为了醒目我们设置成红色;设置x轴,按照df的长度来设定,然后把上边通过正则获取的时间添加在x轴上,为了避免显示重叠,可通过rotation参数设置旋转,如图:

    mpf.candlestick2_ochl(ax, df['open'], df['close'], df['high'],df['low'], width=0.6, colorup='r', colordown='g', alpha=0.75)

    candlestick2_ochl方法用来生成k线,非常的方便,只需把开盘,收盘,最高,最低参数传入即可.

    最后设置图例:

    plt.rcParams['font.sans-serif'] = ['Microsoft JhengHei'] # 设置字体ax.plot(sma_10, label='10日均线')

    ax.plot(sma_30, label='30日均线')

    ax.legend()

    这样指定股票的日k线就完成了,完整代码点击,参考图:

    展开全文
  • 利用matplotlib.finance绘制K线图时使用关键要点绘制k线图的核心语句是:import matplotlib.finance as mpfmpf.candlestick_ochl( ax, matrix_data, colorup=***, colordown=***)这其中 ax 是 matploblib 的 axis,...

    利用matplotlib.finance绘制K线图时使用关键要点

    绘制k线图的核心语句是:

    import matplotlib.finance as mpf

    mpf.candlestick_ochl( ax, matrix_data, colorup=***, colordown=***)

    这其中 ax 是 matploblib 的 axis,matrix_data 是股价数据。

    matrix_data 是 np.matrix 对象,对于 candlestick_ochl 方法来讲,它需要按照约定的顺序来排列数据,即 matrix_data 每一行中前五个数据必须是:时间、开盘价、收盘价、最高价、最低价。

    在这里,“时间”不是 datetime 对象,也不是 string,它必须使用 matplotlib.pylab 中的 date2num(datetime) 方法来将datetime对象转换一个特定的时间戳数字。

    通常我们会用 pandas.DataFrame 来储存股价数据——比如,利用 pd.read_csv() 读取 csv 文件后,得到就是一个 DataFrame 对象。假定 DataFrame 中包含有 date, open, close, high, low, volume 六列数据,在将其转化为 candlestick_ochl() 中所需的 matrix_data,要做如下几步工作:

    删除空行

    按时间升序排列数据

    将date转化为特定的时间戳数据

    按照 date,open,close,high,low,volume 的顺序重新排列 DataFrame

    将 DataFrame 转为 matrix

    删除空行

    假定 pd.read_csv() 读入的数据为 data

    data[data['volume']==0]=np.nan

    data=data.dropna()

    按时间升序排列数据

    data.sort_values(by='date',ascending=True,inplace=True)

    将date转化为特定的时间戳数据

    from matplotlib.pylab import date2num

    data.date=data.date.apply(lambda x:date2num(x))

    按照 date,open,close,high,low,volume 的顺序重新排列 DataFrame

    data=data[['date','open','close','high','low','volume']]

    将 DataFrame 转为 matrix

    data_mat=data.as_matrix()

    合成代码案例

    绘制k线

    import matplotlib.pyplot as plt

    import matplotlib.finance as mpf

    import numpy as np

    import pandas as pd

    from matplotlib.pylab import date2num

    data=pd.read_csv(u'兴业银行.csv',usecols=['date','open','close','high','low','volume'])

    data[data['volume']==0]=np.nan

    data=data.dropna()

    data.sort_values(by='date',ascending=True,inplace=True)

    data=data[['date','open','close','high','low','volume']]

    # data=data.head(60)

    data.date=pd.to_datetime(data.date)

    data.date=data.date.apply(lambda x:date2num(x))

    data_mat=data.as_matrix()

    fig,ax=plt.subplots(figsize=(1200/72,480/72))

    fig.subplots_adjust(bottom=0.1)

    mpf.candlestick_ochl(ax,data_mat,colordown='#53c156', colorup='#ff1717',width=0.3,alpha=1)

    ax.grid(True)

    ax.xaxis_date()

    plt.show()

    a4b6e1d7ce94

    candle.png

    并置成交量图

    fig,(ax1,ax2)=plt.subplots(2,sharex=True,figsize=(1200/72,480/72))

    mpf.candlestick_ochl(ax1,data_mat,colordown='#53c156', colorup='#ff1717',width=0.3,alpha=1)

    ax1.grid(True)

    ax1.xaxis_date()

    plt.bar(data_mat[:,0],data_mat[:,5],width=0.5)

    ax2.set_ylabel('Volume')

    ax2.grid(True)

    plt.show()

    a4b6e1d7ce94

    k.png

    展开全文
  • 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()

     

    展开全文
  • http://www.financecomputing.net/wordpress/?p=1047 ...Matplotlib是Python主要的绘图库。...虽然Matplotlib很强大,它本身就很复杂,你的经过大量的调整才能变精致。因此,作为替代,我推荐你一开始使用






    http://www.financecomputing.net/wordpress/?p=1047




    Seaborn

    Matplotlib是Python主要的绘图库。但是,我不建议你直接使用它,原因与开始不推荐你使用NumPy是一样的。虽然Matplotlib很强大,它本身就很复杂,你的图经过大量的调整才能变精致。因此,作为替代,我推荐你一开始使用Seaborn。Seaborn本质上使用Matplotlib作为核心库(就像Pandas对NumPy一样)。我将简短地描述下seaborn的优点。具体来说,它可以:

    1. 默认情况下就能创建赏心悦目的图表。(只有一点,默认不是jet colormap
    2. 创建具有统计意义的图
    3. 能理解pandas的DataFrame类型,所以它们一起可以很好地工作。

    虽然anaconda预装了pandas,却没安装seaborn。可以通过conda install seaborn轻松地安装。

    具有统计意义的图

    In [5]:
    In [7]:
     
    如你所见,仅通过一行代码,我们就创建了一个漂亮复杂的统计图,其中包含拥有置信区间的最拟合回归直线、边界图,以及相关系数。使用matplotlib重新绘制这幅图的话需要相当多的(丑陋)代码,包括调用scipy执行线性回归并手动利用线性回归方程绘制直线(我甚至想不出怎么在边界绘图,怎么计算置信区间)。上面和下面的例子都摘自教程“the tutorial on quantitative linear models”。

    与Pandas的DataFrame很好地工作

    数据有自己的结构。通常我们感兴趣的包含不同的组或类(这种情况下使用pandas中groupby的功能会让人感到很神奇)。比如tips(小费)的数据集是这样的:

    In [9]:
    Out[9]:
     total_billtipsexsmokerdaytimesize
    016.991.01FemaleNoSunDinner2
    110.341.66MaleNoSunDinner3
    221.013.50MaleNoSunDinner3
    323.683.31MaleNoSunDinner2
    424.593.61FemaleNoSunDinner4

    我们可能想知道吸烟者给的小费是否与不吸烟的人不同。没有seaborn的话,这需要使用pandas的groupby功能,并通过复杂的代码绘制线性回归直线。使用seaborn的话,我们可以给col参数提供列名,按我们的需要划分数据:

    In [11]:
     

     

    很整洁吧?

    随着你研究得越深,你可能想更细粒度地控制这些图表的细节。因为seaborn只是调用了matplotlib,那时你可能会想学习这个库。然而,对绝大部分工作来说我还是喜欢使用seaborn

    展开全文
  • 股票数据重构matplotlib 官方给出的candlestick_ohlc() 的推荐使用方式是这样:mpf.candlestick_ochl(ax,data_mat,colordown='#53c156', colorup='#ff1717',width=0.3,alpha=1)其中 ax 是绘制图形的 axis 对象,data...
  • #-*- utf-8 -*-__author__='chen shaowu'importmatplotlib as mplimportmatplotlib.pyplot as pltimportnumpy as npimportos#全局变量:常量X=14Y=20Z1=6Z2=3#常量修改函数def set_value(x=14,y=20,z1=6,z2=3):...
  • 其他教程里的k线图都是使用的tushare等现成的库获取数据后直接使用 matplotlib.finance.candlestick_ochl绘制图形,但是对于使用自己的数据的情况并没有详细的说明.下面从我的代码中摘要部分重点,第一部是包的导入,...
  • 1 #-*- coding: utf-8 -*-23 importos4 importsys5 importpickle6 importmath7 importdatetime8 importmatplotlib910 matplotlib.use("WXAgg", warn=True) #这个要紧跟在 import matplotlib 之后,而且必须安装了 ...
  • <本文的原始位置: ... ---- 最新的在这里: 用 Python / Matplotlib 出来的股票 K线图 (四) ---- 下一篇在这里: 用 Python / Matplotlib 出来的股票 K线图 (三) ---- 上一版的改进,双股同列...
  • 一、python numpy + matplotlib 股票k线图# -- coding: utf-8 --import requestsimport numpy as npfrom matplotlib import pyplot as pltfrom matplotlib import animationfig = plt.figure(figsize=(8,6), dpi=...
  • 一、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)...
  • 参考资料:http://matplotlib.org/gallery.html matplotlib画廊 有少量修改,如有疑问,请访问原...首先补充一下:两种体系7种颜色 r g b y m c k (红,绿,蓝,黄,品红,青,黑) 在科研的过程中,坐标系中...
  • ---- 过年后开始真正学用 Matplotlib 一些实际的图形,以下是最新的改进结果: ---- 股票是 600644,原始数据来自网络。就不总结要点了,Matplotlib 十分给力! ---- 下一步打算在标示价格的 Y 轴上使用...
  • 阴线和阳线都包含了最低价、开盘价、最高价和收盘价,一般都K线如下图所示:度娘说:K线图源于日本德川幕府时代(1603~1867年),被当时日本米市的商人用来记录米市的行情与价格波动,后因其细腻独到的标方式而被...
  • Python利用Matplotlib画曲线和柱状

    千次阅读 2018-01-30 19:47:30
    首先补充一下:两种体系7种颜色 r g b y m c k (红,绿,蓝,黄,品红,青,黑) 在科研的过程中,坐标系中的XY不一定就是等尺度的。例如在声波中对Y轴取对数。肆意我们也必须知道这种坐标系如何出来的...
  • 基本画图简介matplotlib中原来有candlesticks函数画K线图,后来该函数被移出matplotlib.finance库。现状是 画K线图函数在模块candlestick_ohlc中,但后期想自定义K线图不方便(例如在K线图中添加几个文本备注)。...
  • 编辑推荐:本文讲了对数坐标,极坐标图像,柱状,散列,由离散的点构成的,3D图像,主要是调用3D图像库,希望对大家有帮助。本文来自于csdn,由火龙果软件Delores编辑,推荐。首先补充一下:两种体系7种颜色 r ...
  • 画K线图

    2020-07-17 17:43:03
    #以tushare数据为例,画K线图 import tushare as ts import datetime from matplotlib.pylab import date2num import matplotlib as mpl import tushare as ts import matplotlib.pyplot as plt import mpl_finance...
  • 首先补充一下:两种体系7种颜色 r g b y m c k (红,绿,蓝,黄,品红,青,黑)在科研的过程中,坐标系中的XY不一定就是等尺度的。例如在声波中对Y轴取对数。肆意我们也必须知道这种坐标系如何出来的。1:对数坐标...
  • import matplotlib.pyplot as plt import numpy as np plt.style.use('ggplot') #使用ggplot,出来的图更美~ #步骤一:创建四个对象 ax1=plt.subplot(221,projection='polar') ax2=plt.subplot(222,projection='...
  • 前面讲的利用tushare提取股票数据,接下来一步就是利用tushare来提取真正的股票数据,然后用IPython来...先贴代码:import matplotlibimport tushare as tsimport pandas as pdimport matplotlib.pyplot as pltfig=p
  • 如果把每日的K线图放在一张纸上,就能得到日K线图,同样也可出周K线图、月K线图。 10.5.2 企业股票价格趋势分析 下为了分析该企业股票价格的区域,绘制了股票价格的K线图。具体过程如下: 1.导入options、Kline...
  • 基本画图简介matplotlib中原来有candlesticks函数画K线图,后来该函数被移出matplotlib.finance库。现状是 画K线图函数在模块candlestick_ohlc中,但后期想自定义K线图不方便(例如在K线图中添加几个文本备注)。...
  • matplotlib是我们经常会用到的一款python绘图库,操作简单,几行代码就能很轻松地一些或简单或复杂地图形,线图、直方、功率谱、条形、错误、散点以及费笛卡尔坐标等都不在话下。今天小编就具体给大家...
  • 画K线图、画N日均线 python3

    千次阅读 2017-07-12 09:29:24
    记下自己的研究成果是件开心的事情,本文介绍用Python3将股票历史行情K线图,以及添加5日,10日,N日均线。  首先,是获取数据源,一般分两种,一是直接从财经类网站读取;二是读取本地数据文件。我是先从财经...
  • Q2:求教使用python绘制K线图使用matplotlib模块,相关API请查看网页链接只要你是个图,它就能给你出来。希望可以帮到你Q3:怎么利用python代码绘制k线图现在几乎所有的大网站都在主要的栏目 做了防爬行的处理。 ...

空空如也

空空如也

1 2 3 4 5
收藏数 87
精华内容 34
关键字:

matplotlib画k线图