【问题标题】:Data in X axis from dataframe来自数据框的 X 轴数据
【发布时间】:2021-05-10 22:09:13
【问题描述】:

我有一些想要绘制的数据。我正在使用下面的代码:

import pandas_datareader as web

crypto_currency = 'BTC'
against_currency = 'USD'
start, end = dt.datetime(2012,1,1), dt.datetime.now()

df = web.DataReader(f'{crypto_currency}-{against_currency}', 'yahoo', start, end)
df.head()

数据框看起来像这样,

例如,如果我想绘制接近值,我会执行以下操作:

import seaborn as sns; sns.set(style="whitegrid")
import matplotlib.pyplot as plt

close_values = df.filter(['Close']).values

plt.figure(figsize=(20,8))
plt.plot(close_values, label=f'Close values')

plt.xlim(0, len(close_values))
plt.title(f'{crypto_currency}-{against_currency} close data')
plt.legend()
plt.show()

图表如下所示:

没关系,但我想在 X 轴上显示日期。我以为我只需要从索引中获取日期值并将它们添加为 X 轴,但这是错误的。我的编码是错误的还是在概念上是错误的?我知道这应该很容易,但我不知道该怎么做。

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    由于您使用Date 作为索引,因此只需立即绘制df['Close']

    import seaborn as sns; sns.set(style="whitegrid")
    import matplotlib.pyplot as plt
    
    plt.figure(figsize=(20,8))
    df['Close'].plot(title=f'{crypto_currency}-{against_currency} close data', label='Close values')
    
    plt.legend(loc='upper left')
    plt.xlabel('')
    plt.show()
    


    如果使用Date数据作为索引,则可以按年、月、日进行搜索。

    new_df = df['2020']
    new_df
    
    # df['2020-01':'2020-12'] --monthly
    # df['2020-01-01':'2020-12-31'] --daily
    
    plt.figure(figsize=(20,8))
    new_df['Close'].plot(title=f'2020 {crypto_currency}-{against_currency} close data')
    
    plt.xlabel('')
    plt.show()
    

    【讨论】:

      【解决方案2】:

      我发现 matplotlib 有时对日期有点挑剔 - 没有看到确切的数据格式,如果它是 pandas 格式,你可以尝试先将它们转换为介绍字符串,然后设置 xticks直接:

      plt.xticks(list(df.index.astype(str)), list(df.index.astype(str)), rotation=30)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-18
        • 1970-01-01
        • 2018-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多