#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. Выглядит лучше, чем раньше 🙂 Но немного отступов с левой стороны выглядело бы еще лучше :).