Всем добрый день. Изучаю Python , прохожу работу с данными из файла. Изначальная задача: взять данные из excel и нарисовать по ним два графика в matplotlib. Почитав докумнетацию и другие ресурсы, для работы с файлом выбрал openpyxl, в итоге получилось так, что для каждого стобика нужно делать свой цикл, чтобы перебрать все значения. Всё нарисовалось, но осталось пара вопросов, которые я так и не смог решить.
1. Как использовать datetime, чтобы из даты вида 09.03.2020 06:00 получить красивую 09.03.20
2. Хочу, чтобы major tick label оси ординат были вертикальными, вроде бы нащёл как это делается, но не получилось или лучше чтобы размер шрифта был меньше для них
3.
Таблица чуть болье 1.5 мб, во вложения не влезла
Excel таблица с погодными данными для анализа
Код получился сложным для чтения, надеюсь, примерно понятно будет)
Собсвенно сам скрипт:
1. Как использовать datetime, чтобы из даты вида 09.03.2020 06:00 получить красивую 09.03.20
2. Хочу, чтобы major tick label оси ординат были вертикальными, вроде бы нащёл как это делается, но не получилось или лучше чтобы размер шрифта был меньше для них
3.
if __name__ == '__main__':
эта строка была в исходном примере учебника, понял, что она не позовляет запускать скрипт из вне, объясните, пожалуйста, что это и когда уместно применять.Таблица чуть болье 1.5 мб, во вложения не влезла
Excel таблица с погодными данными для анализа
Код получился сложным для чтения, надеюсь, примерно понятно будет)
Собсвенно сам скрипт:
Python:
import openpyxl
import matplotlib.pyplot as plt
def read_values(file_city_name):
"""Читает excel файл (шапка --> дата, температура --> столбцы)"""
sheet = wb_archangelsk.active
# Получить данные из шапки (имя города, точка росы)
city_name = sheet['A1'].value
dew_point_header = sheet['W2'].value
return city_name, dew_point_header
def read_time_temp(file_city_name):
sheet = wb_archangelsk.active
temp_list, time_list, first_dew_point, coordinate = [], [], [], []
# берёт значения даты из столбца А
for a_cell in sheet['A']:
if "02.2020 18:00" in str(a_cell.value):
time_list.append(a_cell.value)
coordinate.append(a_cell.coordinate)
# берём температуру на основе координат столца А из столбца В
for i in range(len(coordinate)):
coordinate[i] = f"B{coordinate[i][1::]}"
temp_list.append(sheet[f"{coordinate[i]}"].value)
# берём температуру выпадения осадков на основе координат столбца А из столбца W
for i in range(len(coordinate)):
coordinate[i] = f"W{coordinate[i][1::]}"
first_dew_point.append(sheet[f"{coordinate[i]}"].value)
return time_list[::-1], temp_list[::-1], first_dew_point[::-1]
def date_plt(current_time, current_temp, current_city, current_dew_point):
"""отображение данных на диаграмме"""
# задаём область и размер фигуры
fig, ax = plt.subplots()
fig.set_figwidth(12)
fig.set_figheight(8)
# передаём данные в печать
plt.plot(current_time, current_temp, c='red', alpha=0.9)
plt.plot(current_time, current_dew_point, c='blue', alpha=0.9)
plt.fill_between(current_time,
current_temp,
current_dew_point,
facecolor='blue',
alpha=0.1
)
# формирование заголовка, оси абцисс и ординат на диаграмме, сетки графика
plt.title(f'Температура воздуха, выпадения осадков в Апреле в {current_city}')
plt.xlabel('', fontsize=10)
plt.ylabel('Температура(С)', fontsize=10)
fig.autofmt_xdate()
# настройка клеток сетки графика
ax.minorticks_on()
ax.grid(which='major',
color='k')
ax.grid(which='minor',
color='gray',
linestyle=':')
plt.show()
if __name__ == '__main__':
wb_archangelsk = openpyxl.load_workbook('C:\Date Downloading\Arh\Arhangelsc.xlsx')
time, temp, dew_point = read_time_temp(wb_archangelsk)
city_plt, dew_point_plt = read_values(wb_archangelsk)
date_plt(time, temp, city_plt, dew_point)