Python3下使用mplfinance绘制K线图时如何修正网格线对齐问题?
mplfinance绘制K线图X轴网格线对齐问题
问题现象
绘制的垂直网格线与实际K线未对齐。
第一个K线之后,部分垂直网格线偏移了1根K线。
问题示例图:
复现代码
from binance.client import Client import pandas as pd import time import mplfinance as mpf import matplotlib.pyplot as plt from datetime import datetime, timedelta def klines_to_df(df_trading_pair): #drop unnecesary columns df_trading_pair.drop(7, inplace = True, axis=1) df_trading_pair.drop(8, inplace = True, axis=1) df_trading_pair.drop(9, inplace = True, axis=1) df_trading_pair.drop(10, inplace = True, axis=1) df_trading_pair.drop(11, inplace = True, axis=1) # Rename the column names for best practices df_trading_pair.rename(columns = { 0 : 'Start Date', 1 : 'Open Price', 2 : 'High Price', 3 : 'Low Price', 4 :'Close Price', 5 : 'Volume', 6 :'End Date', }, inplace = True) # Convert Unix Time values to actual dates df_trading_pair['Start Date'] = pd.to_datetime(df_trading_pair['Start Date'], unit='ms') df_trading_pair['End Date'] = pd.to_datetime(df_trading_pair['End Date'], unit='ms') df_trading_pair = df_trading_pair.astype({'Open Price': 'float'}) df_trading_pair = df_trading_pair.astype({'High Price': 'float'}) df_trading_pair = df_trading_pair.astype({'Low Price': 'float'}) df_trading_pair = df_trading_pair.astype({'Close Price': 'float'}) df_trading_pair = df_trading_pair.astype({'Volume': 'float'}) return df_trading_pair def set_DateTimeIndex(df_trading_pair): df_trading_pair = df_trading_pair.set_index('Start Date', inplace=False) # Rename the column names for best practices df_trading_pair.rename(columns = { "Open Price" : 'Open', "High Price" : 'High', "Low Price" : 'Low', "Close Price" :'Close', }, inplace = True) return df_trading_pair api_key = "your_api_key" secret_key = "your_secret_key" client = Client(api_key= api_key, api_secret= secret_key, tld= "com") trading_pair= "DOTBUSD" #get historical klines 60m ago UTC in the 3m timeframe klines = client.futures_historical_klines(symbol=trading_pair, interval="3m", start_str = "1662914700", end_str="1662918120") # Customize the df_trading_pair that stored klines df_trading_pair = klines_to_df(pd.DataFrame(klines)) # Create another df just to properly plot the data df_trading_pair_date_time_index = set_DateTimeIndex(df_trading_pair) # Plotting # Create my own `marketcolors` style: mc = mpf.make_marketcolors(up='#2fc71e',down='#ed2f1a',inherit=True) # Create my own `MatPlotFinance` style: s = mpf.make_mpf_style(base_mpl_style=['bmh', 'dark_background'],marketcolors=mc, y_on_right=True) # Plot it trading_plot, axlist = mpf.plot(df_trading_pair_date_time_index, figratio=(10, 6), type="candle", style=s, tight_layout=True, datetime_format = '%H:%M', ylabel = "Precio ($)", returnfig=True ) # Add Title symbol = trading_pair.replace("BUSD","").strip()+"/"+"BUSD" axlist[0].set_title(f"{symbol} - 3m", fontsize=25, style='italic', fontfamily='fantasy')
已尝试的解决方案
- 修改
figratio参数为(12,6)和(20,7),未解决问题
期望效果
实现网格线与部分K线对应对齐,示例如下:
内容的提问来源于stack exchange,提问作者NoahVerner
相关产品推荐
相关产品推荐

