минимальное значение оси y не применяется в графике matplotlib vlines - PullRequest
11 голосов
/ 05 апреля 2011

Я делаю график 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

1 Ответ

21 голосов
/ 05 апреля 2011

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

pyplot.ylim(ymin=0)

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...