Compare commits
7 commits
0b2b13b07b
...
4b828cdad9
Author | SHA1 | Date | |
---|---|---|---|
|
4b828cdad9 | ||
|
0020d2b034 | ||
|
2cbac85166 | ||
|
093ee5f073 | ||
|
6ee0666039 | ||
|
bbea5ae532 | ||
|
5b8d0499c5 |
2 changed files with 117 additions and 115 deletions
|
@ -175,16 +175,16 @@
|
|||
<h1>Plots</h1>
|
||||
{% for fig in figures %}
|
||||
<figure>
|
||||
<a href="{{ fig['filename'] }}.png">
|
||||
<img
|
||||
src="{{ fig['filename'] }}.png"
|
||||
alt="{{ fig['caption'] }}" />
|
||||
</a>
|
||||
<picture>
|
||||
<source srcset="{{ fig['filename']}}.svg" alt="{{ fig['caption']}}" />
|
||||
<img src="{{ fig['filename'] }}.png" alt="{{ fig['caption'] }}" />
|
||||
</picture>
|
||||
<figcaption>
|
||||
<a name="figure-{{ '{:03d}'.format(fig['index']) }}"><span class="ref">Abbildung {{ fig['index'] }}:</span></a>
|
||||
{{ fig['caption'] }}<br />
|
||||
<a href="{{ fig['filename'] }}.png" download="{{ fig['filename'] }}.png">Download als PNG</a>
|
||||
<a href="{{ fig['filename'] }}.pdf" download="{{ fig['filename'] }}.pdf">Download als PDF</a>
|
||||
<a href="{{ fig['filename'] }}.svg" download="{{ fig['filename'] }}.pdf">Download als SVG</a>
|
||||
</figcaption>
|
||||
</figure>
|
||||
{% endfor %}
|
||||
|
|
222
plot.py
222
plot.py
|
@ -37,7 +37,8 @@ print_today = today.isoformat()
|
|||
|
||||
filename_now = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
|
||||
|
||||
force_renew = True
|
||||
force_renew_plots = True
|
||||
force_renew_dashboard = True
|
||||
|
||||
# https://www.tagesschau.de/ausland/europa/ursula-von-der-leyen-zu-corona-impfstoffen-101.html
|
||||
target_date_for_herd_immunity = datetime.date(2021, 9, 22)
|
||||
|
@ -285,15 +286,47 @@ if os.path.isdir(archive_folder):
|
|||
else:
|
||||
os.mkdir(archive_folder)
|
||||
|
||||
def check_recreate_plot(plot_name):
|
||||
|
||||
archive_plot_filename = '{}/{}'.format(archive_folder, plot_name)
|
||||
|
||||
if os.path.isfile(archive_plot_filename + '.pdf') and not force_renew_plots:
|
||||
print('Plot {} already exists'.format(plot_name))
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def save_plot(plot_name):
|
||||
|
||||
folders = [archive_folder, site_folder]
|
||||
file_formats = ['pdf', 'png', 'svg']
|
||||
file_template = '{folder}/{plot_name}.{format}'
|
||||
|
||||
for folder in folders:
|
||||
for format in file_formats:
|
||||
plt.savefig(file_template.format(folder=folder, plot_name=plot_name, format=format))
|
||||
|
||||
print('Created plot {} as {}'.format(plot_name, file_formats))
|
||||
|
||||
def labeled_timeperiod(ax, start, end, text, color='lightgrey'):
|
||||
centre = start + (end - start) / 2
|
||||
ax.axvspan(start, end, color=color, alpha=0.5)
|
||||
ax.text(centre, ax.get_ylim()[1], text, bbox={
|
||||
'boxstyle': 'square',
|
||||
'fc': color,
|
||||
'ec': 'black'
|
||||
}, ha='center')
|
||||
|
||||
|
||||
def add_annotations(ax):
|
||||
labeled_timeperiod(ax, datetime.date(2021, 3, 15), datetime.date(2021, 3, 19), 'AZ-Stopp', 'silver')
|
||||
labeled_timeperiod(ax, datetime.date(2021, 3, 29), today, 'AZ-Stopp u. 60', 'lightgrey')
|
||||
|
||||
|
||||
def plot_vaccination_bar_graph_total_time():
|
||||
|
||||
archive_plot_filename = '{}/vaccination_bar_graph_total_time'.format(archive_folder)
|
||||
latest_plot_filename = '{}/vaccination_bar_graph_total_time'.format(site_folder)
|
||||
|
||||
if os.path.isfile(archive_plot_filename + '.pdf') and not force_renew:
|
||||
print('Plot {} already exists'.format(archive_plot_filename))
|
||||
plot_name = 'vaccination_bar_graph_total_time'
|
||||
if not check_recreate_plot(plot_name):
|
||||
return
|
||||
|
||||
fig, ax = plt.subplots(1)
|
||||
|
@ -319,24 +352,18 @@ def plot_vaccination_bar_graph_total_time():
|
|||
ax.set_xlabel('Datum')
|
||||
ax.set_ylabel('Tägliche Impfungen')
|
||||
|
||||
add_annotations(ax)
|
||||
|
||||
plt.savefig(archive_plot_filename + '.pdf')
|
||||
plt.savefig(archive_plot_filename + '.png')
|
||||
plt.savefig(latest_plot_filename + '.pdf')
|
||||
plt.savefig(latest_plot_filename + '.png')
|
||||
save_plot(plot_name)
|
||||
plt.close()
|
||||
|
||||
print('Created plot {} as pdf and png'.format(archive_plot_filename))
|
||||
|
||||
plot_vaccination_bar_graph_total_time()
|
||||
|
||||
def plot_vaccination_bar_graph_total_time_by_week():
|
||||
|
||||
archive_plot_filename = '{}/vaccination_bar_graph_total_time_by_week'.format(archive_folder)
|
||||
latest_plot_filename = '{}/vaccination_bar_graph_total_time_by_week'.format(site_folder)
|
||||
|
||||
if os.path.isfile(archive_plot_filename + '.pdf') and not force_renew:
|
||||
print('Plot {} already exists'.format(archive_plot_filename))
|
||||
plot_name = 'vaccination_bar_graph_total_time_by_week'
|
||||
if not check_recreate_plot(plot_name):
|
||||
return
|
||||
|
||||
fig, ax = plt.subplots(1)
|
||||
|
@ -359,6 +386,8 @@ def plot_vaccination_bar_graph_total_time_by_week():
|
|||
bar1 = ax.bar(w, f, label='Wöchentliche Erstimpfungen', color='blue', width=6.8)
|
||||
bar2 = ax.bar(w, s, label='Wöchentliche Zweitimpfungen', color='lightblue', width=6.8, bottom=f)
|
||||
|
||||
i = 0
|
||||
|
||||
for r1, r2 in zip(bar1, bar2):
|
||||
|
||||
x = r1.get_x() + r1.get_width() / 2.0
|
||||
|
@ -375,6 +404,37 @@ def plot_vaccination_bar_graph_total_time_by_week():
|
|||
|
||||
plt.text(x, hg * 1000, f'{hg:5n} k'.replace('.', ' '), ha='center', va='bottom')
|
||||
|
||||
if i == 12:
|
||||
# Woche der AstraZeneca-Aussetzung
|
||||
plt.annotate('AZ-Stopp', (x, hg * 1000 + 50000),
|
||||
xytext=(x, ax.get_ylim()[1]),
|
||||
arrowprops={
|
||||
'arrowstyle': '->'
|
||||
},
|
||||
bbox={
|
||||
'boxstyle': 'square',
|
||||
'fc': 'white',
|
||||
'ec': 'black'
|
||||
},
|
||||
ha='center')
|
||||
|
||||
if i == len(bar1) - 1:
|
||||
plt.annotate('Diese Woche', (x, hg * 1000 + 50000),
|
||||
xytext=(x, ax.get_ylim()[1]),
|
||||
arrowprops={
|
||||
'arrowstyle': '->',
|
||||
'relpos': (0, 0)
|
||||
},
|
||||
bbox={
|
||||
'boxstyle': 'square',
|
||||
'fc': 'white',
|
||||
'ec': 'black'
|
||||
},
|
||||
ha='left')
|
||||
|
||||
i = i + 1
|
||||
|
||||
|
||||
ax.legend(loc='upper left')
|
||||
ax.get_xaxis().set_major_formatter(DateFormatter('%Y-w%W'))
|
||||
ax.get_xaxis().set_major_locator(WeekdayLocator(3, 2))
|
||||
|
@ -383,24 +443,15 @@ def plot_vaccination_bar_graph_total_time_by_week():
|
|||
ax.set_xlabel('Datum')
|
||||
ax.set_ylabel('Wöchentliche Impfungen')
|
||||
|
||||
|
||||
plt.savefig(archive_plot_filename + '.pdf')
|
||||
plt.savefig(archive_plot_filename + '.png')
|
||||
plt.savefig(latest_plot_filename + '.pdf')
|
||||
plt.savefig(latest_plot_filename + '.png')
|
||||
save_plot(plot_name)
|
||||
plt.close()
|
||||
|
||||
print('Created plot {} as pdf and png'.format(archive_plot_filename))
|
||||
|
||||
plot_vaccination_bar_graph_total_time_by_week()
|
||||
|
||||
def plot_vaccination_bar_graph_total_time_two_bars():
|
||||
|
||||
archive_plot_filename = '{}/vaccination_bar_graph_total_time_two_bars'.format(archive_folder)
|
||||
latest_plot_filename = '{}/vaccination_bar_graph_total_time_two_bars'.format(site_folder)
|
||||
|
||||
if os.path.isfile(archive_plot_filename + '.pdf') and not force_renew:
|
||||
print('Plot {} already exists'.format(archive_plot_filename))
|
||||
plot_name = 'vaccination_bar_graph_total_time_two_bars'
|
||||
if not check_recreate_plot(plot_name):
|
||||
return
|
||||
|
||||
fig, ax = plt.subplots(1)
|
||||
|
@ -429,24 +480,17 @@ def plot_vaccination_bar_graph_total_time_two_bars():
|
|||
ax.set_xlabel('Datum')
|
||||
ax.set_ylabel('Tägliche Impfungen')
|
||||
|
||||
add_annotations(ax)
|
||||
|
||||
plt.savefig(archive_plot_filename + '.pdf')
|
||||
plt.savefig(archive_plot_filename + '.png')
|
||||
plt.savefig(latest_plot_filename + '.pdf')
|
||||
plt.savefig(latest_plot_filename + '.png')
|
||||
save_plot(plot_name)
|
||||
plt.close()
|
||||
|
||||
print('Created plot {} as pdf and png'.format(archive_plot_filename))
|
||||
|
||||
plot_vaccination_bar_graph_total_time_two_bars()
|
||||
|
||||
def plot_vaccination_bar_graph_compare_both_vaccinations():
|
||||
|
||||
archive_plot_filename = '{}/vaccination_bar_graph_compare_both_vaccinations'.format(archive_folder)
|
||||
latest_plot_filename = '{}/vaccination_bar_graph_compare_both_vaccinations'.format(site_folder)
|
||||
|
||||
if os.path.isfile(archive_plot_filename + '.pdf') and not force_renew:
|
||||
print('Plot {} already exists'.format(archive_plot_filename))
|
||||
plot_name = 'vaccination_bar_graph_compare_both_vaccinations'
|
||||
if not check_recreate_plot(plot_name):
|
||||
return
|
||||
|
||||
fig, ax = plt.subplots(1)
|
||||
|
@ -476,23 +520,15 @@ def plot_vaccination_bar_graph_compare_both_vaccinations():
|
|||
ax.set_xlabel('Datum')
|
||||
ax.set_ylabel('Tägliche Impfungen')
|
||||
|
||||
|
||||
plt.savefig(archive_plot_filename + '.pdf')
|
||||
plt.savefig(archive_plot_filename + '.png')
|
||||
plt.savefig(latest_plot_filename + '.pdf')
|
||||
plt.savefig(latest_plot_filename + '.png')
|
||||
save_plot(plot_name)
|
||||
plt.close()
|
||||
|
||||
print('Created plot {} as pdf and png'.format(archive_plot_filename))
|
||||
|
||||
plot_vaccination_bar_graph_compare_both_vaccinations()
|
||||
|
||||
def plot_cumulative_two_vaccinations():
|
||||
archive_plot_filename = '{}/cumulative_two_vaccinations'.format(archive_folder)
|
||||
latest_plot_filename = '{}/cumulative_two_vaccinations'.format(site_folder)
|
||||
|
||||
if os.path.isfile(archive_plot_filename + '.pdf') and not force_renew:
|
||||
print('Plot {} already exists'.format(archive_plot_filename))
|
||||
plot_name = 'cumulative_two_vaccinations'
|
||||
if not check_recreate_plot(plot_name):
|
||||
return
|
||||
|
||||
fig, ax = plt.subplots(1)
|
||||
|
@ -522,24 +558,18 @@ def plot_cumulative_two_vaccinations():
|
|||
ax.set_xlabel('Datum')
|
||||
ax.set_ylabel('Kumulative Impfungen')
|
||||
|
||||
add_annotations(ax)
|
||||
|
||||
plt.savefig(archive_plot_filename + '.pdf')
|
||||
plt.savefig(archive_plot_filename + '.png')
|
||||
plt.savefig(latest_plot_filename + '.pdf')
|
||||
plt.savefig(latest_plot_filename + '.png')
|
||||
save_plot(plot_name)
|
||||
plt.close()
|
||||
|
||||
print('Created plot {} as pdf and png'.format(archive_plot_filename))
|
||||
|
||||
|
||||
plot_cumulative_two_vaccinations()
|
||||
|
||||
def plot_cumulative_two_vaccinations_percentage():
|
||||
archive_plot_filename = '{}/cumulative_two_vaccinations_percentage'.format(archive_folder)
|
||||
latest_plot_filename = '{}/cumulative_two_vaccinations_percentage'.format(site_folder)
|
||||
|
||||
if os.path.isfile(archive_plot_filename + '.pdf') and not force_renew:
|
||||
print('Plot {} already exists'.format(archive_plot_filename))
|
||||
plot_name = 'cumulative_two_vaccinations_percentage'
|
||||
if not check_recreate_plot(plot_name):
|
||||
return
|
||||
|
||||
fig, ax = plt.subplots(1)
|
||||
|
@ -570,25 +600,19 @@ def plot_cumulative_two_vaccinations_percentage():
|
|||
ax.set_xlabel('Datum')
|
||||
ax.set_ylabel('Kumulative Impfungen')
|
||||
|
||||
add_annotations(ax)
|
||||
|
||||
plt.savefig(archive_plot_filename + '.pdf')
|
||||
plt.savefig(archive_plot_filename + '.png')
|
||||
plt.savefig(latest_plot_filename + '.pdf')
|
||||
plt.savefig(latest_plot_filename + '.png')
|
||||
save_plot(plot_name)
|
||||
plt.close()
|
||||
|
||||
print('Created plot {} as pdf and png'.format(archive_plot_filename))
|
||||
|
||||
|
||||
plot_cumulative_two_vaccinations_percentage()
|
||||
|
||||
|
||||
def plot_people_between_first_and_second():
|
||||
archive_plot_filename = '{}/people_between_first_and_second'.format(archive_folder)
|
||||
latest_plot_filename = '{}/people_between_first_and_second'.format(site_folder)
|
||||
|
||||
if os.path.isfile(archive_plot_filename + '.pdf') and not force_renew:
|
||||
print('Plot {} already exists'.format(archive_plot_filename))
|
||||
plot_name = 'people_between_first_and_second'
|
||||
if not check_recreate_plot(plot_name):
|
||||
return
|
||||
|
||||
fig, ax = plt.subplots(1)
|
||||
|
@ -620,25 +644,18 @@ def plot_people_between_first_and_second():
|
|||
ax.set_xlabel('Datum')
|
||||
ax.set_ylabel('Personen zwischen Erst- und Zweitimpfung')
|
||||
|
||||
add_annotations(ax)
|
||||
|
||||
plt.savefig(archive_plot_filename + '.pdf')
|
||||
plt.savefig(archive_plot_filename + '.png')
|
||||
plt.savefig(latest_plot_filename + '.pdf')
|
||||
plt.savefig(latest_plot_filename + '.png')
|
||||
save_plot(plot_name)
|
||||
plt.close()
|
||||
|
||||
print('Created plot {} as pdf and png'.format(archive_plot_filename))
|
||||
|
||||
|
||||
plot_people_between_first_and_second()
|
||||
|
||||
def plot_vaccination_rate():
|
||||
|
||||
archive_plot_filename = '{}/vaccination_rate'.format(archive_folder)
|
||||
latest_plot_filename = '{}/vaccination_rate'.format(site_folder)
|
||||
|
||||
if os.path.isfile(archive_plot_filename + '.pdf') and not force_renew:
|
||||
print('Plot {} already exists'.format(archive_plot_filename))
|
||||
plot_name = 'vaccination_rate'
|
||||
if not check_recreate_plot(plot_name):
|
||||
return
|
||||
|
||||
fig, ax = plt.subplots(1)
|
||||
|
@ -671,23 +688,17 @@ def plot_vaccination_rate():
|
|||
ax.set_xlabel('Datum')
|
||||
ax.set_ylabel('Impfrate [Impfungen/Tag]')
|
||||
|
||||
plt.savefig(archive_plot_filename + '.pdf')
|
||||
plt.savefig(archive_plot_filename + '.png')
|
||||
plt.savefig(latest_plot_filename + '.pdf')
|
||||
plt.savefig(latest_plot_filename + '.png')
|
||||
plt.close()
|
||||
add_annotations(ax)
|
||||
|
||||
print('Created plot {} as pdf and png'.format(archive_plot_filename))
|
||||
save_plot(plot_name)
|
||||
plt.close()
|
||||
|
||||
plot_vaccination_rate()
|
||||
|
||||
def plot_vaccination_done_days():
|
||||
|
||||
archive_plot_filename = '{}/vaccination_done_days'.format(archive_folder)
|
||||
latest_plot_filename = '{}/vaccination_done_days'.format(site_folder)
|
||||
|
||||
if os.path.isfile(archive_plot_filename + '.pdf') and not force_renew:
|
||||
print('Plot {} already exists'.format(archive_plot_filename))
|
||||
plot_name = 'vaccination_done_days'
|
||||
if not check_recreate_plot(plot_name):
|
||||
return
|
||||
|
||||
fig, ax = plt.subplots(1)
|
||||
|
@ -718,23 +729,17 @@ def plot_vaccination_done_days():
|
|||
ax.set_xlabel('Datum')
|
||||
ax.set_ylabel('Tage, bis 70 % erreicht sind')
|
||||
|
||||
plt.savefig(archive_plot_filename + '.pdf')
|
||||
plt.savefig(archive_plot_filename + '.png')
|
||||
plt.savefig(latest_plot_filename + '.pdf')
|
||||
plt.savefig(latest_plot_filename + '.png')
|
||||
plt.close()
|
||||
add_annotations(ax)
|
||||
|
||||
print('Created plot {} as pdf and png'.format(archive_plot_filename))
|
||||
save_plot(plot_name)
|
||||
plt.close()
|
||||
|
||||
plot_vaccination_done_days()
|
||||
|
||||
def plot_vaccination_done_dates():
|
||||
|
||||
archive_plot_filename = '{}/vaccination_done_dates'.format(archive_folder)
|
||||
latest_plot_filename = '{}/vaccination_done_dates'.format(site_folder)
|
||||
|
||||
if os.path.isfile(archive_plot_filename + '.pdf') and not force_renew:
|
||||
print('Plot {} already exists'.format(archive_plot_filename))
|
||||
plot_name = 'vaccination_done_dates'
|
||||
if not check_recreate_plot(plot_name):
|
||||
return
|
||||
|
||||
fig, ax = plt.subplots(1)
|
||||
|
@ -775,13 +780,10 @@ def plot_vaccination_done_dates():
|
|||
ax.set_xlabel('Datum')
|
||||
ax.set_ylabel('Datum, an dem 70 % erreicht sind')
|
||||
|
||||
plt.savefig(archive_plot_filename + '.pdf')
|
||||
plt.savefig(archive_plot_filename + '.png')
|
||||
plt.savefig(latest_plot_filename + '.pdf')
|
||||
plt.savefig(latest_plot_filename + '.png')
|
||||
plt.close()
|
||||
add_annotations(ax)
|
||||
|
||||
print('Created plot {} as pdf and png'.format(archive_plot_filename))
|
||||
save_plot(plot_name)
|
||||
plt.close()
|
||||
|
||||
plot_vaccination_done_dates()
|
||||
|
||||
|
@ -791,7 +793,7 @@ def render_dashboard():
|
|||
stylesheet_filename = 'site/rki-dashboard.css'
|
||||
stylesheet_archive_filename = 'site/archive/{}/rki-dashboard.css'.format(filename_stand)
|
||||
|
||||
if os.path.isfile(dashboard_archive_filename) and not force_renew:
|
||||
if os.path.isfile(dashboard_archive_filename) and not force_renew_dashboard:
|
||||
print('Dashboard {} already exists'.format(dashboard_archive_filename))
|
||||
return
|
||||
|
||||
|
|
Loading…
Reference in a new issue