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

رسم خطوط شبكة grid للرسم البياني في Matplotlib

Ali Ismael

السؤال

لقد قمت بتمثيل بياناتي، لكن أريد أن أضيف للرسم البياني شبكة grid، كيف نقوم بذلك؟ 
هذا هو الكود:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import colors
from matplotlib.ticker import PercentFormatter
# إنشاء بيانات عشوائية 
N_points = 984
n_bins = 15
# إنشاء توزيع
x = np.random.randn(N_points)
y = .8 ** x + np.random.randn(984) + 25
legend = ['distribution']
# إنشاء الهيستوغرام
fig, axs = plt.subplots(1, 1,
						figsize =(10, 7),
						tight_layout = True)
#ticks حذف العلامات 
axs.xaxis.set_ticks_position('none')
axs.yaxis.set_ticks_position('none')
# إضافة نص للشكل
fig.text(0.9, 0.15, 'Histogram',
		fontsize = 13,color ='red',ha ='right',
		va ='top',alpha = 0.7)
# plot حذف خطوط حاويةال 
for s in ['top', 'bottom', 'left', 'right']:
	axs.spines[s].set_visible(False)
#وضع مسافة بين التسميات وبين المحاور
axs.xaxis.set_tick_params(pad = 4)
axs.yaxis.set_tick_params(pad = 8)
# إنشاء الهستوغرام
N, bins, patches = axs.hist(x, bins = n_bins)
# تحديد الألوان
fracs = ((N**(9)) / N.max())
norm = colors.Normalize(fracs.min(), fracs.max())
for thisfrac, thispatch in zip(fracs, patches):
	color = plt.cm.viridis(norm(thisfrac))
	thispatch.set_facecolor(color)
# تسمية للمحاور
plt.xlabel("X-axis")
plt.ylabel("y-axis")
plt.legend(legend)
# عنوان
plt.title('Histogram')
# عرض
plt.show()

وهذه هي النتيجة:
index.png.0f73adcfd1f9aa66faf08fc4c9d755ff.png
 

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

Recommended Posts

  • 1

نستخدم الدالة grid لإضافة شبكة إلى البيان الخاص بك أيَاً كان نوعه:

matplotlib.pyplot.grid(b=None, which=’major’, axis=’both’, **kwargs)

حيث أن الوسيط الأول قيمة منطقية لتحديد ما إذا كان سيتم إظهار خطوط الشبكة أم لا. الافتراضي هو True. أما الوسيط which لتحديد الخطوط التي ستطبق عليها التغيرات وتأخذ القيم {‘major’, ‘minor’, ‘both’} أي على كلا الخطوط أو على الخطوط الثانوية فقط أو الرئيسية فقط (الافتراضي). والوسيط axis  لتحديد المحور المراد تطبيق التغييرات عليه {‘both’, ‘x’, ‘y’}. وأخيراً kwargs تمثل مجموعة خيارات أخرى مثل حجمها ولونها ونوع الخطوط وسماكتها يمكنك إضافتها (سأذكر أهمها في المثال).
وبالتالي يكون الكود:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import colors
from matplotlib.ticker import PercentFormatter
# إنشاء بيانات عشوائية 
N_points = 984
n_bins = 15
# إنشاء توزيع
x = np.random.randn(N_points)
y = .8 ** x + np.random.randn(984) + 25
legend = ['distribution']
# إنشاء الهيستوغرام
fig, axs = plt.subplots(1, 1,
						figsize =(10, 7),
						tight_layout = True)
#ticks حذف العلامات 
axs.xaxis.set_ticks_position('none')
axs.yaxis.set_ticks_position('none')
# إضافة شبكة إلى الخلفية
axs.grid(b = True, color ='grey',
		linestyle ='-.', linewidth = 0.5,
		alpha = 0.6)
# إضافة نص للشكل
fig.text(0.9, 0.15, 'Histogram',
		fontsize = 13,color ='red',ha ='right',
		va ='top',alpha = 0.7)
# plot حذف خطوط حاويةال 
for s in ['top', 'bottom', 'left', 'right']:
	axs.spines[s].set_visible(False)
#وضع مسافة بين التسميات وبين المحاور
axs.xaxis.set_tick_params(pad = 4)
axs.yaxis.set_tick_params(pad = 8)
# إنشاء الهستوغرام
N, bins, patches = axs.hist(x, bins = n_bins)
# تحديد الألوان
fracs = ((N**(9)) / N.max())
norm = colors.Normalize(fracs.min(), fracs.max())
for thisfrac, thispatch in zip(fracs, patches):
	color = plt.cm.viridis(norm(thisfrac))
	thispatch.set_facecolor(color)
# تسمية للمحاور
plt.xlabel("X-axis")
plt.ylabel("y-axis")
plt.legend(legend)
# عنوان
plt.title('Histogram')
# عرض
plt.show()

الخرج:
index.png.eb3610eac61ec0a088c677f0432e1312.png

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

  • 1

يمكنك استخدام plt.grid لرسم أي grid تريد سواء كانت أفقية فقط، أو رأسية فقط، أو كلاهما مع تحديد شكل الgrid كذلك، المثال التالي يوضح كيفية استخدامها في الكود الخاص بك:

# -*- coding: utf-8 -*-
"""
Created on Wed Oct 27 00:22:00 2021

@author: ahmed
"""

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import colors
from matplotlib.ticker import PercentFormatter
# إنشاء بيانات عشوائية 
N_points = 984
n_bins = 15
# إنشاء توزيع
x = np.random.randn(N_points)
y = .8 ** x + np.random.randn(984) + 25
legend = ['distribution']
# إنشاء الهيستوغرام
fig, axs = plt.subplots(1, 1,
						figsize =(10, 7),
						tight_layout = True)
#ticks حذف العلامات 
axs.xaxis.set_ticks_position('none')
axs.yaxis.set_ticks_position('none')
# إضافة نص للشكل
fig.text(0.9, 0.15, 'Histogram',
		fontsize = 13,color ='red',ha ='right',
		va ='top',alpha = 0.7)
# plot حذف خطوط حاويةال 
for s in ['top', 'bottom', 'left', 'right']:
	axs.spines[s].set_visible(False)
#وضع مسافة بين التسميات وبين المحاور
axs.xaxis.set_tick_params(pad = 4)
axs.yaxis.set_tick_params(pad = 8)
# إنشاء الهستوغرام
N, bins, patches = axs.hist(x, bins = n_bins)
# تحديد الألوان
fracs = ((N**(9)) / N.max())
norm = colors.Normalize(fracs.min(), fracs.max())
for thisfrac, thispatch in zip(fracs, patches):
	color = plt.cm.viridis(norm(thisfrac))
	thispatch.set_facecolor(color)
# تسمية للمحاور
plt.xlabel("X-axis")
plt.ylabel("y-axis")
plt.legend(legend)
# عنوان
plt.title('Histogram')
#رسم الgrid
plt.grid(color = 'green', linestyle = '--', linewidth = 0.5)
# عرض
plt.show()

لاحظ تحديد لونه باللون الأخضر وشكله كذلك وحجمه ويظهر كالتالي:

617880b378611_Figure2021-10-27002646.png.d3a8d3347508208d6c359edf178b50f0.png

يمكنك كذلك رسمه بشكل رأسي فقط عن طريق استبدال سطر الرسم هكذا:

plt.grid(axis = 'x')

وتظهر هكذا:

6178810893857_Figure2021-10-27002808.png.854710e80b53b1aec46e3e5888a6a631.png

وبنفس الطريقة يمكنك جعلها أفقية بدلا من راسية باستبدال ال x ب y فقط.

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...