Как исправить 'RuntimeError: Locator ... превышает Locator.MAXTICKS - matplotlib' - PullRequest
0 голосов
/ 14 апреля 2019

Я наношу данные camapign на временную шкалу, где релевантным является только отправленное время (а не дата), поскольку столбец содержит только данные времени (импортированные из CSV-файла)

Отображает различные линейные графики (график спагетти), однако, когда я хочу добавить метки к оси х, я получаю

RuntimeError: Локатор пытается сгенерировать 4473217 тиков от 30282.0 до 76878.0: превышает Locator.MAXTICKS

У меня есть 140 строк данных для этого тестового файла, время между 9:05 и 20:55, и мой код должен получать отметку каждые 15 минут.

python: 3.7.1.final.0 биты питона: 64 ОС: Windows ОС-релиз: 10

Панды: 0,23,4

matplotlib: 3.0.2

Мой фактический код выглядит так:

import pandas
import matplotlib.pyplot as plt
import  matplotlib.dates as mdates
from datetime import datetime


file_name = r'''C:\\Users\\A_B_testing.csv''' 
df1 = pandas.read_csv(file_name, encoding='utf-8')

df_Campaign1 = df1[df1['DataSource ID'].str.contains('Campaign1')==True]
Campaign1_times = df_Campaign1['time sent'].tolist()
Campaign1_revenue = df_Campaign1['EstValue/sms'].tolist()
Campaign1_times = [datetime.strptime(slot,"%H:%M").time() for slot in Campaign1_times]

df_Campaign2 = df1[df1['DataSource ID'].str.contains('Campaign2')==True]
Campaign2_times = df_Campaign2['time sent'].tolist()
Campaign2_revenue = df_Campaign2['EstValue/sms'].tolist()
Campaign2_times = [datetime.strptime(slot,"%H:%M").time() for slot in Campaign2_times]

fig, ax = plt.subplots(1, 1, figsize=(16, 8))

xlocator = mdates.MinuteLocator(byminute=None, interval=15) # tick every 15 minutes
xformatter = mdates.DateFormatter('%H:%M')

ax.xaxis.set_major_locator(xlocator)
ax.xaxis.set_major_formatter(xformatter)
ax.minorticks_off()

plt.grid(True)

plt.plot(Campaign1_times, Campaign1_revenue, c = 'g', linewidth = 1)
plt.plot(Campaign2_times, Campaign2_revenue, c = 'y', linewidth = 2)

plt.show()

Я устал уменьшать количество отображаемых значений, и на фиктивном наборе он работал нормально:

from matplotlib import pyplot as plt
import  matplotlib.dates as mdates
from matplotlib.dates import HourLocator, MinuteLocator, DateFormatter
from datetime import datetime

fig, ax = plt.subplots(1, figsize=(16, 6))

xlocator = MinuteLocator(interval=15)
xformatter = DateFormatter('%H:%M')
ax.xaxis.set_major_locator(xlocator)
ax.xaxis.set_major_formatter(xformatter)
ax.minorticks_off()

plt.grid(True, )

xvalues = ['9:05', '10:35' ,'12:05' ,'12:35', '13:05']
xvalues = [datetime.strptime(slot,"%H:%M") for slot in xvalues]
yvalues = [2.2, 2.4, 1.7, 3, 2]
zvalues = [3.2, 1.4, 1.8, 2.7, 2.2]

plt.plot(xvalues, yvalues, c = 'g')
plt.plot(xvalues, zvalues, c = 'b')

plt.show()

Так что я думаю, что эта проблема связана с тем, как я объявляю галочки, пытался найти соответствующий пост здесь, но никто не решил мою проблему. Кто-нибудь может указать мне правильное направление? Заранее спасибо.

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