matplotlib
Simple Examples
errorbar
#!/usr/bin/python3
"""
VER = 23.1026
--
DESCR:
Побудова matplotlib.pyplot errorbar (лінія з похибками) в PDF (через borb)
"""
import sys
import _lib_
import _conf
from borb.pdf import Document
from borb.pdf import Page
from borb.pdf import SingleColumnLayout
from borb.pdf import PageLayout
from borb.pdf import Paragraph
from borb.pdf import PDF
from borb.pdf import Chart
from decimal import Decimal
import matplotlib.pyplot as plt
import numpy as np # for np.arange
SCRIPT_NAME = 'test_plot_errorbar'
def create_plot() -> None:
fig, ax = plt.subplots()
x = [1, 2, 5, 8, 12, 16]
y_et = [1, 2, 5, 8, 12, 16]
y = [0.82, 1.5, 4.32, 7.12, 10.86, 14.81]
yerr = [0.44, 0.52, 0.94, 0.93, 1.13, 1.44]
ax.set_title('Залежність кількості поділок шкали від швидкості потоку')
ax.set_ylabel('Кількість поділок шкали за секунду')
ax.set_xlabel('Середня швидкість повітряного потоку, м/с')
ax.grid(True)
# ручна розмітка поділок на осях, якщо необхідна своя
yticks = np.arange(0, 17, 1)
xticks = np.arange(1, 17, 1)
ax.set_xticks(xticks)
ax.set_yticks(yticks)
plt.plot(x, y_et, color='orange', dashes=[6, 2], label='Ідеальний прилад')
plt.errorbar(x, y, yerr=yerr, label='Анемометр 11486')
plt.legend(loc='lower right')
# https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.legend.html#matplotlib.pyplot.legend
return plt.gcf()
def main():
# create Document
doc: Document = Document()
# create Page
page: Page = Page()
# add Page to Document
doc.add_page(page)
# set a PageLayout
layout: PageLayout = SingleColumnLayout(page)
# add a Paragraph
layout.add(Chart(create_plot(), width=Decimal(350), height=Decimal(256)))
# store
with open('output_' + SCRIPT_NAME + '.pdf', "wb") as pdf_file_handle:
PDF.dumps(pdf_file_handle, doc)
if __name__ == "__main__":
main()
fill_between
#!/usr/bin/python3
"""
VER = 23.1026
--
DESCR:
Побудова matplotlib.pyplot fill_between (область похибок)
"""
import sys
import _lib_
import _conf
from borb.pdf import Document
from borb.pdf import Page
from borb.pdf import SingleColumnLayout
from borb.pdf import PageLayout
from borb.pdf import Paragraph
from borb.pdf import PDF
from borb.pdf import Chart
from decimal import Decimal
import matplotlib.pyplot as plt
SCRIPT_NAME = 'test_plot_errorbar'
def create_plot() -> None:
fig, ax = plt.subplots()
x = [1, 2, 5, 8, 12, 16]
y_et = [1, 2, 5, 8, 12, 16]
y = [0.56, 1.57, 4.42, 7.20, 11.04, 15.06]
yerr = [0.44, 0.52, 0.94, 0.93, 1.13, 1.44]
ax.set_title('Залежність кількості поділок шкали від швидкості потоку')
ax.set_ylabel('Кількість поділок шкали за секунду')
ax.set_xlabel('Середня швидкість повітряного потоку, м/с')
ax.grid(True)
plt.plot(x, y_et, color='red', dashes=[6, 2], label='Ідеальний прилад')
# область невизначеності
y_min = []
y_max = []
for i in range(len(y)):
y_min.append(y[i]-yerr[i])
y_max.append(y[i]+yerr[i])
plt.plot(x, y, label='Анемометр 11486')
ax.fill_between(x, y_min, y_max, alpha=0.2)
plt.legend(loc='lower right')
# https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.legend.html#matplotlib.pyplot.legend
return plt.gcf()
def main():
# create Document
doc: Document = Document()
# create Page
page: Page = Page()
# add Page to Document
doc.add_page(page)
# set a PageLayout
layout: PageLayout = SingleColumnLayout(page)
# add a Paragraph
layout.add(Chart(create_plot(), width=Decimal(350), height=Decimal(256)))
# store
with open('output_' + SCRIPT_NAME + '.pdf', "wb") as pdf_file_handle:
PDF.dumps(pdf_file_handle, doc)
if __name__ == "__main__":
main()
savefig
#!/usr/bin/python3
"""
VER = 23.1026
--
DESCR:
Побудова matplotlib.pyplot і збереження у файл png
"""
import sys
import _lib_
import _conf
from borb.pdf import Document
from borb.pdf import Page
from borb.pdf import SingleColumnLayout
from borb.pdf import PageLayout
from borb.pdf import Paragraph
from borb.pdf import PDF
from borb.pdf import Chart
from decimal import Decimal
import matplotlib.pyplot as plt
def create_plot_png(filename, serial, aver_str, indet_str) -> None:
fig, ax = plt.subplots()
x = [1, 2, 5, 8, 12, 16]
y_et = [1, 2, 5, 8, 12, 16]
y = aver_str.split(';')
yerr = indet_str.split(';')
y = list((float(i) for i in y))
yerr = list((float(i) for i in yerr))
ax.set_title('Залежність кількості поділок шкали від швидкості потоку')
ax.set_ylabel('Кількість поділок шкали за секунду')
ax.set_xlabel('Середня швидкість повітряного потоку, м/с')
ax.grid(True)
plt.plot(x, y_et, color='orange', dashes=[6,2], label='Еталон') #Ідеальний прилад
plt.errorbar(x, y, yerr=yerr, label=f'Анемометр {serial}')
plt.legend(loc='lower right')
plt.savefig(filename + '_' + serial)
return None
def main():
create_plot_png('/home/olex/www/meteo/meteo.pp.ua/test/image',
'3333',
'0.56;1.5667;4.4183;7.2033;11.0417;15.065',
'0.4295;0.5195;0.9461;0.9347;1.1373;1.4506')
print('ready!')
if __name__ == "__main__":
main()
Дивись також:
https://matplotlib.org/stable/gallery/index.html https://matplotlib.org/stable/users/explain/axes/legend_guide.html https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.legend.html https://mipt-stats.gitlab.io/courses/python/06_matplotlib.html
Last updated