Логарифмическая ось x и заполнение Matplotlib

#python #matplotlib #padding

#python #matplotlib #заполнение

Вопрос:

Я борюсь с matplotlib и заполнением по оси x вместе с логарифмической шкалой (см. Первое изображение). Без логарифмической шкалы заполнение применяется хорошо (см. Второе). Любые предложения, как получить отступ между линиями графика и линией оси в нижнем левом углу, чтобы можно было видеть точки на линии?

Спасибо.

Код:

 import matplotlib.pyplot as plt
import numpy as np
from matplotlib.pyplot import *
from matplotlib.ticker import ScalarFormatter

style.use('fivethirtyeight')

fig, ax = plt.subplots()

T = np.array([2**x for x in range(0,7 1)])
opt1 = np.array([x for x in range(0,7 1)])
opt2 = np.array([x*2 for x in range(0,7 1)])
opt3 = np.array([x*4 for x in range(0,7 1)])

ax.grid(True) 
xlabel("#nodes")
ylabel("time(s)")
legend(loc="best") 
title(r"Node start times") 

plt.xticks([2**x for x in range(0,7 1)])

plt.plot(T,opt1,"o-", label="opt1")
plt.plot(T,opt2, "s-", label="opt2")
plt.plot(T,opt3, "d-", label="opt2")
plt.legend(loc="upper left")
# This should be called after all axes have been added
plt.tight_layout()
plt.margins(0.05, 0.05)
# 1, 2, 4, ...
ax.set_xscale('log', basex=2)
ax.xaxis.set_major_formatter(matplotlib.ticker.FormatStrFormatter("%d"))
plt.show()
#savefig("plot_1.pdf")
 

Построить логарифмическую шкалу
График нормальный

Комментарии:

1. Просто в качестве примечания: вы могли бы написать opt1 , opt2 , …. как np.arange(8) , np.arange(0,15,2) , … чтобы избежать цикла Python.

Ответ №1:

Это не решает вашу проблему с заполнением, но вы могли бы использовать clip_on=False , чтобы предотвратить отсечение точек. Похоже, вам также нужно убедиться, что они находятся над осями, используя zorder

 plt.plot(T,opt1,"o-", label="opt1", clip_on=False, zorder=10)
plt.plot(T,opt2, "s-", label="opt2", clip_on=False, zorder=10)
plt.plot(T,opt3, "d-", label="opt2", clip_on=False, zorder=10)
 

Комментарии:

1. Выглядит лучше, чем раньше 🙂 Но немного отступов с левой стороны выглядело бы еще лучше :).