Как точно настроить метки и отметки графика с помощью mdates? - PullRequest
0 голосов
/ 06 августа 2020

Я искал, пробовал и отлаживал, но теперь мой мозг просто sh, и я мог бы использовать некоторые идеи.

Я хотел бы точно настроить интервалы тиков моего графика.

Если я ограничиваю данные 1 минутным интервалом, блокировка тиков показывает только секунды,

Если я ограничиваю данные 5-минутным диапазоном, блокировка тиков показывает HH.x1, HH.M2 .... HH.M5.

Если я увеличу свои данные до 15 минут или до 1 часа, галочки заблокируются для отображения HH.x0, HH.10, HH.20, ... HH.50

Кажется, что locator = mdates.AutoDateLocator(minticks=15, maxticks=20) увеличивает количество тиков, но генерация графика занимает намного больше времени, чем с пустым выделением.

Я пытался использовать некоторые локаторы сюжета из примеров matplotlib, но затем даты тормозятся . Это единственный найденный мной объект HH:MM:SS, который действительно актуален без особого ручного нарезания et c. Но у меня серьезный мозговой инсульт из-за слишком большого количества информации и множества различных примеров, чтобы отсортировать остальное на месте.

Я использую примеры mdates.AutoDateLocator в качестве первой попытки просто запрограммировать все на ось x на одном линейном графике, получая таким образом красивую solid черную полосу.

Как я могу заставить, скажем, фиксированные 15 тиков с правильными временными метками? Могу ли я использовать для этого автолокаторы mdates? Неважно выбирать фактические отметки / значения, просто чтобы график выглядел красиво и организованно с немного более подробной информацией по оси x. Хотя, конечно же, галочка должна совпадать с осью Y.

Как видно из pi c, ось Y также немного шаткая, так что это, несомненно, мой второй вопрос. Как мне go настроить метки / метки Yaxis?.

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

#Data examble for x-axis:
0     2020-03-22 10:50:40
1     2020-03-22 10:50:45
2     2020-03-22 10:50:50
3     2020-03-22 10:50:55
4     2020-03-22 10:51:00
              ...        
294   2020-03-22 11:15:15
295   2020-03-22 11:15:20
296   2020-03-22 11:15:25
297   2020-03-22 11:15:30
298   2020-03-22 11:15:35 
................................

#Whole data for 1hr slice 

[             TimeString  VarValue
0    22.3.2020 10.50.40     11.06
1    22.3.2020 10.50.45     11.05
2    22.3.2020 10.50.50     11.07
3    22.3.2020 10.50.55     11.07
4    22.3.2020 10.51.00     11.06
..                  ...       ...
725  22.3.2020 11.51.18     10.82
726  22.3.2020 11.51.23     10.85
727  22.3.2020 11.51.28     10.83
728  22.3.2020 11.51.33     10.82
729  22.3.2020 11.51.38     10.83

[730 rows x 2 columns],              TimeString  VarValue
0    22.3.2020 10.50.40     20.74
1    22.3.2020 10.50.45     20.71
2    22.3.2020 10.50.50     20.70
3    22.3.2020 10.50.55     20.69
4    22.3.2020 10.51.00     20.70
..                  ...       ...
725  22.3.2020 11.51.18     20.11
726  22.3.2020 11.51.23     20.11
727  22.3.2020 11.51.28     20.10
728  22.3.2020 11.51.33     20.13
729  22.3.2020 11.51.38     20.08

[730 rows x 2 columns],              TimeString  VarValue
0    22.3.2020 10.50.40     12.36
1    22.3.2020 10.50.45     12.36
2    22.3.2020 10.50.50     12.33
3    22.3.2020 10.50.55     12.37
4    22.3.2020 10.51.00     12.33
..                  ...       ...
725  22.3.2020 11.51.18     11.43
726  22.3.2020 11.51.23     11.44
727  22.3.2020 11.51.28     11.45
728  22.3.2020 11.51.33     11.43
729  22.3.2020 11.51.38     11.43

[730 rows x 2 columns]]

Это сюжет, который я получаю со следующим кодом 1

#locator = mdates.AutoDateLocator()
locator = mdates.AutoDateLocator(minticks=15, maxticks=20)
formatter = mdates.ConciseDateFormatter(locator)

fig, (ax0,ax1,ax2,ax3) = plt.subplots(4, sharex=True,figsize=(11.69,8.27))
ax0.plot(LinesX_labels, line1Y )
ax0.set_xlabel(file1_name)

ax1.plot(LinesX_labels, line2Y)
ax1.set_xlabel(file2_name)

ax2.plot(LinesX_labels, line3Y)
ax2.set_xlabel(file3_name)

ax3.plot(LinesX_labels, line1Y, LinesX_labels, line2Y, LinesX_labels, line3Y)
ax3.set_xlabel(xlabel) 
ax3.xaxis.set_major_locator(locator)
ax3.xaxis.set_major_formatter(formatter)

for ax in (ax0,ax1,ax2,ax3):
    ax.grid(True)
  
plt.show()    
fig.savefig('plottest.png', dpi=300,
        orientation='portrait')
...