Pandalar arsa ayarını x ekseninde büyük ve küçük kene ve etiketler timeseries
Serisi grafik Pandalar bir zaman serisi nesne çizilen bir süre için büyük ve küçük xticks ve onların etiketleri ayarlamak mümkün olmak istiyorum.
Pandalar 0.9 "yenilikler" diyor: sayfa
< . p ^"to_pydatetime veya kullanmak için bir dönüştürücü kayıt da yapabilirsiniz Zaman damgası türü"
ama matplotlib kullanabilirsiniz ax.xaxis.set_major_locator
ax.xaxis.set_major_formatter
(ve) küçük komutları nasıl yapacağımı çözemiyorum.
Eğer pandalar kez dönüştürmeden onları kullanırsam, x ekseni, kene ve etiketler yanlış.
'Xticks' parametresi pandalar için büyük keneler geçebilir.kullanarak arsa, ve sonra büyük onay etiketleri ayarlayın. Küçük keneler bu yaklaşımı kullanarak nasıl yapacağımı çözemiyorum. (Varsayılan küçük keneler pandalar tarafından belirlenen etiketleri ayarlayabiliyorum.arsa)
İşte benim test kodu:
import pandas
print 'pandas.__version__ is ', pandas.__version__
print 'matplotlib.__version__ is ', matplotlib.__version__
dStart = datetime.datetime(2011,5,1) # 1 May
dEnd = datetime.datetime(2011,7,1) # 1 July
dateIndex = pandas.date_range(start=dStart, end=dEnd, freq='D')
print "1 May to 1 July 2011", dateIndex
testSeries = pandas.Series(data=np.random.randn(len(dateIndex)),
index=dateIndex)
ax = plt.figure(figsize=(7,4), dpi=300).add_subplot(111)
testSeries.plot(ax=ax, style='v-', label='first line')
# using MatPlotLib date time locators and formatters doesn't work with new
# pandas datetime index
ax.xaxis.set_minor_locator(matplotlib.dates.WeekdayLocator(byweekday=(1),
interval=1))
ax.xaxis.set_minor_formatter(matplotlib.dates.DateFormatter('%d\n%a'))
ax.xaxis.grid(True, which="minor")
ax.xaxis.grid(False, which="major")
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('\n\n\n%b%Y'))
plt.show()
# set the major xticks and labels through pandas
ax2 = plt.figure(figsize=(7,4), dpi=300).add_subplot(111)
xticks = pandas.date_range(start=dStart, end=dEnd, freq='W-Tue')
print "xticks: ", xticks
testSeries.plot(ax=ax2, style='-v', label='second line',
xticks=xticks.to_pydatetime())
ax2.set_xticklabels([x.strftime('%a\n%d\n%h\n%Y') for x in xticks]);
# set the text of the first few minor ticks created by pandas.plot
# ax2.set_xticklabels(['a','b','c','d','e'], minor=True)
# remove the minor xtick labels set by pandas.plot
ax2.set_xticklabels([], minor=True)
# turn the minor ticks created by pandas.plot off
# plt.minorticks_off()
plt.show()
print testSeries['6/4/2011':'6/7/2011']
ve çıkış
pandas.__version__ is 0.9.1.dev-3de54ae
matplotlib.__version__ is 1.1.1
1 May to 1 July 2011 <class 'pandas.tseries.index.DatetimeIndex'>
[2011-05-01 00:00:00, ..., 2011-07-01 00:00:00]
Length: 62, Freq: D, Timezone: None
xticks: <class 'pandas.tseries.index.DatetimeIndex'>
[2011-05-03 00:00:00, ..., 2011-06-28 00:00:00]
Length: 9, Freq: W-TUE, Timezone: None
2011-06-04 -0.199393
2011-06-05 -0.043118
2011-06-06 0.477771
2011-06-07 -0.033207
Freq: D
Güncelleme:Büyük .NET etiketleri oluşturmak için bir döngü kullanarak istediğim düzeni daha yakın almak mümkün oldum:
# only show month for first label in month
month = dStart.month - 1
xticklabels = []
for x in xticks:
if month != x.month :
xticklabels.append(x.strftime('%d\n%a\n%h'))
month = x.month
else:
xticklabels.append(x.strftime('%d\n%a'))
Ama bu x ekseni kullanarak balta yapmak gibidir.açıklama, mümkün değil ama ideal.
CEVAP
Her iki pandas
matplotlib.dates
kene bulmak için matplotlib.units
kullanın.
Ama süre matplotlib.dates
rahat ve kolay bir şekilde ayarlamak için keneler el ile, pandalar gibi görünüyor odağı otomatik biçimlendirme şimdiye kadar (bir bak code tarih dönüştürme ve biçimlendirme pandalar).
Şu an için matplotlib.dates
@onun yorum BrenBarn tarafından belirtildiği gibi) kullanmak daha makul görünüyor.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as dates
idx = pd.date_range('2011-05-01', '2011-07-01')
s = pd.Series(np.random.randn(len(idx)), index=idx)
fig, ax = plt.subplots()
ax.plot_date(idx.to_pydatetime(), s, 'v-')
ax.xaxis.set_minor_locator(dates.WeekdayLocator(byweekday=(1),
interval=1))
ax.xaxis.set_minor_formatter(dates.DateFormatter('%d\n%a'))
ax.xaxis.grid(True, which="minor")
ax.yaxis.grid()
ax.xaxis.set_major_locator(dates.MonthLocator())
ax.xaxis.set_major_formatter(dates.DateFormatter('\n\n\n%b\n%Y'))
plt.tight_layout()
plt.show()
(benim yerel Salı [Salı] Salı [Di]) olur Alman
Java sınıf isimleri büyük / küçük harf...
oyunu tüm büyük küçük harfe dönüştürme...
varsayılan " dpi değeri;büyük"...
Neden işlevleri ve yöntemleri PHP büyü...
Python dizeleri büyük / küçük harf Yok...