Python matplotlib изменяет масштаб основной единицы по оси X - PullRequest
0 голосов
/ 22 мая 2019

У меня есть фигура, которая не показывает правильные даты на оси X. Возможно, потому что есть слишком много наблюдений, чтобы показать, и это приводит к тому, что не показывает никаких. Я не уверен, стоит ли мне использовать функцию set_xticks, но она дает мне атрибут error

AttributeError: модуль 'matplotlib.pyplot' не имеет атрибута 'set_xticks'

Мой текущий код такой:

def plot_w(dataframe,ticker,benchmark):

    # a. Printing highest observed values and corresponding date
    max1 = data_df.loc[:, ticker].max()
    max2 = data_df.loc[:, benchmark].max()
    max1_date = data_df[data_df[ticker] == max1]['Date'].values[0] 
    max2_date = data_df[data_df[benchmark] == max2]['Date'].values[0]
    print("The highest adjusted close price observed at: \n", ticker, ":", max1.round(2), "USD on the date ", max1_date, 
          "\n", benchmark, ":", max2.round(2), "USD on the date", max2_date)

    # b. Setting up plot based on dropdown input
    I = data_df.columns == ticker
    mpl_figure = dataframe.loc[:, ['Date',ticker,benchmark]]
    mpl_figure.plot(x='Date', y=[ticker,benchmark], style=['-b','-k'], figsize=(10, 5), fontsize=11, legend='true', linestyle = '-')
    plt.ylabel("USD",labelpad=5)
    plt.locator_params(axis='x', nbins=20)
    title = "Adjusted close prices for " + ticker + " and " + benchmark
    plt.title(title)
    plt.set_xticks(data_df['Date'].values) # Code fails here

# c. Creating the widget for the plot
widgets.interact(plot_w,
    dataframe = widgets.fixed(data_df),
    ticker = widgets.Dropdown(
            options=data_df.columns,
            value='ATVI',
            description='Company 1:',
            disabled=False,
        ),
    benchmark = widgets.Dropdown(
            options=data_df.columns,
            value='AAPL',
            description='Company 2:',
            disabled=False,
        )
)

Фигура выглядит так: enter image description here

Ответы [ 3 ]

0 голосов
/ 22 мая 2019

Кроме того, вы можете попробовать следующее внутри вашей функции, работающей с объектом оси. Идея состоит в том, чтобы сначала создать экземпляр оси ax, а затем передать его команде plot. Позже используйте это, чтобы установить x-галочки.

I = data_df.columns == ticker
fig, ax = plt.subplots(figsize=(10, 5))
mpl_figure = dataframe.loc[:, ['Date',ticker,benchmark]]
mpl_figure.plot(x='Date', y=[ticker,benchmark], style=['-b','-k'], ax=ax, fontsize=11, legend='true', linestyle = '-')
plt.ylabel("USD",labelpad=5)
plt.locator_params(axis='x', nbins=20)
title = "Adjusted close prices for " + ticker + " and " + benchmark
plt.title(title)
ax.set_xticks(data_df['Date'].values) 
0 голосов
/ 22 мая 2019

Модуль matplotlib.pyplot не имеет функции set_xticks, но имеет функцию xticks. ( ссылка на документ ). Однако объект класса matplotlib.axes.Axes имеет set_xticks ( ссылка на документ ).

Таким образом, самое простое исправление в вашем коде

plt.xticks(data_df['Date'].values)

Примечание: я не совсем уверен, почему matplotlib.pyplot хранит две функции с (почти) одинаковым эффектом, но разными именами. Я предполагаю, что разрешение вызывать его из модуля или объекта является имитацией MATLAB, но в MATLAB имя функции такое же.

0 голосов
/ 22 мая 2019

set_xticks для оси, если вы устанавливаете галочки для фигуры, это

plt.xticks(data_df['Date'].values)
...