Как отображать динамические (масштабируемые) метки времени на оси Y тепловой карты в PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как отображать динамические (масштабируемые) метки времени на оси Y тепловой карты в Python

Сообщение Anonymous »

Я читаю CSV-файл, содержащий 1 столбец с датами, 1 столбец со временем и 120 столбцов с целыми числами.
Файл может содержать много строк (может быть более 100 000).
Точки данных преобразуются в индексы цвета от 0 до 1, и я отображаю их на тепловой карте.
Моя проблема заключается в отображении столбца времени в виде меток по оси Y. p>
Что бы я ни пробовал, метки отображаются в нечитаемом виде.
Полный вид — метки не видны
При масштабировании Чтобы увидеть больше деталей цвета, метки становятся более читабельными.
Увеличить масштаб — метки читаются
Мне бы хотелось, чтобы метки были читабельны в любом виде, даже если они полностью представление.
Приемлемо, чтобы некоторые метки не отображались при уменьшении масштаба и будут отображаться только при увеличении.
Я пытался создать отметки y. как показано ниже, где «данные» — это фрейм данных pandas, а case_times — это фрейм данных с объектами datetime.

Код: Выделить всё

import numpy as np
import pandas as pd
from datetime import datetime

data = pd.read_csv(csvfile, delimiter=r',|\s|\|', header=None)
data = np.split(dsa_data, [1, 2, 62, 122], axis=1)
case_times = dsa_data[1]
case_times[1] = pd.to_datetime(case_times[1], format='%H:%M:%S').dt.time
case_times = np.squeeze(case_times)

fig, axs = plt.subplots(1,2)
fig.tight_layout()
im1 = axs[0].imshow(data, cmap='DSAColorMap')

axs[0].set_yticks(ticks=np.arange(1, len(case_times)+1, 1), labels=case_times)
axs[0].set_autoscale_on(True)
plt.show()
Затем я попытался начать со столбца строк вместо фрейма данных, но получил те же результаты:

Код: Выделить всё

with open(fileName, newline='') as csvfile:
# Advance rows 3 time to skip headers and extract case start date
# without the need to iterate over the file
row = next(csvfile)
row = next(csvfile)
row = next(csvfile)
text_to_split = re.split(r',|\s|\|', row)
case_start_date = text_to_split[0]
# Remove blank items created after split by '|' delimiter
text_to_split = text_to_split[:len(text_to_split)-3]
#Create a list of time stamps to be later used as x axis for the plot
case_times.append(text_to_split.pop(1))
# Create the first data row
data.append(text_to_split[1:61])
spamreader = csv.reader(csvfile, delimiter='|')
# Iterate over all remaining rows
# to create the data rows
for row in spamreader:
text_to_split = ' '.join(row) # Create a list from all elements of data in a row
text_to_split = re.split(r',|\s', text_to_split) # split row by delimiters
text_to_split.pop(len(text_to_split)-1) # Remove last element of the row which is blank
text_to_split.pop(0) # Remove date from row
#Create a list of time stamps to be later used as axis labels for the plot
case_times.append(text_to_split.pop(0))
# Add data row to each hemisphere data list
data.append(text_to_split[:60])

converted_case_times = [] # transform from string to datetime
for i in range(len(case_times)):
converted_case_times.append(datetime.strptime(case_times[i], '%H:%M:%S'))

fig, axs = plt.subplots(1,2)
fig.tight_layout()
im1 = axs[0].imshow(dsa_data_left, cmap='DSAColorMap')
axs[0].set_yticks(ticks=range(1, len(converted_case_times)+1), labels=converted_case_times)
plt.show()

Я также попробовал следующее изменение форматирования, чтобы решить проблему, но это тоже не сработало:

Код: Выделить всё

from matplotlib.dates import DateFormatter

axs[0].yaxis.set_major_formatter(DateFormatter("%H:%M:%S"))
plt.setp(axs[0].get_yticklabels(), rotation=45, ha="right",
rotation_mode="anchor")
Я предполагаю, что проблема заключается в создании тиков (как фиксированного диапазона), однако я не знаю, как решить эту проблему, и не смог найти объяснения или примера, который работает в моем дело.

Подробнее здесь: https://stackoverflow.com/questions/787 ... -in-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»