2016-04-05 19 views
0

Kılavuzdaki çeşitli veri kümelerini çiziyorum. Zaman serileri, bir yıllık bir süre boyunca uzar, bu yüzden bir ay-yıl kene işaretçisine sahip olmak isterim, ancak kene etiketleri birbiri ile hızlı bir şekilde örtüşür. Bunu aşmak için xticklables'ı döndürmeyi denedim. Ancak, bu beklendiği gibi çalışmıyor. en alt x ekseni üzerinde hiçbir ticklabels olacak gibi Senaryoyu çalıştırırsanızxticklabels, döndürüldükten sonra kayboluyor

from __future__ import division, print_function 

import pandas as pd, numpy as np 
from pylab import * 

index = pd.date_range('20140901','20150901',freq='1H') 
data = np.sin(np.pi*np.arange(index.shape[0])/180) 
df = pd.DataFrame(index=index,data=data,columns=list("A")) 

fig = figure(figsize=(3.25,4.0)) 
gs = GridSpec(5,2) 
gs.update(left=0.08, right=0.925, top=0.95, bottom=0.05, hspace=0.0, wspace=0.0) 

ax0 = subplot(gs[0]) 
ax1 = subplot(gs[1]) 
ax2 = subplot(gs[2]) 
ax3 = subplot(gs[3]) 
ax4 = subplot(gs[4]) 
ax5 = subplot(gs[5]) 
ax6 = subplot(gs[6]) 
ax7 = subplot(gs[7]) 

for axis in xrange(8): 
    ax = eval('ax'+str(axis)) 

    ax.plot(df.index,df.A,'k') 

    # format y-axes 
    if axis in np.arange(1,8,2): 
     ax.set_yticks(np.arange(-1.5,1.5,0.50),minor=False) 
     ax.set_yticks(np.arange(-1.5,1.5,0.25),minor=True) 
     ax.set_yticklabels([]) 

    elif axis in np.arange(2,8,2): 
     ax.set_yticks(np.arange(-1.5,1.5,0.50),minor=False) 
     ax.set_yticks(np.arange(-1.5,1.5,0.25),minor=True) 

    elif axis==0: 
     ax.set_yticks(np.arange(-1.5,1.6,0.50),minor=False) 
     ax.set_yticks(np.arange(-1.5,1.5,0.25),minor=True) 

    ax.set_ylim([-1.5,1.5]) 

    # format x-axes 
    if axis in np.arange(0,6): 
     ax.set_xticklabels([]) 
     ax.xaxis.set_minor_locator(dates.MonthLocator(interval=1)) 
     ax.xaxis.set_major_locator(dates.MonthLocator(interval=3)) 

    elif axis in [6,7]: 
     ax.xaxis.set_minor_locator(dates.MonthLocator(interval=1)) 
     ax.xaxis.set_major_locator(dates.MonthLocator(interval=3)) 
     ax.xaxis.set_major_formatter(dates.DateFormatter('%b-%Y')) 

    ax.set_xlim([dt.datetime(2014,9,1),dt.datetime(2015,9,1)]) 

    ax.tick_params(axis='both',which='major',direction='in',length=4,width=1,labelsize=8) 
    ax.tick_params(axis='both',which='minor',direction='in',length=2,width=1)  


    # insert text boxes 
    ax.annotate('A', 
       xycoords='axes fraction', 
       xy=(0.05,0.75), 
       horizontalalignment='left', 
       verticalalignment='bottom', 
       fontsize=8) 

ax6.set_xticklabels(ax6.get_xticklabels(),rotation=45) 
ax7.set_xticklabels(ax7.get_xticklabels(),rotation=45) 

: Burada olmayan bir asgari çalışma örneğidir. Ancak, son iki satırı açıklarsam, betiği çalıştırın, ardından son iki satırı manuel olarak girerek rotasyonun beklendiği gibi yapılmasını sağlayın. Kene etiketlerini döndürmek için birkaç yönteme baktım, bunların hiçbiri işe yaramıyor (yani hepsi aynı "kaybolma" problemine sahipler). Bunun neden olduğunu ve nasıl düzeltileceğini bilen var mı?

Python 2.7, Matplotlib 1.5.1, Pandalar 0.18.0

enter image description hereenter image description here

+0

Bize grafiklerinizi gösterin. – Hun

+0

Bitti. İlk rakam, son iki satır yorumlanmadan betik çalıştırılarak üretildi, ikincisi son iki satırın yorumlanması, betiğin çalıştırılması ve son iki satırın manüel olarak girilmesiyle üretildi. Gönderilen komut dosyasını çalıştırarak bu rakamları yeniden oluşturabilirsiniz. – tnknepp

+0

Bu arada, kötü görüntü çözünürlüğü için özür dilerim, ancak görülmesi gereken tek şey, onay işaretlerinin ilk görüntüde gösterilmemesidir. – tnknepp

cevap

1

böyle programınız çalışacaktır değiştirme.

# format x-axes 
if axis in np.arange(0,6): 
    ax.set_xticklabels([]) 
    ax.xaxis.set_minor_locator(dates.MonthLocator(interval=1)) 
    ax.xaxis.set_major_locator(dates.MonthLocator(interval=3)) 

elif axis in [6,7]: 
    ax.set_xticklabels(index.strftime('%b-%Y'),rotation=45)  # Add this line 
    ax.xaxis.set_minor_locator(dates.MonthLocator(interval=1)) 
    ax.xaxis.set_major_locator(dates.MonthLocator(interval=3)) 
    # ax.xaxis.set_major_formatter(dates.DateFormatter('%b-%Y')) # This not needed 
+0

Güzel çalışır. Orijinal kodumun neden etiketlerin kaybolmasına neden sebep olduğunu biliyor musunuz? Belki de pylab içinde bir kuark ... – tnknepp

+0

Bu arada, cevabın rotasyon = 45 parametresini ax.set_xticklabels'e ekledim çünkü etiket rotasyonu sorunun bir parçasıydı. – tnknepp

İlgili konular