2016-07-01 4 views
1

Я пытаюсь построить график таймсерийного интернет-трафика из 11 городов Европы.Тонкая настройка морского графика из pandas dataFrame

я получил доступ к набору данных из internet traffic data of 11 european cities

# !/usr/bin/env python3.4 
# -*- coding: utf-8 -*- 

import pandas as pd 
import seaborn as sns 
import matplotlib.pyplot as plt 

df = pd.read_csv('internet-traffic-data-in-bits.csv') 

print(df.dtypes) 


bp = sns.tsplot([df.Internet_traffic_data_in_bits],color="indianred",) 

bp.set(xlabel='Date', ylabel='Internet Traffic Data (bits) in 11 European cities') 

plt.xticks(rotation=45) 
# plt.tight_layout() 
plt.show() 

График, я получаю здесь показано. Internet traffic data (bits) in 11 European cities

Мои вопросы касаются главным образом настройки или украшения следующего графика.

1) Я хочу, чтобы date был отмечен чаще на оси х. 2) Я бы предпочел, чтобы числа Y-оси имели 0,6x10^12 (или что-то подобное) для каждого значения, а не 1e12 на самом верху. 3) Я звоню на matplotlib.pyplot объект на несколько случайностей. Я хотел бы избежать этого и напрямую обращаться к seaborn Объект

Было бы здорово, если бы кто-нибудь мог мне помочь.

ответ

0

Вот как я мог бы сделать это двумя разными способами, в зависимости от того, как вы хотите отформатировать свои y-тики.

У меня нет вашего набора данных, поэтому я сам создал его.

Импорт:

import pandas as pd 
import seaborn as sns 
import matplotlib.pyplot as plt 
# Ticker module 
import matplotlib.ticker as mtick 

Код для первого подхода:

#df = pd.read_csv('internet-traffic-data-in-bits.csv') 
bp = sns.tsplot([df.traffic],color="indianred",) 
bp.set(xlabel='Date', ylabel='Internet Traffic Data (bits) in 11 European cities') 
loc = mtick.MultipleLocator(base=5.0) # This locator puts ticks at regular intervals 
bp.xaxis.set_major_locator(loc) # Apply the locator to the x-axis 

# First approach: Format each tick in the "1.52e12" format. 
bp.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.2e')) # Format each y-tick in scientific format. 
plt.tight_layout() 
plt.show() 

Результирующий участок:

Plot for first approach

Код для второго подхода:

#df = pd.read_csv('internet-traffic-data-in-bits.csv') 
bp = sns.tsplot([df.traffic],color="indianred",) 
bp.set(xlabel='Date', ylabel='Internet Traffic Data (bits) in 11 European cities') 
loc = mtick.MultipleLocator(base=5.0) # This locator puts ticks at regular intervals 
bp.xaxis.set_major_locator(loc) # Apply the locator to the x-axis 

# Second approach: Fancier formatting using a function. 
def as_si(x, *args): 
    """ 
    Format a number in a custom scientific notation, using a fixed number of decimal places. 
    """ 
    ndp = 2 # Number of decimal places 
    s = '{x:0.{ndp:d}e}'.format(x=x, ndp=ndp) # Format the string: 1520 becomes 1.52e3 
    m, e = s.split('e') # Split the string around the letter e 
    return '{m:s}x10^{e:d}'.format(m=m, e=int(e)) # Return a formatted string with exponent. 

bp.yaxis.set_major_formatter(mtick.FuncFormatter(as_si)) # Format each y-tick in the custom format. 
plt.tight_layout() 
plt.show() 

Результирующий участок: Plot for second approach