Подтвердить что ты не робот

Минимальное значение оси y не применяется в графике mplotlib vlines

Я делаю график vlines в matplotlib, и у меня есть все значения y в наборе данных как >=0. Я хочу, чтобы моя ось оси y наиболее тикала, чтобы читать 0, но вместо этого я получаю -500.

Вот код:

#!/usr/bin/env python

import numpy as np
from matplotlib import pyplot as plt, dates as mdates
import datetime as dt, time

# Read the data and turn it into a numpy array
#store = map(lambda line: map(int, line.strip().split()), open(name + '.txt').readlines())
store = [
    [1293606162197, 0, 0],
    [1293605477994, 63, 0],
    [1293605478057, 0, 0],
    [1293605478072, 2735, 1249],
    [1293606162213, 0, 0],
    [1293606162229, 0, 0],
]

nstore = np.array(store)

# Get arrays of each columns in the store array
d = nstore[:,0]
y1 = nstore[:,1]
y2 = nstore[:,2]

# Get arrays of values to be passed to matplotlib
s = d / 1000
dts = map(dt.datetime.fromtimestamp, s)
fds = mdates.date2num(dts)

# new figure and subplot
fig = plt.figure()
ax = fig.add_subplot(111)

# Plot using vlines
ax.vlines(fds, [0], y1, 'red')

# set xaxis tick settings
ax.xaxis.set_major_locator(mdates.MinuteLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d %H:%M'))

for label in ax.xaxis.get_ticklabels():
    label.set_rotation('vertical')

fig.subplots_adjust(bottom=.25)

# Set the y axis bottom limit to 0
ax.set_ylim(bottom=0)   # <<- THIS DOES NOT SEEM TO BE WORKING

# Save the plot figure
fig.savefig('out.png')

и вот сюжет, который я получаю: enter image description here

Может ли кто-нибудь указать мне, что я делаю неправильно? Кроме того, если вы можете указать мне документы, у которых есть детали, которые мне нужны, это было бы здорово. Спасибо.

Вопрос - это продолжение Создание графика с датой и временем в меток оси с помощью matplotlib

4b9b3361

Ответ 1

Вы можете установить лимит вручную после построения данных, например:

pyplot.ylim(ymin=0)

Что происходит, так это то, что Matplotlib корректирует границы сюжета, чтобы он выглядел "лучше". Иногда это подразумевает выход за пределы строгого диапазона ваших данных. Затем вы должны обновить лимиты после графика, так как каждый график обновляет лимит (если я правильно понимаю).

Теперь ваш подход может работать, но вы должны обновить рисунок после установки пределов:

ax.set_ylim(bottom=0)
pylot.draw()

(Это работает в оболочке IPython в Mac OS X с последней версией matplotlib.)