اذهب إلى المحتوى
  • 0

تغيير حجم التسميات tick labels و تدويرها في Matplotlib | بايثون

Ali Ismael

السؤال

لدي ال plot التالي: 

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 1000)
y = np.sin(x)
fig, ax = plt.subplots()
ax.plot(x, np.sin(x), '--b', label ='Sine', color="r",ls='solid')
plt.title('Matplotlib xticklabels Example')
plt.show()

والخرج:
index.png.f32e905227fb893a14d3219427793f4f.png لكن أريد تغيير حجم التسميات (labels) للمحور الأفقي وتدويرها، كيف يمكن القيام بذلك؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

لتغيير حجمها يمكنك استخدام tick_params كالتالي:

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 1000)
y = np.sin(x)
fig, ax = plt.subplots()
ax.plot(x, np.sin(x), '--b', label ='Sine', color="r",ls='solid')
# x تغيير حجم الخط للمحور الأفقي 
ax.tick_params(axis='x', which='major', labelsize=20)
plt.title('Matplotlib xticklabels Example')
plt.show()

والخرج:
2.png.d1df5b6536e88080fdec959933c783df.png

حيث أن axis تمثل المحاور التي نريد تطبيق التغيرات عليها ويأخذ القيم {'x', 'y', 'both'}. أما which فكما نعلم قد يكون هناك ticks أساسية وثانوية فهنا من خلال هذا الوسيط أنت تحدد فيما إذا كنت تريد تطبيق التغيرات على العلامات الريسية أم الثانوية أم كلاهما {'major', 'minor', 'both'}. والأهم labelsize الذي يحدد الحجم.
أما بالنسبة لتدوير ال tick_params  فيمكنك استخدام plt.setp التي تمنحك التحكم الكامل بعملية التدوير وبالدرجة التي تريدها من خلال الوسيط rotation كالتالي:

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 1000)
y = np.sin(x)
fig, ax = plt.subplots()
ax.plot(x, np.sin(x), '--b', label ='Sine', color="r",ls='solid')
# x تغيير حجم الخط للمحور الأفقي 
ax.tick_params(axis='x', which='major', labelsize=20)
# عملية التدوير
plt.setp(ax.xaxis.get_majorticklabels(), rotation=270) # تدوير 270 درجة
plt.title('Matplotlib xticklabels Example')
plt.show()

الخرج:
index.png.2e9a78bc8c4eeef25e228069f0a2c4eb.png
حيث نقوم بتمرير درجة التدوير التي نحتاجها مثلاً قمنا بتدويرها 270 درجة لجعلها عمودية، وأيضاً يجب أن نمرر ax.xaxis.get_majorticklabels كوسيط أول للدالة والتي تمثل كل ال ticklabels للمحور الأفقي.
أما إذا أردنا تطبيق ذلك على المحور y ففقط نبدل المحور الذي سيتم تطبيق التدوير عليه أي تصبح القيمة الممررة لأول وسيط في الدالة هي ax.yaxis.get_majorticklabels. أي:

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 1000)
y = np.sin(x)
fig, ax = plt.subplots()
ax.plot(x, np.sin(x), '--b', label ='Sine', color="r",ls='solid')
# x تغيير حجم الخط للمحور الأفقي 
ax.tick_params(axis='x', which='major', labelsize=20)
# عملية التدوير
plt.setp(ax.yaxis.get_majorticklabels(), rotation=270) # تدوير 270 درجة
plt.title('Matplotlib xticklabels Example')
plt.show()

وأخيراً إذا كان لديك ticklabels  ثانوية نمرر للوسيط الأول القيمة ax.youraxix.get_minorticklabels. أي:

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 1000)
y = np.sin(x)
fig, ax = plt.subplots()
ax.plot(x, np.sin(x), '--b', label ='Sine', color="r",ls='solid')
# x تغيير حجم الخط للمحور الأفقي 
ax.tick_params(axis='x', which='major', labelsize=20)
# عملية التدوير
plt.setp(ax.yaxis.get_minorticklabels(), rotation=270) # تدوير 270 درجة
plt.title('Matplotlib xticklabels Example')
plt.show()

وكذلك يمكنك تدويرها من خلال set_rotation كالتالي:

for tick in ax.get_xticklabels():
    tick.set_rotation(270)

كذلك بالنسبة للحجم:

for tick in ax.xaxis.get_major_ticks():
	tick.label.set_fontsize(20) 

 

تم التعديل في بواسطة Ali Haidar Ahmad
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

يمكن تعديل خصائص التسميات على المحور x عن طريق التابع xticks الموجود داخل plt

  •  لتدوير التسميات نمرر المعامل rotation بالقيمة 90 أو -90 حسب اتجاه الدوران المراد
plt.xticks(rotation=90)
  • لتكبير حجم المسميا نمرر المعامل fontsize بقياس الخط المناسب
plt.xticks(fontsize=20)

يمكن دمن التعليمتين معا يصبح مثالك كالتالي

...
# تدوير وتكبير حجم التسميات
plt.xticks(rotation=90, fontsize=20)

plt.title('Matplotlib xticklabels Example')
plt.show()

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...