Пиплот отказывается показывать сетку - PullRequest
0 голосов
/ 25 марта 2019

У меня есть скрипт Python, который имеет 3 функции, которые отображают данные. 2 из них показывают линии сетки, используя ax.grid (b = True) . Один, однако, нет. Даже после того, как я спамил ax.grid (b = True) повсюду ... Должно быть, я что-то не так делаю, но что?

def plotMSEProgress(times, bestScores, scores, xsplit=0, window=1):
    plot, ax = plt.subplots(figsize=(20,10), num=1)
    ax.grid(b=True, which='both')

    # plot = plt.figure(window)
    plt.ion()
    plt.minorticks_on()
    ax.grid(b=True, which='both')

    plt.show()

    plt.clf()

    if xsplit:
        plt.axvline(x=xsplit, color='g')

    plot = plt.plot_date(times, bestScores, '-', label="best score")
    plot = plt.setp(plot, color='y', linewidth=1.0)
    plot = plt.plot_date(times, scores, '-', label="score")
    plot = plt.setp(plot, color='b', linewidth=1.0)

    ax.grid(b=True, which='both')
    plt.xlabel('time')
    plt.ylabel('MSE')
    plt.suptitle('MSE over time', fontsize=16)
    plt.legend()
    ax.grid(b=True, which='both')
    plt.draw()
    ax.grid(b=True, which='both')
    plt.pause(0.001)        
    ax.grid(b=True, which='both')
    plt.plot()
    ax.grid(b=True, which='both')

Может быть, это как-то связано с plt.ion () ? Потому что у меня этого нет в других графических функциях, которые отображают сетку.

Я уже пробовал это и это , добавив plt.minorticks_on () , но безрезультатно, к сожалению.

Есть ли что-то очевидное, что я упускаю? Или есть какая-то другая скрытая несовместимость?

Скриншот сюжета по запросу: enter image description here

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Я думаю, у вас есть несколько ненужных кодов, которые создают несколько графиков. Первый график, который у вас был, пуст, но с сетками, а последующие графики содержат данные, но не сетки.

Попробуйте код ниже. Я прокомментировал некоторые из ваших сценариев и заставил их работать.

def plotMSEProgress(times, bestScores, scores, xsplit=0, window=1):
    plot, ax = plt.subplots(figsize=(20,10), num=1)
    ax.grid(b=True, which='both')

    # plot = plt.figure(window)
    plt.ion()
    plt.minorticks_on()
    ax.grid(b=True, which='both')

#     plt.show()

#     plt.clf()

    if xsplit:
        plt.axvline(x=xsplit, color='g')

    plot = plt.plot(times, bestScores, '-', label="best score") # you can change it back to plot_date
    plot = plt.setp(plot, color='y', linewidth=1.0)
    plot = plt.plot(times, scores, '-', label="score") # you can change it back to plot_date
    plot = plt.setp(plot, color='b', linewidth=1.0)

    ax.grid(b=True, which='both')
    plt.xlabel('time')
    plt.ylabel('MSE')
    plt.suptitle('MSE over time', fontsize=16)
    plt.legend()
    ax.grid(b=True, which='both')
    plt.draw()
    ax.grid(b=True, which='both')
    plt.pause(0.001)        
    ax.grid(b=True, which='both')
#     plt.plot()
    ax.grid(b=True, which='both')

times = list(range(0,100))
bestScores = list(range(100,200))
scores = list(range(150,250))
xsplit=0
window=1
plotMSEProgress(times, bestScores, scores, xsplit=0, window=1)

enter image description here

1 голос
/ 26 марта 2019

Добавьте вызов к plt.grid() внутри вашей функции и удалите посторонний код:

import matplotlib.pyplot as plt
import datetime

def plotMSEProgress(times, bestScores, scores, xsplit=0, window=1):
    plot, ax = plt.subplots(figsize=(20,10), num=1)

    plt.ion()    
    plt.clf()

    if xsplit:
        plt.axvline(x=xsplit, color='g')

    plot = plt.plot_date(times, bestScores, '-', label="best score")
    plot = plt.setp(plot, color='y', linewidth=1.0)
    plot = plt.plot_date(times, scores, '-', label="score")
    plot = plt.setp(plot, color='b', linewidth=1.0)

    plt.minorticks_on()
    plt.grid(which='major')
    plt.grid(which='minor', linestyle = ':')

    plt.xlabel('time')
    plt.ylabel('MSE')
    plt.suptitle('MSE over time', fontsize=16)
    plt.legend(loc=2)
    plt.draw()
    plt.pause(0.001)

# Generate example data
base = datetime.datetime.today()
times = [base + datetime.timedelta(seconds=x) for x in range(0, 100)]
scores = np.random.rand(len(times))*30
bestScores = np.random.rand(len(times))*5

# Generate plot dynamically
for i in range(len(times)):
    plotMSEProgress(times[0:i], bestScores[0:i], scores[0:i], xsplit=0, window=1)

Этот код генерирует график и динамически обновляет его, все время показывая линии сетки все время.

Plot with gridlines

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