2016-04-02 4 views
0
  1. Почему мой xaxis не отформатирован как дата? Я ожидаю, потому что я устанавливаю индекс dataframe в индекс datetime.
  2. Как сделать все подзаголовки одинаковыми xaxis? Причины настоящего время я использую add_subplot вместо plt.subplots, потому что я не мог заставить plt.subplots работать на то, что я хочу делать - что делать nrows и ncolsдинамических параметров, так что я может выводить графики с любой формой Я хочу: (4,1) форму, (2,2), (1,4) и т. Д.
  3. Как применить определенный формат чисел к каждому yaxis? Ниже я пытаюсь найти строку сюжета в d (dict), чтобы вернуть строку формата, а затем применить этот формат к форматированию yaxis, но он, похоже, не работает.

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.ticker import FuncFormatter 
plt.style.use('ggplot') 

df = pd.DataFrame({'Clicks': {0: 334, 1: 554, 2: 433, 3: 5353, 4: 433}, 
        'Impressions': {0: 3242, 1: 43345, 2: 3456, 3: 34543, 4: 3453}, 
        'Day': {0: '12/1/2015', 1: '12/2/2015', 2: '12/3/2015', 3: '12/4/2015', 4: '12/5/2015'}, 
        'Conv': {0: 23, 1: 23, 2: 45, 3: 56, 4: 45}, 
        'Cost': {0: 414.16, 1: 686.96, 2: 536.91, 3: 637.72, 4: 536.91}}, 
        columns=['Day', 'Impressions', 'Clicks', 'Cost', 'Conv']) 

df['Day'] = pd.to_datetime(df['Day']) 
df = df.set_index('Day').resample('d', how='sum') 

window = 2 
nrows = 2 
ncols = 2 

plots = ['Impressions', 'Clicks', 'Cost', 'Conv'] 
d = {'Impressions':'{:,.0f}', 'Clicks': '{:,.0f}', 'Cost':'${:,.2f}', 'Conv': '{:,.0f}'} 

fig = plt.figure(figsize=(8,6)) 
for i, plot in enumerate(plots): 
    ax = fig.add_subplot(nrows, ncols, i+1) 
    ax.plot(df.index, df[plot]) 
    ma = pd.rolling_mean(df[plot], window) 
    ax.plot(df.index, ma) 
    mstd = pd.rolling_std(df[plot], window) 
    ax.fill_between(df.index, ma - 2*mstd, ma + 2*mstd, color='b', alpha=0.1) 
    ax.set_title(plot) 
    ax.get_yaxis().set_major_formatter(FuncFormatter(lambda x, p: d[plot].format(x))) 
    plt.tight_layout() 

plt.show() 

Plot exampleMatplotlib применять форматирование числа xaxis и yaxis

Вот df:

  Impressions Clicks Cost Conv 
Day           
2015-12-01   3242  334 414.16 23 
2015-12-02  43345  554 686.96 23 
2015-12-03   3456  433 536.91 45 
2015-12-04  34543 5353 637.72 56 
2015-12-05   3453  433 536.91 45 

ответ

1

Почему моя Xaxis не отформатирован как дата?

Вам необходимо установить DateFormatter (или аналогичный) как major_formatter - см. Код ниже.

Как сделать все подзаголовки одинаковыми xaxis?

Добавить sharex=True параметр, который вы используете для подвыборов. Вы можете использовать оси от .subplots(), если вы их сглаживаете, как показано в коде ниже.

Как применить определенный формат номера к каждому yaxis?

Ваши FuncFormatter потребности вернуть отформатированную строку из данного tick_value и position как в коде ниже:

fig, axes = plt.subplots(2, 2, figsize=(8,6), sharex=True) 

for ax, plot in zip(axes.flat, plots): 
    ax.plot(df.index, df[plot]) 
    ma = pd.rolling_mean(df[plot], window) 
    ax.plot(df.index, ma) 
    mstd = pd.rolling_std(df[plot], window) 
    ax.fill_between(df.index, ma - 2*mstd, ma + 2*mstd, color='b', alpha=0.1) 
    ax.set_title(plot) 
    ax.yaxis.set_major_formatter(FuncFormatter(lambda x, p: '{:.0f}'.format(x))) 
    ax.xaxis.set_major_formatter(DateFormatter('%d-%H:%M')) # or '%d.%m.%y' 

fig.autofmt_xdate() # This will rotate the xticklabels by 30 degrees so that all dates are readable. 
fig.tight_layout() # no need to call this inside the loop. 

Это произведет сюжет так:

enter image description here

 Смежные вопросы

  • Нет связанных вопросов^_^