2016-04-02 10 views
0
  1. Neden xax'ım tarih olarak biçimlendirilmemiş? Bunu beklemem çünkü dataframe dizinini bir datetime endeksine ayarlıyorum.
  2. Tüm alt piksellerin aynı xaxis'i nasıl paylaşırım? Yapmak istediğim ne plt.subplots için çalışmaya alamadım çünkü şu anda yerine plt.subplots ait add_subplot kullanıyorum nedenidir - yapmaktır hangi nrows ve ncolsdinamik parametreleri herhangi şekli ile elimden çıktı çizelgeleri böylece İstiyorum: (4,1) şekil, (2,2), (1,4), vs.
  3. Her bir yaxis'e belirli bir sayı biçimini nasıl uygularım? Aşağıda, biçim dizgisini döndürmek için biçim dizesini d (dict) içinde aramaya çalışıyorum ve daha sonra bu biçimi yaxis biçimlendirmesine uygulayın ama çalışmıyor gibi görünüyor. İşte

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 ve yaxis sayı biçimlendirmesini uygular

var df: my x- bir tarih olarak biçimlendirilmemiş Neden

  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 

cevap

1

?

DateFormatter (veya benzeri) major_formatter olarak ayarlamalısınız - aşağıdaki kod.

Tüm alt piksellerin aynı xaxis'i nasıl paylaşırım?

Alt çağrılara bir sharex=True parametre ekleyin. .subplots()'dan eksenleri, aşağıdaki kodda gösterildiği gibi düzleştirirseniz kullanabilirsiniz.

Her bir yaxis'e belirli bir sayı biçimini nasıl uygularım?

enter image description here

: Bu böyle bir arsa üretecek

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. 

:

Sizin FuncFormatter ihtiyaçları aşağıdaki kodu gibi verilen tick_value ve position gelen biçimlendirilmiş bir dize döndürmek için