Bir matplotlib şeklinde, kene etiketleri için yazı tipi boyutunu nasıl ax1.set_xticklabels()
daha küçük kullanarak nasıl yapabilirim ?
Ayrıca, yataydan dikeye nasıl döndürülebilir?
Bir matplotlib şeklinde, kene etiketleri için yazı tipi boyutunu nasıl ax1.set_xticklabels()
daha küçük kullanarak nasıl yapabilirim ?
Ayrıca, yataydan dikeye nasıl döndürülebilir?
Yanıtlar:
Daha yeni MPL sürümlerinin bu görev için bir kısayolu olduğunu lütfen unutmayın. Bu sorunun diğer cevabında bir örnek gösterilmektedir: https://stackoverflow.com/a/11386056/42346
Aşağıdaki kod, açıklama amaçlıdır ve mutlaka optimize edilmeyebilir.
import matplotlib.pyplot as plt
import numpy as np
def xticklabels_example():
fig = plt.figure()
x = np.arange(20)
y1 = np.cos(x)
y2 = (x**2)
y3 = (x**3)
yn = (y1,y2,y3)
COLORS = ('b','g','k')
for i,y in enumerate(yn):
ax = fig.add_subplot(len(yn),1,i+1)
ax.plot(x, y, ls='solid', color=COLORS[i])
if i != len(yn) - 1:
# all but last
ax.set_xticklabels( () )
else:
for tick in ax.xaxis.get_major_ticks():
tick.label.set_fontsize(14)
# specify integer or one of preset strings, e.g.
#tick.label.set_fontsize('x-small')
tick.label.set_rotation('vertical')
fig.suptitle('Matplotlib xticklabels Example')
plt.show()
if __name__ == '__main__':
xticklabels_example()
plt.setp
. (Ayrıca, bir göz atın ax.tick_params
) Örneğin, sadece yapabilirsiniz plt.setp(ax.get_xticklabels(), rotation='vertical', fontsize=14)
. Ayrıca, eksen nesnelerinin ax.is_last_row()
örneğiniz gibi durumlarda kullanışlı olabilecek bir yöntemi vardır. Bunun yerine if i != len...
, yapabilirsiniz if not ax.is_last_row()
. (Neden bir yöntem, hiçbir fikrim yok ... Matplotlib görünüşe göre özellikleri nefret ediyor!)
is_last_row()
, teşekkürler! plt.setp
Geçmişte kullandım ve kene etiketlerini özelleştirmenin daha kanonik bir yolunu temsil ettiğinden emin değildi. Bu şüpheyi ortadan kaldırdınız, teşekkürler. Daha geniş anlamda: yanıtlarınız, özellikle de matplotlib
etikette, beni sık sık şaşırtıyor. Harika işlere devam edin.
plt.setp
"matlab-ism" dir ve açık bir döngü muhtemelen çok daha pitoniktir. Bir matlab dönüşümü olmak, kendimi, setp
doğal hissettiriyor, ancak her biri kendi başına. İkisi de oldukça okunaklı, imo
ax.tick_params(axis='x', labelsize=8)
get_ticklabels
değilget_major_ticks
Aslında daha basit bir yol var. Az önce buldum:
import matplotlib.pyplot as plt
# We prepare the plot
fig, ax = plt.subplots()
# We change the fontsize of minor ticks label
ax.tick_params(axis='both', which='major', labelsize=10)
ax.tick_params(axis='both', which='minor', labelsize=8)
Bu sadece label
sorunuzun bir kısmının boyutuna cevap verir .
axis = 'x'
axis = 'y'
Hem yazı tipi boyutunu hem de döndürmeyi aynı anda belirtmek için şunu deneyin:
plt.xticks(fontsize=14, rotation=90)
Alternatif olarak, şunları yapabilirsiniz:
import matplotlib as mpl
label_size = 8
mpl.rcParams['xtick.labelsize'] = label_size
plt.tick_params(axis='both', which='minor', labelsize=12)
ax.xaxis.set_tick_params(labelsize=20)
Başka bir alternatif
Yan yana iki parselim var ve kene etiketlerini ayrı ayrı ayarlamak istiyorum.
Yukarıdaki çözümler yakındı ancak benim için çalışmadılar. Çözümümü bu matplotlib sayfasından buldum .
ax.xaxis.set_tick_params(labelsize=20)
Bu hile yaptı ve doğrudan noktaya geldi. Benim kullanım durumum için, sağdaki arsa ayarlanması gerekiyordu. Yeni onay etiketleri oluşturduğumdan beri soldaki çizim için, yazı tipini etiketleri ayarlamakla aynı işlemde ayarlayabildim .
yani
ax1.set_xticklabels(ax1_x, fontsize=15)
ax1.set_yticklabels(ax1_y, fontsize=15)
bu yüzden doğru arsa için kullandım,
ax2.xaxis.set_tick_params(labelsize=24)
ax2.yaxis.set_tick_params(labelsize=24)
Küçük bir incelik ... Biliyorum ... ama umarım bu birine yardımcı olur :)
Büyüklük etiketinin yazı tipi boyutunu nasıl ayarlayacağını bilen bonus puanları.
Yazı tipi boyutu gibi etiket görüntüleme parametrelerini aşağıdaki gibi bir satırla da değiştirebilirsiniz:
zed = [tick.label.set_fontsize(14) for tick in ax.yaxis.get_major_ticks()]
Daha küçük yazı tipi için
ax1.set_xticklabels(xticklabels, fontsize=7)
ve çalışıyor!