2016-04-02 9 views
0
  1. Warum ist meine Xaxis nicht als Datum formatiert? Ich erwarte es, weil ich den Dataframe-Index auf einen Datetime-Index setze.
  2. Wie mache ich alle Subplots die gleiche Xaxis teilen? Der Grund, warum ich zur Zeit add_subplot statt plt.subplots verwenden, weil ich nicht plt.subplots bekommen könnte zu arbeiten, was ich tun will - was nrows und ncolsdynamische Parameter zu machen ist, so dass ich ausgeben kann Diagramme mit beliebiger Form Ich möchte: (4,1) Form, (2,2), (1,4) usw.
  3. Wie kann ich ein bestimmtes Zahlenformat auf jede Yaxis anwenden? Im Folgenden versuche ich, die Zeichenkette in d (dict) zu suchen, um die Formatzeichenfolge zurückzugeben und dann dieses Format auf die Yaxis-Formatierung anzuwenden, aber es scheint nicht zu funktionieren.

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 anwenden Xaxis und Yaxis Nummer Formatierung

Hier ist die 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 

Antwort

1

Warum ist mein xaxis nicht als Datum formatiert?

Sie müssen DateFormatter (oder ähnlich) wie major_formatter setzen - siehe Code unten.

Wie mache ich alle Subplots die gleiche Xaxis teilen?

Fügen Sie sharex=True Parameter zu Ihrem Subplots-Aufruf hinzu. Sie können Achsen von .subplots() verwenden, wenn Sie sie glätten, wie es im folgenden Code gezeigt wird.

Wie kann ich ein bestimmtes Zahlenformat auf jede Yaxis anwenden?

Ihre FuncFormatter Bedürfnisse von bestimmten tick_value einen formatierten String zurück und position wie in der unten stehenden Code:

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. 

Dieses ein Grundstück wie folgt produzieren:

enter image description here

Verwandte Themen