كيف يمكنني إزالة المحور العلوي واليمين في matplotlib؟

StackOverflow https://stackoverflow.com/questions/925024

  •  06-09-2019
  •  | 
  •  

سؤال

بدلا من نمط المحور "المحاصر" الافتراضي الذي أريد أن يكون لديك فقط المحور الأيسر والسفل، أي:

+------+         |
|      |         |
|      |   --->  |
|      |         |
+------+         +-------

يجب أن يكون هذا سهلا، لكن لا يمكنني العثور على الخيارات اللازمة في المستندات.

هل كانت مفيدة؟

المحلول

هذا هو حل Matplotlib المقترح من الموقع الرسمي هنا:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)

ax = plt.subplot(111)
ax.plot(x, y)

# Hide the right and top spines
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)

# Only show ticks on the left and bottom spines
ax.yaxis.set_ticks_position('left')
ax.xaxis.set_ticks_position('bottom')

plt.show()

enter image description here

نصائح أخرى

بدلا من ذلك، هذا

def simpleaxis(ax):
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)
    ax.get_xaxis().tick_bottom()
    ax.get_yaxis().tick_left()

يبدو أنه يحقق نفس التأثير على محور دون فقدان دعم التسمية المتناوب.

(matplotlib 1.0.1؛ محلول مستوحاة من هذه).

عدل] matplotlib في الوقت الحالي (2013-10) في الإصدار 1.3.0 بما في ذلك

تم إضافة هذه القدرة فقط، وتحتاج إلى إصدار التخريب لذلك. يمكنك أن ترى رمز المثال هنا.

أنا فقط في تحديث القول أن هناك أفضل مثال متواجد حاليا. لا تزال بحاجة إلى إصدار التخريب، لم يكن هناك إصدار مع هذا بعد.

عدل] تم إصدار Matplotlib 0.99.0 RC1، ويتضمن هذه القدرة.

إذا كنت لا تحتاج إلى علامات صغيرة، فيمكنك ذلك (على سبيل المثال عن تخطيط الرسوم التوضيحية النوعية)، فيمكنك أيضا استخدام هذا الحل البديل السريع:

جعل المحور غير مرئي (على سبيل المثال مع plt.gca().axison = False) ثم اسحبهم يدويا مع plt.arrow.

(هذا أكثر من تعليق الإرشاد، بالإضافة إلى الإجابات الشاملة هنا.)


لاحظ أنه يمكننا إخفاء كل عنصر من هذه العناصر الثلاثة بشكل مستقل عن بعضها البعض:

  • لإخفاء الحدود (AKA "Spine"): ax.set_frame_on(False) أو ax.spines['top'].set_visible(False)

  • لإخفاء القراد: ax.tick_params(top=False)

  • لإخفاء الملصقات: ax.tick_params(labeltop=False)

Library Sealborn لديه هذا مدمج مع وظيفة الاحتفاظ ().

فقط اضف:

import seaborn as sns

الآن قم بإنشاء الرسم البياني الخاص بك. وأضف في النهاية:

sns.despine()

إذا نظرت إلى بعض قيم المعلمة الافتراضية للوظيفة، فإنها تقوم بإزالة العمود الفقري العلوي واليمين ويحافظ على أسفل العمود الفقري السفلي واليسار:

sns.despine(top=True, right=True, left=False, bottom=False)

تحقق من مزيد من الوثائق هنا:https://seaBorn.pydata.org/generated/seaorn.despine.html.

إذا كنت بحاجة إلى إزالته من جميع المؤامرات الخاصة بك، فيمكنك إزالة العمود الفقري في إعدادات النمط (ورقة النمط أو rcparams). على سبيل المثال:

import matplotlib as mpl

mpl.rcParams['axes.spines.right'] = False
mpl.rcParams['axes.spines.top'] = False

إذا كنت ترغب في إزالة جميع العمود الفقري:

mpl.rcParams['axes.spines.left'] = False
mpl.rcParams['axes.spines.right'] = False
mpl.rcParams['axes.spines.top'] = False
mpl.rcParams['axes.spines.bottom'] = False
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top