代码之家  ›  专栏  ›  技术社区  ›  Compustretch

无法将第二个绘图添加到日志转换图

  •  1
  • Compustretch  · 技术社区  · 6 年前

    根据下面的代码,绘制历史价格数据的对数转换工作正常,但是当任何第二个图(例如收盘价)添加到图中时,对数转换被绘制为ts=0?!

    代码:

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plot
    
    df = pd.read_csv('historical_price_data.csv')
    df = df[::-1]
    df['Date'] = pd.to_datetime(df.Date, infer_datetime_format=True) 
    
    # Set index to Date returns KeyError: "['Date'] not in index"
    # df.set_index('Date', inplace=True)
    df.sort_index(inplace=True)
    
    # Log Transform 
    log_transform = df['Close']
    df['log'] = np.log(log_transform)
    
    # Log transform plots fine by itself
    ax = df[['Date', 'log']].plot(figsize=(14, 7), x='Date')
    
    # Adding another plot to the figure results in log_transform being set to 0 !
    ax = df[['Date', 'Close']].plot(figsize=(14, 7), x='Date', ax=ax)
    
    plot.show()
    

    Log Transformation plots by itself

    Adding 2nd plot breaks Log Transformation plot

    只需注意,用一个loc而不是2来绘制它们会导致日志转换行被压缩为0时出现相同的问题:

    ax = df[['Date', 'log', 'Close']].plot(x='Date')
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   Andrey Portnoy    6 年前

    您的日志转换数据比原始数据小几个数量级(根据定义,几乎是这样),因此它在绘图上以可视方式折叠: Close 峰值约为 20000 ,而 log 10 .

    如果您解决了索引问题,请使用以下方法在单独的绘图上绘图:

    df['log'] = np.log(df['Close'])
    df[['Close', 'log']].plot(figsize=(14, 7), subplots=True)
    
        2
  •  1
  •   DavidG    6 年前

    ax.twinx() . 然后可以使用将此新轴作为参数传递给plotting函数 ax= :

    ax = df[['Date', 'log']].plot(figsize=(14, 7), x='Date')
    
    ax2 = ax.twinx() # create seconday y axis and pass it into the plotting function below
    ax2 = df[['Date', 'Close']].plot(figsize=(14, 7), x='Date', ax=ax2)
    
        3
  •  0
  •   Sandipan Dey    6 年前

    还有另一种语法:

    df['rolling_mean'] = df.Close.rolling(window=7).mean()
    df.plot(x='Date', y=['Close', 'rolling_mean'], logy=True, figsize=(15,5))
    

    enter image description here