{"id":304188,"date":"2020-05-25T09:00:36","date_gmt":"2020-05-25T09:00:36","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=304188"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=304188","title":{"rendered":"\u0428\u043f\u0430\u0440\u0433\u0430\u043b\u043a\u0430 \u043f\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Python \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Plotly"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/502958\/\">Plotly \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u0435\u0439:<\/p>\n<ul>\n<li>Front-End \u043d\u0430 JS<\/li>\n<li>Back-End \u043d\u0430 Python (\u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u0432\u0437\u044f\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Seaborn)<\/li>\n<li>Back-End \u043d\u0430 R<\/li>\n<\/ul>\n<p>  <i>\u0412 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u044b\u043d\u0435 \u0432\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u044b \u043e\u0442 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043a \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c, \u0442\u0430\u043a \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0441 \u043e\u043f\u044b\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u0443\u0447\u043d\u043e. \u0422\u0430\u043a \u0436\u0435 \u044d\u0442\u0430 \u00ab\u0448\u043f\u0430\u0440\u0433\u0430\u043b\u043a\u0430\u00bb \u043d\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u0442 \u043d\u0430 100% \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. <\/i><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/o2\/jn\/nm\/o2jnnmubbn2dcgsw1nsib2ksee4.gif\"><\/p>\n<p>  <a name=\"habracut\"><\/a><\/p>\n<p>  <i>\u0418\u0437\u0432\u0438\u043d\u044f\u044e\u0441\u044c \u0437\u0430 \u0437\u0430\u043c\u044b\u043b\u0435\u043d\u043d\u044b\u0435 gif&#8217;\u043a\u0438 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0438\u0437 \u0432\u0438\u0434\u0435\u043e, \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0441 \u044d\u043a\u0440\u0430\u043d\u0430.<\/i><\/p>\n<p>  Jupyter Notebook \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438:<\/p>\n<ul>\n<li><b><a href=\"https:\/\/github.com\/lexnekr\/plotly_lesson\" rel=\"nofollow\">github<\/a><\/b><\/li>\n<li><b><a href=\"https:\/\/colab.research.google.com\/drive\/1luF10kH3gGFGWBVE9Kd8D39BmYh-5dtE\" rel=\"nofollow\">colab<\/a><\/b><\/li>\n<\/ul>\n<p>  <a href=\"https:\/\/plotly.com\/graphing-libraries\/\" rel=\"nofollow\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a><\/p>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u043d\u0430 \u0431\u0430\u0437\u0435 plotly \u0438 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 Flask \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432 <a href=\"https:\/\/dash.plotly.com\/\" rel=\"nofollow\">Dash<\/a>.<\/p>\n<ul>\n<li><b>Plotly \u2014 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0445 \u0446\u0435\u043b\u044f\u0445<\/b><\/li>\n<li>Plotly \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 offline<\/li>\n<li>Plotly \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0442\u0440\u043e\u0438\u0442\u044c <b>\u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 <\/b>\u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/li>\n<\/ul>\n<p>  \u0422.\u0435. \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Plotly \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u00ab\u043d\u0430 \u043b\u0435\u0442\u0443\u00bb (\u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044f \u0433\u0440\u0430\u0444\u0438\u043a \u0432 matplotlib, \u0438\u0437\u043c\u0435\u043d\u044f\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431, \u0432\u043a\u043b\u044e\u0447\u0430\u044f\/\u0432\u044b\u043a\u043b\u044e\u0447\u0430\u044f \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435), \u0442\u0430\u043a \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043e\u0442\u0447\u0451\u0442 (\u0434\u0430\u0448\u0431\u043e\u0440\u0434).<\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0442.\u043a. \u043e\u043d\u0430 \u043d\u0435 \u0432\u0445\u043e\u0434\u0438\u0442 \u043d\u0438 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442, \u043d\u0438 \u0432 Anaconda. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c pip:<\/p>\n<p>  <code>pip install plotly<\/code><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 Jupyter Notebook, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u044d\u0434\u0436\u0438\u043a &quot;!&quot;, \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<p>  <code>!pip install plotly<\/code><\/p>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c. \u0412 \u0440\u0430\u0437\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u044f\u0445 \u0448\u043f\u0430\u0440\u0433\u0430\u043b\u043a\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u0442\u0430\u043a \u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u0435\u0433\u043e \u043f\u043e\u0434\u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0443 \u043d\u0430\u0441.<\/p>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Pandas \u0438 Numpy \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u044b\u0440\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/b>                         <\/p>\n<div class=\"spoiler_text\"><code>import plotly<br \/>  import plotly.graph_objs as go<br \/>  import plotly.express as px<br \/>  from plotly.subplots import make_subplots<\/p>\n<p>  import numpy as np<br \/>  import pandas as pd<\/code>  <\/div>\n<\/p><\/div>\n<p>  <\/p>\n<h3>\u041b\u0438\u043d\u0435\u0439\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a<\/h3>\n<p>  \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u043f\u043e \u0442\u043e\u0447\u043a\u0430\u043c.<\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e f(x)=x<sup>2<\/sup> <\/p>\n<p>  \u0421\u043f\u0435\u0440\u0432\u0430 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043c \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u00ab\u0432 \u043b\u043e\u0431\u00bb:<\/p>\n<ul>\n<li>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 scatter \u0438\u0437 \u043f\u043e\u0434\u043c\u043e\u0434\u0443\u043b\u044f plotly.express (\u0432\u043d\u0443\u0442\u0440\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c 2 \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u043e\u0447\u0435\u043a: \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b X \u0438 Y)<\/li>\n<li>\u0422\u0443\u0442 \u0436\u0435 \u00ab\u043f\u043e\u043a\u0430\u0436\u0435\u043c\u00bb \u0435\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0437\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 show()<\/li>\n<\/ul>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u2014 \u0433\u0440\u0430\u0444\u0438\u043a \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439, \u0435\u0441\u043b\u0438 \u043d\u0430\u0432\u0435\u0441\u0442\u0438 \u043d\u0430 \u043d\u0435\u0433\u043e \u043a\u0443\u0440\u0441\u043e\u0440, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0435\u0433\u043e \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0430\u0442\u044c \u0438 \u0443\u0434\u0430\u043b\u044f\u0442\u044c, \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u043a\u0438, \u043f\u043e \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u044e \u043a\u0443\u0440\u0441\u043e\u0440\u0430 \u043d\u0430 \u0442\u043e\u0447\u043a\u0443 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0430 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u00ab\u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0438\u0442\u044c\u00bb \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043a\u0430\u043a \u0444\u0430\u0439\u043b.<\/p>\n<p>  \u0412\u0441\u0451 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e JS \u0432 \u0432\u0430\u0448\u0435\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. \u0410 \u0437\u043d\u0430\u0447\u0438\u0442, \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u044d\u0442\u0438\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0444\u0438\u0433\u0443\u0440\u044b (<i>\u043d\u043e \u043c\u044b \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0436\u0430\u043b\u0443\u0439 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c, \u0442.\u043a. JS != Python<\/i>)<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">x = np.arange(0, 5, 0.1) def f(x):     return x**2  px.scatter(x=x, y=f(x)).show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/-o\/1w\/hr\/-o1whr3b43i0_xumjp7qrepivay.png\"><\/p>\n<p>  \u0411\u043e\u043b\u0435\u0435 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u043e\u0442 \u0436\u0435 \u0432 \u043a\u043e\u0434 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0432\u0438\u0434\u0435:<\/p>\n<pre><code class=\"python\">fig = px.scatter(x=x, y=f(x)) fig.show()<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0438\u0433\u0443\u0440\u0443<\/li>\n<li>\u0420\u0438\u0441\u0443\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a<\/li>\n<li>\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0444\u0438\u0433\u0443\u0440\u0443<\/li>\n<\/ul>\n<p>  2 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0422.\u043a. \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Express. \u0411\u044b\u0441\u0442\u0440\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e.<\/p>\n<p>  \u041d\u043e \u043c\u0430\u043b\u043e\u0432\u0430\u0442\u043e \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u043e\u043c\u0443 \u0443\u0440\u043e\u0432\u043d\u044e \u2014 \u0441\u0440\u0430\u0437\u0443 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0438\u0433\u0443\u0440\u0443 \u0438 \u043d\u0430\u043d\u0435\u0441\u0451\u043c \u043d\u0430 \u043d\u0435\u0451 \u043e\u0431\u044a\u0435\u043a\u0442\u044b.<\/p>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u0441\u0440\u0430\u0437\u0443 \u0432\u044b\u0432\u0435\u0434\u0435\u043c \u0444\u0438\u0433\u0443\u0440\u0443 \u0434\u043b\u044f \u043f\u043e\u043a\u0430\u0437\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 show().<\/p>\n<p>  <i>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Matplotlib \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043e\u0441\u0435\u0439 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f, \u0445\u043e\u0442\u044f \u043c\u044b \u0441 \u043d\u0438\u043c\u0438 \u0435\u0449\u0451 \u0441\u0442\u043e\u043b\u043a\u043d\u0451\u043c\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0432\u043c\u0435\u0441\u0442\u0435<\/i><\/p>\n<pre><code class=\"python\">fig = go.Figure() #\u0417\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u0434 fig.show()<\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/lk\/bn\/pi\/lkbnpiofy8jjnfmtokpucyhfq9y.png\"><br \/>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u043f\u043e\u043a\u0430 \u043f\u0443\u0441\u0442\u043e.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0447\u0442\u043e \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 \u0444\u0438\u0433\u0443\u0440\u044b add_trace.<\/p>\n<pre><code class=\"python\">fig.add_trace(\u0422\u0423\u0422_\u0422\u041e_\u0427\u0422\u041e_\u0425\u041e\u0422\u0418\u041c_\u041f\u0415\u0420\u0415\u0414\u0410\u0422\u042c_\u0414\u041b\u042f_\u041e\u0422\u041e\u0411\u0420\u0410\u0416\u0415\u041d\u0418\u042f_\u0418_\u0413\u0414\u0415)<\/code><\/pre>\n<p>  \u041d\u043e \u0427\u0422\u041e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c? \u0413\u0440\u0430\u0444\u0438\u043a \u043f\u043e \u0442\u043e\u0447\u043a\u0430\u043c. \u0413\u0440\u0430\u0444\u0438\u043a \u043c\u044b \u0443\u0436\u0435 \u0440\u0438\u0441\u043e\u0432\u0430\u043b\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Scatter \u0432 \u042d\u043a\u0441\u043f\u0440\u0435\u0441\u0441\u0435, \u0443 \u041e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439 Scatter, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0433\u043b\u044f\u043d\u0435\u043c \u0447\u0442\u043e \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442:<\/p>\n<pre><code class=\"python\">go.Scatter(x=x, y=f(x))<\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ds\/ho\/vm\/dshovmplsiclz9qjdodimbhlxec.png\"><br \/>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043c:<\/p>\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Scatter(x=x, y=f(x))) fig.show()<\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/3r\/zc\/fx\/3rzcfxqptm3pw8qqbwbak6pjlfs.png\"><br \/>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043a\u043e\u0434\u0435, \u043d\u043e \u0438 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u2014 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0433\u043b\u0430\u0434\u043a\u0430\u044f \u043a\u0440\u0438\u0432\u0430\u044f.<\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0442\u0430\u043a\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u043d\u0430\u043d\u0435\u0441\u0442\u0438 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0438\u0432\u044b\u0445, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Scatter(x=x, y=f(x))) fig.add_trace(go.Scatter(x=x, y=x)) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/br\/yy\/zx\/bryyzx7i9mrzssz1jptelmcql_i.gif\"><br \/>  \u041f\u043e\u0433\u043e\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435? \u0421\u043f\u0440\u0430\u0432\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0435\u0449\u0451 \u0438 \u043b\u0435\u0433\u0435\u043d\u0434\u0430!<\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043f\u043e\u043a\u0430 \u0433\u0440\u0430\u0444\u0438\u043a \u0431\u044b\u043b \u043e\u0434\u0438\u043d, \u0437\u0430\u0447\u0435\u043c \u043d\u0430\u043c \u043b\u0435\u0433\u0435\u043d\u0434\u0430?<\/p>\n<p>  \u041d\u043e \u043c\u0430\u0433\u0438\u044f Plotly \u0442\u0443\u0442 \u043d\u0435 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u043b\u044e\u0431\u0443\u044e \u0438\u0437 \u043f\u043e\u0434\u043f\u0438\u0441\u0435\u0439 \u0432 \u043b\u0435\u0433\u0435\u043d\u0434\u0435 \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u0438\u0441\u0447\u0435\u0437\u043d\u0435\u0442, \u0430 \u043d\u0430\u0434\u043f\u0438\u0441\u044c \u0441\u0442\u0430\u043d\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0431\u043b\u0435\u0434\u043d\u043e\u0439. \u0412\u0435\u0440\u043d\u0443\u0442\u044c \u0438\u0445 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u043a\u043b\u0438\u043a.<\/p>\n<p>  <b>\u041f\u043e\u0434\u043f\u0438\u0441\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432<\/b><\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 name, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0432 \u043b\u0435\u0433\u0435\u043d\u0434\u0435.<\/p>\n<p>  Plotly \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 LATEX \u0432 \u043f\u043e\u0434\u043f\u0438\u0441\u044f\u0445 (\u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e matplotlib \u0447\u0435\u0440\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 $$ \u0441 \u043e\u0431\u0435\u0438\u0445 \u0441\u0442\u043e\u0440\u043e\u043d).<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Scatter(x=x, y=f(x), name='$$f(x)=x^2$$')) fig.add_trace(go.Scatter(x=x, y=x, name='$$g(x)=x$$')) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/9k\/a_\/ix\/9ka_ixp8ui_d8m27j_ij-pz5wc0.png\"><br \/>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u044d\u0442\u043e \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u043f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u00ab\u0441\u044b\u0440\u043e\u043c\u00bb \u0432\u0438\u0434\u0435, \u0430 \u043d\u0435 \u0432 LATEX.<\/p>\n<p>  \u041f\u043e\u0431\u0435\u0434\u0438\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e, \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c HTML \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443 \u0432 \u043f\u043e\u0434\u043f\u0438\u0441\u044f\u0445. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0433 sup. \u0422\u0430\u043a \u0436\u0435 \u0437\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u0448\u0440\u0438\u0444\u0442 \u0434\u043b\u044f LATEX \u0438 HTML \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0447\u0435\u0440\u0442\u0430\u043d\u0438\u0435\u043c.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Scatter(x=x, y=f(x), name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;')) fig.add_trace(go.Scatter(x=x, y=x, name='$$g(x)=x$$')) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/u-\/g1\/t8\/u-g1t8eetjb7875lkfjzpowvrjm.png\"><\/p>\n<p>  \u0421 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u0438\u043d\u044b \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430, \u043b\u0435\u0433\u0435\u043d\u0434\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0435\u0437\u0436\u0430\u0442\u044c \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a. \u041c\u043d\u0435 \u044d\u0442\u043e \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0451\u043c \u043b\u0435\u0433\u0435\u043d\u0434\u0443 \u0432\u043d\u0438\u0437.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u043a \u0444\u0438\u0433\u0443\u0440\u0435 \u043c\u0435\u0442\u043e\u0434 update_layout, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>legend_orientation fig.update_layout(legend_orientation=&quot;h&quot;)<\/code>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Scatter(x=x, y=f(x),  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;')) fig.add_trace(go.Scatter(x=x, y=x, name='$$g(x)=x$$')) fig.update_layout(legend_orientation=&quot;h&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/cj\/ba\/db\/cjbadbt0zt2nvmbq25wr6xxws_i.png\"><br \/>  \u0425\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0441\u0432\u0435\u0440\u0445\u0443 \u2014 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0442\u0441\u0442\u0443\u043f \u0441\u0432\u0435\u0440\u0445\u0443 \u0434\u043e \u043f\u043e\u043b\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u0430.<\/p>\n<p>  \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u043e\u043b\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0438\u043c\u0435\u044e\u0442 \u043e\u0442\u0441\u0442\u0443\u043f 20 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u0441\u0442\u0443\u043f\u0430\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e update_layout, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 margin, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0439 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0438\u0437 \u043e\u0442\u0441\u0442\u0443\u043f\u043e\u0432:<\/p>\n<ul>\n<li>l \u2014 \u043e\u0442\u0441\u0442\u0443\u043f \u0441\u043b\u0435\u0432\u0430<\/li>\n<li>r \u2014 \u043e\u0442\u0441\u0442\u0443\u043f \u0441\u043f\u0440\u0430\u0432\u0430<\/li>\n<li>t \u2014 \u043e\u0442\u0441\u0442\u0443\u043f \u0441\u0432\u0435\u0440\u0445\u0443<\/li>\n<li>b \u2014 \u043e\u0442\u0441\u0442\u0443\u043f \u0441\u043d\u0438\u0437\u0443<\/li>\n<\/ul>\n<p>  \u0417\u0430\u0434\u0430\u0434\u0438\u043c \u0432\u0435\u0437\u0434\u0435 \u043d\u0443\u043b\u0435\u0432\u044b\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u044b <\/p>\n<pre><code class=\"python\">fig.update_layout(margin=dict(l=0, r=0, t=0, b=0))<\/code><\/pre>\n<p>  <i>update_layout \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437, \u043b\u0438\u0431\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432\u0441\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0432 \u043e\u0434\u043d\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e (\u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a)<\/i><\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Scatter(x=x, y=f(x),  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;')) fig.add_trace(go.Scatter(x=x, y=x, name='$$g(x)=x$$')) fig.update_layout(legend_orientation=&quot;h&quot;,                    margin=dict(l=0, r=0, t=0, b=0)) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0432 \u043b\u0435\u0433\u0435\u043d\u0434\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435, \u043c\u043d\u0435 \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f, \u0447\u0442\u043e \u043e\u043d\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0441\u043b\u0435\u0432\u0430. \u042f \u0431\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0451\u043b \u0432\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u0438\u0445 \u043f\u043e \u0446\u0435\u043d\u0442\u0440\u0443.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443 update_layout \u0430\u0442\u0440\u0438\u0431\u0443\u0442 legend, \u043a\u0443\u0434\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 \u0434\u043b\u044f \u0441\u0434\u0432\u0438\u0433\u0430 (<i>\u0441\u0434\u0432\u0438\u0433 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438, \u043d\u043e \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c<\/i>).<\/p>\n<p>  \u0421\u0434\u0432\u0438\u0433 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u0434\u043e\u043b\u044f\u0445 \u043e\u0442 \u0448\u0438\u0440\u0438\u043d\u044b \u0432\u0441\u0435\u0439 \u0444\u0438\u0433\u0443\u0440\u044b, \u043d\u043e \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u043b\u0435\u0432\u044b\u0439 \u043a\u0440\u0430\u0439 \u043b\u0435\u0433\u0435\u043d\u0434\u044b. \u0422.\u0435. \u0435\u0441\u043b\u0438 \u043c\u044b \u0443\u043a\u0430\u0436\u0435\u043c 0.5 (50% \u0448\u0438\u0440\u0438\u043d\u044b), \u0442\u043e \u043d\u0430\u0434\u043f\u0438\u0441\u044c \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0447\u0443\u0442\u044c \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u0430 \u0432\u043f\u0440\u0430\u0432\u043e.<\/p>\n<p>  <i>\u0422.\u043a. \u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0448\u0438\u0440\u0438\u043d\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0432\u0430\u0448\u0435\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430, \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u0448\u0440\u0438\u0444\u0442\u043e\u0432 \u0438 \u0442.\u043f., \u0442\u043e \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0434\u0433\u043e\u043d\u044f\u0442\u044c. \u041b\u0438\u0447\u043d\u043e \u0443 \u043c\u0435\u043d\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 0.43.<\/i><\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0448\u0430\u043c\u0430\u043d\u0438\u0442\u044c \u0441 \u0448\u0438\u0440\u0438\u043d\u043e\u0439, \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u0435\u043d\u0434\u0443 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u043e\u0447\u043a\u0438 \u0441\u0434\u0432\u0438\u0433\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 xanchor.<\/p>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u0434\u043b\u044f \u043b\u0435\u0433\u0435\u043d\u0434\u044b \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u0430\u043a\u043e\u0439 \u0441\u043b\u043e\u0432\u0430\u0440\u044c:<\/p>\n<pre><code class=\"python\">legend=dict(x=.5, xanchor=&quot;center&quot;)<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434 \u0446\u0435\u043b\u0438\u043a\u043e\u043c<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Scatter(x=x, y=f(x),  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;')) fig.add_trace(go.Scatter(x=x, y=x, name='$$g(x)=x$$')) fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   margin=dict(l=0, r=0, t=0, b=0)) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0421\u0442\u043e\u0438\u0442 \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043a \u043e\u0441\u044f\u043c \u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0443 \u0432 \u0446\u0435\u043b\u043e\u043c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u0432\u043d\u043e\u0432\u044c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f update_layout, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0441\u044f 3 \u043d\u043e\u0432\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430:<\/p>\n<pre><code class=\"python\">title=&quot;Plot Title&quot;, xaxis_title=&quot;x Axis Title&quot;, yaxis_title=&quot;y Axis Title&quot;,<\/code><\/pre>\n<p>  <i>\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u0434\u0432\u0438\u0433\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0437\u0430\u0434\u0430\u043b\u0438 \u0440\u0430\u043d\u0435\u0435 \u043c\u043e\u0433\u0443\u0442 \u043d\u0435\u0433\u0430\u0432\u0442\u0438\u0432\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0435\u0439 (\u0442\u0430\u043a \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u0438\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0443 \u043e\u0442\u0441\u0442\u0443\u043f \u0441\u0432\u0435\u0440\u0445\u0443 \u0441 0 \u0434\u043e 30 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439<\/i><\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Scatter(x=x, y=f(x),  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;')) fig.add_trace(go.Scatter(x=x, y=x, name='$$g(x)=x$$')) fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   title=&quot;Plot Title&quot;,                   xaxis_title=&quot;x Axis Title&quot;,                   yaxis_title=&quot;y Axis Title&quot;,                   margin=dict(l=0, r=0, t=30, b=0)) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/4h\/0t\/rp\/4h0trprnpakf5e264fxidguo5r4.png\"><\/p>\n<p>  \u0412\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u0441\u0430\u043c\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u043c, \u0438 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u0442 \u0438\u0437 \u0442\u043e\u0447\u0435\u043a. \u0412\u044b\u0434\u0435\u043b\u0438\u043c \u0438\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 mode \u0443 \u0441\u0430\u043c\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 Scatter.<\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Scatter(x=x, y=f(x), mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;')) fig.add_trace(go.Scatter(x=x, y=x, mode='markers', name='$$g(x)=x$$')) fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   margin=dict(l=0, r=0, t=0, b=0)) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/sf\/1o\/ik\/sf1oikvrbupkfvch8lpto7v1ntq.png\"><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e, \u0447\u0442\u043e LATEX \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 g(x)=x \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043a\u0443\u0440\u0441\u043e\u0440\u0430 \u043c\u044b\u0448\u0438 \u043d\u0430 \u0442\u043e\u0447\u043a\u0438.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043a\u0440\u043e\u0435\u043c \u044d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e.<\/p>\n<p>  \u0417\u0430\u0434\u0430\u0434\u0438\u043c \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 update_traces \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438. \u042d\u0442\u043e \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 hoverinfo, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043c\u0430\u0441\u043a\u0430 \u0438\u0437 \u0438\u043c\u0451\u043d \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u00abx+y\u00bb \u2014 \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Scatter(x=x, y=f(x), mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;')) fig.add_trace(go.Scatter(x=x, y=x, mode='markers', name='$$g(x)=x$$')) fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   margin=dict(l=0, r=0, t=0, b=0)) fig.update_traces(hoverinfo=&quot;x+y&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/q1\/ik\/zv\/q1ikzvccax6n3rh-tusvf_emaq8.png\"><br \/>  \u041a\u0430\u043a-\u0442\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e, \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0435?<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0438\u0437 \u0432\u0441\u0435\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0441\u0430\u043c\u0438 \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0448\u0430\u0431\u043b\u043e\u043d \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438.<\/p>\n<ul>\n<li>hoverinfo=\u00aball\u00bb<\/li>\n<li>\u0432 hovertemplate \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0441\u0442\u0440\u043e\u043a\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c HTML \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u0438\u043c\u0435\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0431\u0435\u0440\u0451\u043c \u0432 \u0444\u0438\u0433\u0443\u0440\u043d\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438 \u0438 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c %, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, %{x}<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Scatter(x=x, y=f(x), mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;')) fig.add_trace(go.Scatter(x=x, y=x, mode='markers', name='g(x)=x')) fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   margin=dict(l=0, r=0, t=0, b=0)) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ej\/ti\/ug\/ejtiugvzombajuwptibmenlmi00.png\"><\/p>\n<p>  \u0410 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043d\u0430 2 \u043a\u0440\u0438\u0432\u044b\u0445 \u0432 \u0442\u043e\u0447\u043a\u0430\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c?<\/p>\n<p>  \u0422.\u043a. \u044d\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0439 \u0444\u0438\u0433\u0443\u0440\u044b, \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d update_layout \u0438 \u0435\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 hovermode.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Scatter(x=x, y=f(x), mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;')) fig.add_trace(go.Scatter(x=x, y=x, mode='markers', name='g(x)=x')) fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   hovermode=&quot;x&quot;,                   margin=dict(l=0, r=0, t=0, b=0)) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ve\/69\/fw\/ve69fwlr_4hw7q7awo68bqzzqye.png\"><br \/>  \u041a\u0441\u0442\u0430\u0442\u0438, \u043c\u0430\u0440\u043a\u0435\u0440\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439 \u0438 \u044f\u0432\u043d\u043e.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 marker, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0441\u043b\u043e\u0432\u0430\u0440\u044c. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2014 <a href=\"https:\/\/plotly.com\/python\/marker-style\/\" rel=\"nofollow\">plotly.com\/python\/marker-style<\/a><\/p>\n<p>  \u0410 \u043c\u044b \u043b\u0438\u0448\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043c\u0441\u044f \u0431\u0430\u043b\u043e\u0432\u0441\u0442\u0432\u043e\u043c:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Scatter(x=x, y=f(x), mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;')) fig.add_trace(go.Scatter(x=x, y=x, mode='markers',name='g(x)=x',                          marker=dict(color='LightSkyBlue', size=20, line=dict(color='MediumPurple', width=3)))) fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   hovermode=&quot;x&quot;,                   margin=dict(l=0, r=0, t=0, b=0)) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/rl\/ki\/jc\/rlkijch2ske8iyr2i4ard4pentq.png\"><\/p>\n<p>  \u041a\u0430\u0436\u0435\u0442\u0441\u044f \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u043f\u043b\u043e\u0445\u043e \u0432\u0438\u0434\u043d\u043e \u0442\u0443 \u0447\u0430\u0441\u0442\u044c, \u0433\u0434\u0435 \u043a\u0440\u0438\u0432\u044b\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0442\u0441\u044f (\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0443\u044e \u0434\u043b\u044f \u043d\u0430\u0441).<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u0444\u0438\u0433\u0443\u0440\u044b:<\/p>\n<ul>\n<li>update_yaxes \u2014 \u043e\u0441\u044c Y (\u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c)<\/li>\n<li>update_xaxes \u2014 \u043e\u0441\u044c X (\u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c)<\/li>\n<\/ul>\n<p>  \u0421 \u0438\u0445 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043e\u0441\u0435\u0439 (<i>\u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043d\u0438\u0447\u0442\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u043d\u0430\u043c \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u043c<\/i>).<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.update_yaxes(range=[-0.5, 1.5]) fig.update_xaxes(range=[-0.5, 1.5]) fig.add_trace(go.Scatter(x=x, y=f(x), mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;')) fig.add_trace(go.Scatter(x=x, y=x, mode='markers',name='g(x)=x',                          marker=dict(color='LightSkyBlue', size=20, line=dict(color='MediumPurple', width=3)))) fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   hovermode=&quot;x&quot;,                   margin=dict(l=0, r=0, t=0, b=0)) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/cp\/vm\/9r\/cpvm9r99uqlv2ktsujphkgid4hu.png\"><\/p>\n<p>  \u0425\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0430\u043d\u0435\u0441\u0442\u0438 \u043e\u0441\u0435\u0432\u044b\u0435 \u043b\u0438\u043d\u0438\u0438.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443 \u0442\u0435\u0445 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0435\u0441\u0442\u044c 3 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430:<\/p>\n<ul>\n<li>zeroline \u2014 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u043b\u0438 \u043d\u0435\u0442 \u043e\u0441\u0435\u0432\u0443\u044e \u043b\u0438\u043d\u0438\u044e<\/li>\n<li>zerolinewidth \u2014 \u0437\u0430\u0434\u0430\u0451\u0442 \u0442\u043e\u043b\u0449\u0438\u043d\u0443 \u043e\u0441\u0435\u0432\u043e\u0439 (\u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445)<\/li>\n<li>zerolinecolor \u2014 \u0437\u0430\u0434\u0430\u0451\u0442 \u0446\u0432\u0435\u0442 \u043e\u0441\u0435\u0432\u043e\u0439 (\u0441\u0442\u0440\u043e\u043a\u0430, \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430, \u043c\u043e\u0436\u043d\u043e \u0435\u0433\u043e \u043a\u043e\u0434, \u043a\u0430\u043a \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0432 HTML \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0435 \u2014 <a href=\"http:\/\/htmlbook.ru\/css\/value\/color\" rel=\"nofollow\">htmlbook.ru\/css\/value\/color<\/a>)<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.update_yaxes(range=[-0.5, 1.5], zeroline=True, zerolinewidth=2, zerolinecolor='LightPink') fig.update_xaxes(range=[-0.5, 1.5], zeroline=True, zerolinewidth=2, zerolinecolor='#008000') fig.add_trace(go.Scatter(x=x, y=f(x), mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;')) fig.add_trace(go.Scatter(x=x, y=x, mode='markers',name='g(x)=x',                          marker=dict(color='LightSkyBlue', size=20, line=dict(color='MediumPurple', width=3)))) fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   hovermode=&quot;x&quot;,                   margin=dict(l=0, r=0, t=0, b=0)) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/lw\/mb\/g8\/lwmbg8vesuqxjml_nv5negeeopq.png\"><\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043d\u0430 \u043d\u0430\u0448 \u0433\u0440\u0430\u0444\u0438\u043a, \u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0445 \u043d\u0435 \u0431\u044b\u043b\u043e \u0432\u0438\u0434\u043d\u043e.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 Scatter \u0435\u0441\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442:<\/p>\n<pre><code class=\"python\">visible='legendonly'<\/code><\/pre>\n<p>  <i>\u0422.\u043a. \u043c\u044b \u0446\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043b\u0435\u0433\u0435\u043d\u0434\u0443 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u043e\u0447\u043a\u0438 \u0441\u0434\u0432\u0438\u0433\u0430, \u0442\u043e \u043d\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043c\u0435\u043d\u044f\u0442\u044c \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u0441\u0434\u0432\u0438\u0433\u0430 \u0441 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u0447\u0438\u0441\u043b\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0435\u0439.<\/i><\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">def h(x):     return np.sin(x)  def k(x):     return np.cos(x)  def m(x):     return np.tan(x)   fig = go.Figure() fig.update_yaxes(range=[-0.5, 1.5], zeroline=True, zerolinewidth=2, zerolinecolor='LightPink') fig.update_xaxes(range=[-0.5, 1.5], zeroline=True, zerolinewidth=2, zerolinecolor='#008000')  fig.add_trace(go.Scatter(visible='legendonly', x=x, y=h(x),  name='h(x)=sin(x)')) fig.add_trace(go.Scatter(visible='legendonly', x=x, y=k(x),  name='k(x)=cos(x)')) fig.add_trace(go.Scatter(visible='legendonly', x=x, y=m(x),  name='m(x)=tg(x)'))  fig.add_trace(go.Scatter(x=x, y=f(x), mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;')) fig.add_trace(go.Scatter(x=x, y=x, mode='markers',name='g(x)=x',                          marker=dict(color='LightSkyBlue', size=20, line=dict(color='MediumPurple', width=3)))) fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   hovermode=&quot;x&quot;,                   margin=dict(l=0, r=0, t=0, b=0)) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/av\/zt\/sc\/avztscvg159vrcqfsnu8dbim5fy.png\"><\/p>\n<p>  \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u0432\u0441\u0451 \u0436\u0435 \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u0435 \u0442\u0440\u0438\u0433\u043e\u043d\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u043c \u0438\u0445 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445, \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u0445.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0438\u0433\u0443\u0440\u0443 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043e\u0441\u044f\u043c\u0438.<\/p>\n<p>  \u0424\u0438\u0433\u0443\u0440\u0430 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u043c\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0434\u043c\u043e\u0434\u0443\u043b\u044f make_subplots.<\/p>\n<p>  \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e:<\/p>\n<ul>\n<li>row \u2014 \u0441\u0442\u0440\u043e\u043a<\/li>\n<li>col \u2014 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432<\/li>\n<\/ul>\n<p>  \u0410 \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u00ab\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b\u00bb \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0432 \u044d\u0442\u043e\u0439 \u00ab\u043c\u0430\u0442\u0440\u0438\u0446\u0435\u00bb (\u0441\u043f\u0435\u0440\u0432\u0430 \u0441\u0442\u0440\u043e\u043a\u0430, \u043f\u043e\u0442\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0435\u0446)<\/p>\n<pre><code class=\"python\">fig = make_subplots(rows=1, cols=2, specs=[[{'type':'domain'}, {'type':'domain'}]])<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = make_subplots(rows=1, cols=2)  fig.update_yaxes(range=[-0.5, 1.5], zeroline=True, zerolinewidth=2, zerolinecolor='LightPink') fig.update_xaxes(range=[-0.5, 1.5], zeroline=True, zerolinewidth=2, zerolinecolor='#008000')  fig.add_trace(go.Scatter(x=x, y=h(x),  name='h(x)=sin(x)'), 1, 1) fig.add_trace(go.Scatter(x=x, y=k(x),  name='k(x)=cos(x)'), 1, 1) fig.add_trace(go.Scatter(visible='legendonly', x=x, y=m(x),  name='m(x)=tg(x)'), 1, 1)  fig.add_trace(go.Scatter(x=x, y=f(x), mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;'), 1, 2) fig.add_trace(go.Scatter(x=x, y=x, mode='markers',name='g(x)=x',                          marker=dict(color='LightSkyBlue', size=20, line=dict(color='MediumPurple', width=3))), 1, 2) fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   hovermode=&quot;x&quot;,                   margin=dict(l=0, r=0, t=0, b=0)) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/35\/ky\/1_\/35ky1_1odmngt7yzlbhnfkteu60.png\"><\/p>\n<p>  \u0417\u0430\u043c\u0435\u0442\u0438\u043b\u0438, \u043d\u0430\u0448\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043e\u0441\u0435\u0439 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c \u043a \u043e\u0431\u043e\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u043c?<\/p>\n<p>  \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0435\u0441\u043b\u0438 \u0443 \u043c\u0435\u0442\u043e\u0434\u0430, \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0449\u0435\u0433\u043e \u043e\u0441\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b:<\/p>\n<ul>\n<li>row \u2014 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0438<\/li>\n<li>col \u2014 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u0430<\/li>\n<\/ul>\n<p>  \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0435:  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = make_subplots(rows=1, cols=2)  fig.update_yaxes(range=[-0.5, 1.5], zeroline=True, zerolinewidth=2, zerolinecolor='LightPink', col=2) fig.update_xaxes(range=[-0.5, 1.5], zeroline=True, zerolinewidth=2, zerolinecolor='#008000', col=2)  fig.add_trace(go.Scatter(x=x, y=h(x),  name='h(x)=sin(x)'), 1, 1) fig.add_trace(go.Scatter(x=x, y=k(x),  name='k(x)=cos(x)'), 1, 1) fig.add_trace(go.Scatter(visible='legendonly', x=x, y=m(x),  name='m(x)=tg(x)'), 1, 1)  fig.add_trace(go.Scatter(x=x, y=f(x), mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;'), 1, 2) fig.add_trace(go.Scatter(x=x, y=x, mode='markers',name='g(x)=x',                          marker=dict(color='LightSkyBlue', size=20, line=dict(color='MediumPurple', width=3))), 1, 2) fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   hovermode=&quot;x&quot;,                   margin=dict(l=0, r=0, t=0, b=0)) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/qb\/2d\/o1\/qb2do1vl8wkvudg_spwnvnzueve.png\"><br \/>  \u0410 \u0432\u043e\u0442 \u0435\u0441\u043b\u0438 \u0431\u0435\u0437\u0434\u0443\u043c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c title, xaxis_title \u0438 yaxis_title \u0434\u043b\u044f update_layout, \u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0439\u0442\u0438 \u043a\u0430\u0437\u0443\u0441 \u2014 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a 1 \u0433\u0440\u0430\u0444\u0438\u043a\u0443:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434, \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0449\u0438\u0439 \u043a \u043a\u0430\u0437\u0443\u0441\u0443<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = make_subplots(rows=1, cols=2)  fig.update_yaxes(range=[-0.5, 1.5], zeroline=True, zerolinewidth=2, zerolinecolor='LightPink', col=2) fig.update_xaxes(range=[-0.5, 1.5], zeroline=True, zerolinewidth=2, zerolinecolor='#008000', col=2)  fig.add_trace(go.Scatter(x=x, y=h(x),  name='h(x)=sin(x)'), 1, 1) fig.add_trace(go.Scatter(x=x, y=k(x),  name='k(x)=cos(x)'), 1, 1) fig.add_trace(go.Scatter(visible='legendonly', x=x, y=m(x),  name='m(x)=tg(x)'), 1, 1)  fig.add_trace(go.Scatter(x=x, y=f(x), mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;'), 1, 2) fig.add_trace(go.Scatter(x=x, y=x, mode='markers',name='g(x)=x',                          marker=dict(color='LightSkyBlue', size=20, line=dict(color='MediumPurple', width=3))), 1, 2) fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   hovermode=&quot;x&quot;,                   margin=dict(l=0, r=0, t=30, b=0)) fig.update_layout(title=&quot;Plot Title&quot;,                   xaxis_title=&quot;x Axis Title&quot;,                   yaxis_title=&quot;y Axis Title&quot;) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/f_\/m6\/a9\/f_m6a9mywtxbxblzdi4epanr7im.png\"><\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c, \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0444\u0438\u0433\u0443\u0440\u044b, \u043f\u0435\u0440\u0435\u0434\u0430\u0432 \u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 subplot_titles \u043a\u043e\u0440\u0442\u0435\u0436\/\u0441\u043f\u0438\u0441\u043e\u043a \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p>  \u041f\u043e\u0434\u043f\u0438\u0441\u0438 \u043e\u0441\u0435\u0439 \u043f\u043e\u0434 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0444\u0438\u0433\u0443\u0440\u044b:<\/p>\n<ul>\n<li>fig.update_xaxes<\/li>\n<li>fig.update_yaxes<\/li>\n<\/ul>\n<p>  \u041f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u0432 \u043d\u0438\u0445 \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 (\u0442.\u0435. \u00ab\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u00bb)<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434, \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0432\u0441\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = make_subplots(rows=1, cols=2, subplot_titles=(&quot;Plot 1&quot;, &quot;Plot 2&quot;))  fig.update_yaxes(range=[-0.5, 1.5], zeroline=True, zerolinewidth=2, zerolinecolor='LightPink', col=2) fig.update_xaxes(range=[-0.5, 1.5], zeroline=True, zerolinewidth=2, zerolinecolor='#008000', col=2)  fig.add_trace(go.Scatter(x=x, y=h(x),  name='h(x)=sin(x)'), 1, 1) fig.add_trace(go.Scatter(x=x, y=k(x),  name='k(x)=cos(x)'), 1, 1) fig.add_trace(go.Scatter(visible='legendonly', x=x, y=m(x),  name='m(x)=tg(x)'), 1, 1)  fig.add_trace(go.Scatter(x=x, y=f(x), mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;'), 1, 2) fig.add_trace(go.Scatter(x=x, y=x, mode='markers',name='g(x)=x',                          marker=dict(color='LightSkyBlue', size=20, line=dict(color='MediumPurple', width=3))), 1, 2) fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   hovermode=&quot;x&quot;,                   margin=dict(l=0, r=0, t=40, b=0)) fig.update_layout(title=&quot;Plot Title&quot;) fig.update_xaxes(title='\u041e\u0441\u044c X \u0433\u0440\u0430\u0444\u0438\u043a\u0430 1', col=1, row=1) fig.update_xaxes(title='\u041e\u0441\u044c X \u0433\u0440\u0430\u0444\u0438\u043a\u0430 2', col=2, row=1) fig.update_yaxes(title='\u041e\u0441\u044c Y \u0433\u0440\u0430\u0444\u0438\u043a\u0430 1', col=1, row=1) fig.update_yaxes(title='\u041e\u0441\u044c Y \u0433\u0440\u0430\u0444\u0438\u043a\u0430 2', col=2, row=1) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/wz\/b_\/b2\/wzb_b20jonnskfzo8axzx0iqnmo.png\"><br \/>  \u0418 \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u0434\u0438\u043d \u0433\u0440\u0430\u0444\u0438\u043a \u0431\u044b\u043b \u0431\u043e\u043b\u044c\u0448\u0435, \u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u0435\u043d\u044c\u0448\u0435, \u0442\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b<\/p>\n<ul>\n<li>column_widths \u2014 \u0437\u0430\u0434\u0430\u0451\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0448\u0438\u0440\u0438\u043d\u044b \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 (\u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435)<\/li>\n<li>row_heights \u2014 \u0437\u0430\u0434\u0430\u0451\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0432\u044b\u0441\u043e\u0442 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 (\u0432 \u043e\u0434\u043d\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0435)<\/li>\n<\/ul>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u044d\u0442\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0447\u0438\u0441\u0435\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435\/\u0441\u0442\u043e\u043b\u0431\u0446\u0435. \u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0447\u0438\u0441\u0435\u043b \u0437\u0430\u0434\u0430\u044e\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0448\u0438\u0440\u0438\u043d \u0438\u043b\u0438 \u0432\u044b\u0441\u043e\u0442.<\/p>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0448\u0438\u0440\u0438\u043d. \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u043b\u0435\u0432\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u0432\u0434\u0432\u043e\u0435 \u0448\u0438\u0440\u0435 \u043f\u0440\u0430\u0432\u043e\u0433\u043e, \u0442.\u0435. \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 2:1.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = make_subplots(rows=1, cols=2, column_widths=[2, 1])  fig.update_yaxes(range=[-0.5, 1.5], zeroline=True, zerolinewidth=2, zerolinecolor='LightPink', col=2) fig.update_xaxes(range=[-0.5, 1.5], zeroline=True, zerolinewidth=2, zerolinecolor='#008000', col=2)  fig.add_trace(go.Scatter(x=x, y=h(x),  name='h(x)=sin(x)'), 1, 1) fig.add_trace(go.Scatter(x=x, y=k(x),  name='k(x)=cos(x)'), 1, 1) fig.add_trace(go.Scatter(visible='legendonly', x=x, y=m(x),  name='m(x)=tg(x)'), 1, 1)  fig.add_trace(go.Scatter(x=x, y=f(x), mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;'), 1, 2) fig.add_trace(go.Scatter(x=x, y=x, mode='markers',name='g(x)=x',                          marker=dict(color='LightSkyBlue', size=20, line=dict(color='MediumPurple', width=3))), 1, 2) fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   hovermode=&quot;x&quot;,                   margin=dict(l=0, r=0, t=0, b=0)) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/nh\/q4\/et\/nhq4eto15vatvcfqnyalmooczc8.png\"><\/p>\n<p>  \u0410 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u0437 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0435\u0441\u0442\u0430, \u0447\u0435\u043c \u0434\u0440\u0443\u0433\u0438\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 2 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u043b\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, 2 \u0441\u0442\u043e\u043b\u0431\u0446\u0430?<\/p>\n<p>  \u0412 matplotlib \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0431\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0438\u0433\u0443\u0440, \u043b\u0438\u0431\u043e \u043e\u0441\u0438 \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u043c\u0438, \u0437\u0434\u0435\u0441\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043e\u0441\u044f\u043c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c\u0441\u044f \u0432\u0434\u043e\u043b\u044c \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0438\u043b\u0438 \u0432\u0434\u043e\u043b\u044c \u0441\u0442\u0440\u043e\u043a.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043d\u0430 \u0444\u0438\u0433\u0443\u0440\u0443 (\u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0443\u044e).<\/p>\n<p>  \u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u2014 \u044d\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a (\u0435\u0441\u043b\u0438 \u0442\u043e\u0447\u043d\u0435\u0435, \u0442\u043e \u0434\u0430\u0436\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u0430 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u043e\u0432), \u043a\u0430\u0436\u0434\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u2014 \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043e\u0434\u043d\u0438 \u0438\u0437 \u043e\u0441\u0435\u0439.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043e\u0441\u0435\u0439 \u043d\u0435\u0442 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0438\u0445 \u043c\u0435\u0441\u0442\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u0432\u0448\u0438\u0435\u0441\u044f \u0441\u043e\u0441\u0435\u0434\u0438, \u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f None.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043c\u0430\u0442\u0440\u0438\u0446\u0443 2\u04452 \u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043c \u0432\u043c\u0435\u0441\u0442\u0435 \u043b\u0435\u0432\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u043f\u043e\u043b\u0443\u0447\u0438\u0432 \u043e\u0434\u043d\u0438 \u0432\u044b\u0441\u043e\u043a\u0438\u0435 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0441\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0433\u0440\u0430\u0444\u0438\u043a\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u00abrowspan\u00bb \u0440\u0430\u0432\u043d\u044b\u0439 2, \u0430 \u0435\u0433\u043e \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0430 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u043c (None):<\/p>\n<p>  <code>specs=[<br \/>   [{&quot;rowspan&quot;: 2}, {}],<br \/>   [None, {}]<br \/>  ]<\/code>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = make_subplots(rows=2, cols=2,                     specs=[[{&quot;rowspan&quot;: 2}, {}], [None, {}]])   fig.update_yaxes(range=[-0.5, 1.5], zeroline=True, zerolinewidth=2, zerolinecolor='LightPink', col=2) fig.update_xaxes(range=[-0.5, 1.5], zeroline=True, zerolinewidth=2, zerolinecolor='#008000', col=2)  fig.add_trace(go.Scatter(x=x, y=h(x),  name='h(x)=sin(x)'), 2, 2) fig.add_trace(go.Scatter(x=x, y=k(x),  name='k(x)=cos(x)'), 2, 2) fig.add_trace(go.Scatter(x=x, y=m(x),  name='m(x)=tg(x)'), 1, 1)  fig.add_trace(go.Scatter(x=x, y=f(x), mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;'), 1, 2) fig.add_trace(go.Scatter(x=x, y=x, mode='markers',name='g(x)=x',                          marker=dict(color='LightSkyBlue', size=20, line=dict(color='MediumPurple', width=3))), 1, 2) fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   hovermode=&quot;x&quot;,                   margin=dict(l=0, r=0, t=0, b=0)) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/9s\/kq\/yb\/9skqybxwinpqzp4mv3pypdek2-w.png\"><\/p>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u0432 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u0432\u043f\u0438\u0441\u0430\u043b\u0441\u044f \u0442\u0430\u043d\u0433\u0435\u043d\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043d\u044b\u043d\u0435 \u043d\u0435 \u043d\u0435\u0432\u0438\u0434\u0438\u043c.<\/p>\n<p>  \u0414\u043b\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f:<\/p>\n<ul>\n<li>rowspan \u2014 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438<\/li>\n<li>colspan \u2014 \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0449\u0438\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = make_subplots(rows=2, cols=2,                     specs=[[{&quot;colspan&quot;: 2}, None], [{}, {}]])   fig.update_yaxes(range=[-0.5, 1.5], zeroline=True, zerolinewidth=2, zerolinecolor='LightPink', col=2) fig.update_xaxes(range=[-0.5, 1.5], zeroline=True, zerolinewidth=2, zerolinecolor='#008000', col=2)  fig.add_trace(go.Scatter(x=x, y=h(x),  name='h(x)=sin(x)'), 2, 2) fig.add_trace(go.Scatter(x=x, y=k(x),  name='k(x)=cos(x)'), 2, 2) fig.add_trace(go.Scatter(x=x, y=m(x),  name='m(x)=tg(x)'), 1, 1)  fig.add_trace(go.Scatter(x=x, y=f(x), mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;'), 2, 1) fig.add_trace(go.Scatter(x=x, y=x, mode='markers',name='g(x)=x',                          marker=dict(color='LightSkyBlue', size=20, line=dict(color='MediumPurple', width=3))), 2, 1) fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   hovermode=&quot;x&quot;,                   margin=dict(l=0, r=0, t=0, b=0)) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/il\/rw\/es\/ilrweskgueear8dguiaxwlg5fto.png\"><\/p>\n<p>  <i><a href=\"https:\/\/plotly.com\/python\/subplots\/\" rel=\"nofollow\">\u0411\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f make_subplots<\/a><\/i><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0443\u0437\u043a\u0438\u043c \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438.<\/p>\n<p>  \u0412\u044b\u0441\u043e\u0442\u0443 \u043b\u0435\u0433\u043a\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0432 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 height \u0443 \u043c\u0435\u0442\u043e\u0434\u0430 update_layout.<\/p>\n<p>  \u0420\u0430\u0437\u043c\u0435\u0440\u044b \u0444\u0438\u0433\u0443\u0440\u044b \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f 2 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438:<\/p>\n<ul>\n<li>width \u2014 \u0448\u0438\u0440\u0438\u043d\u0430 (\u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445)<\/li>\n<li>height \u2014 \u0432\u044b\u0441\u043e\u0442\u0430 (\u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445)<\/li>\n<\/ul>\n<p>  <i>\u041d\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0435 \u0444\u0438\u0433\u0443\u0440\u044b plotly \u043a\u0443\u0434\u0430-\u0442\u043e (\u0430 \u044d\u0442\u043e \u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u0434\u0435\u043b\u0430\u0435\u0442\u0435 \u0434\u0430\u0448\u0431\u043e\u0440\u0434, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440), \u0442\u043e \u0444\u0438\u0433\u0443\u0440\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0441\u0451 \u043e\u0442\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u043e \u0448\u0438\u0440\u0438\u043d\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0448\u0438\u0440\u0438\u043d\u0443 \u0432 plotly \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u043b\u0443\u0447\u0448\u0435\u0439 \u0438\u0434\u0435\u0435\u0439. \u041b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0438\u043b\u0438 \u0432 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0435.<\/i><\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = make_subplots(rows=2, cols=2,                     specs=[[{&quot;colspan&quot;: 2}, None], [{}, {}]])   fig.update_yaxes(range=[-0.5, 1.5], zeroline=True, zerolinewidth=2, zerolinecolor='LightPink', col=2) fig.update_xaxes(range=[-0.5, 1.5], zeroline=True, zerolinewidth=2, zerolinecolor='#008000', col=2)  fig.add_trace(go.Scatter(x=x, y=h(x),  name='h(x)=sin(x)'), 2, 2) fig.add_trace(go.Scatter(x=x, y=k(x),  name='k(x)=cos(x)'), 2, 2) fig.add_trace(go.Scatter(x=x, y=m(x),  name='m(x)=tg(x)'), 1, 1)  fig.add_trace(go.Scatter(x=x, y=f(x), mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;'), 2, 1) fig.add_trace(go.Scatter(x=x, y=x, mode='markers',name='g(x)=x',                          marker=dict(color='LightSkyBlue', size=20, line=dict(color='MediumPurple', width=3))), 2, 1) fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   hovermode=&quot;x&quot;,                   margin=dict(l=0, r=0, t=0, b=0),                   height=1000,                   width=600) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/dg\/dp\/om\/dgdpomvyiklv15shedqqpwczhpg.png\"><\/p>\n<h3>\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438<\/h3>\n<p>  <\/p>\n<h4>\u0422\u0435\u043f\u043b\u043e\u0432\u0430\u044f \u043a\u0430\u0440\u0442\u0430<\/h4>\n<p>  \u0412\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a 1 \u0433\u0440\u0430\u0444\u0438\u043a\u0443, \u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u0443\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u043d\u0451\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0446\u0432\u0435\u0442\u043e\u0432\u0443\u044e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443 (\u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u0442\u0435\u043f\u043b\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u2014 \u0447\u0435\u043c \u0432\u044b\u0448\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u043a\u043e\u0439 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b, \u0442\u0435\u043c \u00ab\u0442\u0435\u043f\u043b\u0435\u0435\u00bb \u0446\u0432\u0435\u0442).<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 go.Scatter \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0443\u0436\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 marker (\u043d\u0430\u043f\u043e\u043c\u043d\u0438\u043c, \u043e\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c). \u041f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u044c:<\/p>\n<ul>\n<li>color \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0446\u0432\u0435\u0442\u0430. \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438 \u0442\u043e\u0447\u0435\u043a.<\/li>\n<li>colorbar \u2014 \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0438\u043d\u0434\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u043f\u043e\u043b\u043e\u0441\u0443 \u0446\u0432\u0435\u0442\u043e\u0432 \u0441\u043f\u0440\u0430\u0432\u0430 \u043e\u0442 \u0433\u0440\u0430\u0444\u0438\u043a\u0430. \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0441\u043b\u043e\u0432\u0430\u0440\u044c. \u041d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043f\u043e\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e 1 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u2014 title \u2014 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043f\u043e\u043b\u043e\u0441\u044b.<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Scatter(x=x, y=f(x), mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;',                           marker=dict(color=h(x), colorbar=dict(title=&quot;h(x)=sin(x)&quot;))                         )) fig.add_trace(go.Scatter(visible='legendonly', x=x, y=h(x),  name='h(x)=sin(x)')) fig.add_trace(go.Scatter(visible='legendonly', x=x, y=k(x),  name='k(x)=cos(x)'))  fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   margin=dict(l=0, r=0, t=0, b=0)) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/vg\/uy\/tm\/vguytm5ebudojxsxcmahdixt3xu.png\"><\/p>\n<p>  \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0446\u0432\u0435\u0442\u043e\u0432\u0430\u044f \u0448\u043a\u0430\u043b\u0430 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0442\u0435\u043f\u043b\u043e\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0443.<\/p>\n<p>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0446\u0432\u0435\u0442\u0430 \u043d\u0430 \u0448\u043a\u0430\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0443\u0436\u0438\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 colorscale, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0438\u043c\u044f \u043f\u0430\u043b\u0438\u0442\u0440\u044b.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Scatter(x=x, y=f(x), mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;',                           marker=dict(color=h(x), colorbar=dict(title=&quot;h(x)=sin(x)&quot;), colorscale='Inferno')                         )) fig.add_trace(go.Scatter(visible='legendonly', x=x, y=h(x),  name='h(x)=sin(x)')) fig.add_trace(go.Scatter(visible='legendonly', x=x, y=k(x),  name='k(x)=cos(x)'))  fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   margin=dict(l=0, r=0, t=0, b=0)) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_q\/gp\/yr\/_qgpyre64gd38ovlhfym-rhhzya.png\"><\/p>\n<p>  \u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438? \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u043e\u0436\u043d\u043e, \u043d\u043e \u0442\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u0414\u043b\u044f \u0435\u0449\u0451 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u0430\u0440\u043a\u0435\u0440\u043e\u0432.<\/p>\n<p>  <b>\u0412\u0430\u0436\u043d\u043e<\/b>. \u0420\u0430\u0437\u043c\u0435\u0440 \u2014 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445, \u0442.\u0435. \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430 \u043d\u0435 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f (\u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0446\u0432\u0435\u0442\u0430), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>  \u0442\u0430\u043a \u0436\u0435, \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b \u043c\u0435\u043d\u044c\u0448\u0435 2 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043b\u043e\u0445\u043e \u0432\u0438\u0434\u043d\u044b \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044c.<\/p>\n<p>  \u0420\u0430\u0437\u043c\u0435\u0440\u044b \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u043c size \u0442\u043e\u0433\u043e \u0436\u0435 \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u0432\u043d\u0443\u0442\u0440\u0438 marker. \u042d\u0442\u043e\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 1 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u0447\u0438\u0441\u043b\u043e), \u043b\u0438\u0431\u043e \u0441\u043f\u0438\u0441\u043e\u043a (\u0447\u0438\u0441\u0435\u043b).<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Scatter(x=x, y=f(x), mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;',                           marker=dict(color=h(x), colorbar=dict(title=&quot;h(x)=sin(x)&quot;), colorscale='Inferno',                                      size=50*abs(h(x)))                         )) fig.add_trace(go.Scatter(visible='legendonly', x=x, y=h(x),  name='h(x)=sin(x)')) fig.add_trace(go.Scatter(visible='legendonly', x=x, y=abs(h(x)),  name='h_mod(x)=|sin(x)|')) fig.add_trace(go.Scatter(visible='legendonly', x=x, y=k(x),  name='k(x)=cos(x)'))  fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   margin=dict(l=0, r=0, t=0, b=0)) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/p4\/ot\/t2\/p4ott2nmw76ug1pkpenlhmsftvw.png\"><\/p>\n<h3>\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f<\/h3>\n<p>  \u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0435\u0449\u0451 \u0443\u043f\u043b\u043e\u0442\u043d\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435? \u0414\u0430, \u043c\u043e\u0436\u043d\u043e, \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u00ab\u0447\u0435\u0442\u0432\u0451\u0440\u0442\u043e\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435\u00bb \u2014 \u0432\u0440\u0435\u043c\u044f. \u042d\u0442\u043e \u0442\u0430\u043a \u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0438 \u0441\u0430\u043c\u043e \u043f\u043e \u0441\u0435\u0431\u0435 \u0434\u043b\u044f \u043e\u0436\u0438\u0432\u043b\u0435\u043d\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430.<\/p>\n<p>  \u0412\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043d\u0430 \u043f\u0430\u0440\u0443 \u0448\u0430\u0433\u043e\u0432 \u043d\u0430\u0437\u0430\u0434. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u0431\u043e\u043b\u044b. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f:<\/p>\n<ol>\n<li>\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435<\/li>\n<li>\u041a\u043d\u043e\u043f\u043a\u0438 (\u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c\u0441\u044f \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443, \u0435\u0451 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0449\u0443\u044e, \u0430 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0448\u043a\u0430\u043b\u0435)<\/li>\n<li>\u0424\u0440\u0435\u0439\u043c\u044b (\u0438\u043b\u0438 \u043a\u0430\u0434\u0440\u044b) \u2014 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f<\/li>\n<\/ol>\n<p>  <b>1. \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435<\/b><\/p>\n<p>  \u042d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0434\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430.<\/p>\n<p>  <i>\u0423\u0431\u0435\u0440\u0451\u043c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0451 \u043b\u0438\u0448\u043d\u0435\u0435 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0448\u0430\u0433\u043e\u0432<\/i><\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0428\u0430\u0433 1 &#8212; \u043a\u043e\u0434 \u043f\u043e\u043b\u0443\u0444\u0430\u0431\u0440\u0438\u043a\u0430\u0442<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Scatter(x=[x[0]], y=[f(x)[0]], mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;'))  fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   margin=dict(l=0, r=0, t=0, b=0)) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <b>2. \u041a\u043d\u043e\u043f\u043a\u0430<\/b><\/p>\n<p>  \u041a\u043e\u0434 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"python\">&quot;updatemenus&quot;: [{&quot;type&quot;: &quot;buttons&quot;,                  &quot;buttons&quot;: [{&quot;label&quot;: &quot;Your Label&quot;,                               &quot;method&quot;: &quot;animate&quot;,                               &quot;args&quot;: [See Below]}]}]<\/code><\/pre>\n<p>  updatemenus \u2014 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043b\u043e\u044f, \u0442.\u0435. layout \u0444\u0438\u0433\u0443\u0440\u044b, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043d\u043e\u043f\u043a\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 update_layout.<\/p>\n<p>  \u041f\u043e\u043a\u0430 \u043e\u043d\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0442.\u043a. \u0443 \u043d\u0430\u0441 \u043d\u0435\u0447\u0435\u0433\u043e \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0428\u0430\u0433 2 &#8212; \u043a\u043e\u0434 \u0432\u0441\u0451 \u0435\u0449\u0451 \u043f\u043e\u043b\u0443\u0444\u0430\u0431\u0440\u0438\u043a\u0430\u0442<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Scatter(x=[x[0]], y=[f(x)[0]], mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;'))  fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   updatemenus=[dict(type=&quot;buttons&quot;, buttons=[dict(label=&quot;Play&quot;, method=&quot;animate&quot;, args=[None])])],                   margin=dict(l=0, r=0, t=0, b=0)) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <b>3. \u0424\u0440\u0435\u0439\u043c\u044b<\/b><\/p>\n<p>  \u042d\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u00ab\u043a\u0430\u0434\u0440\u043e\u0432\u00bb \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u043d\u0430\u0448\u0430 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f.<\/p>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u0444\u0440\u0435\u0439\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0431\u044f \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u0439 \u0444\u0438\u0433\u0443\u0440\u0435, \u043a\u0430\u043a \u0432 \u0434\u0435\u043a\u043e\u0440\u0430\u0446\u0438\u044f\u0445.<\/p>\n<p>  \u0424\u0440\u0435\u0439\u043c \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e go.Frame()<\/p>\n<p>  \u0413\u0440\u0430\u0444\u0438\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u044c \u0444\u0440\u0435\u0439\u043c\u0430 \u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 data.<\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 (\u043e\u0442 1 \u0442\u043e\u0447\u043a\u0438 \u0434\u043e \u0446\u0435\u043b\u043e\u0439 \u0444\u0438\u0433\u0443\u0440\u044b), \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0439\u0442\u0438 \u0432 \u0446\u0438\u043a\u043b\u0435:<\/p>\n<pre><code class=\"python\">frames=[] for i in range(1, len(x)):     frames.append(go.Frame(data=[go.Scatter(x=x[:i], y=f(x[:i]))]))<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 \u0444\u0438\u0433\u0443\u0440\u0443. \u0423 \u043a\u0430\u0436\u0434\u043e\u0439 \u0444\u0438\u0433\u0443\u0440\u044b \u0435\u0441\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 frames, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c:<\/p>\n<pre><code class=\"python\">fig.frames = frames<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0428\u0430\u0433 3 &#8212; \u0401\u043b\u043e\u0447\u043a\u0430 \u0433\u043e\u0440\u0438, \u0432 \u0441\u043c\u044b\u0441\u043b\u0435 \u043a\u043e\u0434, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0449\u0438\u0439 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Scatter(x=[x[0]], y=[f(x)[0]], mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;'))  frames=[] for i in range(1, len(x)):     frames.append(go.Frame(data=[go.Scatter(x=x[:i+1], y=f(x[:i+1]))]))  fig.frames = frames     fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   updatemenus=[dict(type=&quot;buttons&quot;, buttons=[dict(label=&quot;Play&quot;, method=&quot;animate&quot;, args=[None])])],                   margin=dict(l=0, r=0, t=0, b=0)) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/32\/ug\/jt\/32ugjt3edznlewn1dum2hqormg4.gif\"><\/p>\n<p>  \u0414\u0440\u0443\u0433\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0437\u0430\u0434\u0430\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0441\u043b\u043e\u0439 (\u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438) \u0438 \u0444\u0440\u0435\u0439\u043c\u044b \u2014 \u0441\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432\u0441\u0451 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442 go.Figure:<\/p>\n<ul>\n<li>data \u2014 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0434\u043b\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0441 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c<\/li>\n<li>layout \u2014 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u00ab\u0434\u0435\u043a\u043e\u0440\u0430\u0446\u0438\u0439\u00bb \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0438<\/li>\n<li>frames \u2014 \u0444\u0440\u0435\u0439\u043c\u044b (\u043a\u0430\u0434\u0440\u044b) \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">frames=[] for i in range(1, len(x)):     frames.append(go.Frame(data=[go.Scatter(x=x[:i+1], y=f(x[:i+1]))]))           fig = go.Figure(data=go.Scatter(x=[x[0]], y=[f(x[0])], mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;'),                 frames=frames,                 layout=dict(legend_orientation=&quot;h&quot;,                             legend=dict(x=.5, xanchor=&quot;center&quot;),                             updatemenus=[dict(type=&quot;buttons&quot;, buttons=[dict(label=&quot;Play&quot;, method=&quot;animate&quot;, args=[None])])],                             margin=dict(l=0, r=0, t=0, b=0)))  fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0435\u0441\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 (\u043a\u0430\u043a \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439, \u0442\u0430\u043a \u0438 \u0442\u0435, \u0447\u0442\u043e \u0432\u043e \u0444\u0440\u0435\u0439\u043c\u0430\u0445) \u043c\u0430\u0440\u043a\u0435\u0440\u044b \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0446\u0432\u0435\u0442\u0430, \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u0448\u043a\u0430\u043b\u044b \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0442\u043e \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Scatter(x=[x[0]], y=[f(x)[0]], mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;',                          marker=dict(color=h(x[0]), colorbar=dict(title=&quot;h(x)=sin(x)&quot;), colorscale='Inferno', size=50*abs(h(x[0])))                         ))  frames=[] for i in range(1, len(x)):     frames.append(go.Frame(data=[go.Scatter(x=x[:i+1], y=f(x[:i+1]), marker=dict(color=h(x[:i+1]), size=50*abs(h(x[:i+1]))))]))  fig.frames = frames     fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   updatemenus=[dict(type=&quot;buttons&quot;, buttons=[dict(label=&quot;Play&quot;, method=&quot;animate&quot;, args=[None])])],                   margin=dict(l=0, r=0, t=0, b=0)) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0417\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u043a\u043e\u0434 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0439 \u043a\u043d\u043e\u043f\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"python\">dict(label=&quot;Play&quot;, method=&quot;animate&quot;, args=[None])<\/code><\/pre>\n<p>  \u0438\u043b\u0438<\/p>\n<pre><code class=\"python\">dict(label=&quot;&quot;, method=&quot;animate&quot;, args=[None])<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0443 \u00ab\u043f\u0430\u0443\u0437\u0430\u00bb (\u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u043f\u0430\u0443\u0437\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043d\u0430\u0436\u0430\u0442 Play), \u043a\u043e\u0434 \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u0442\u0441\u044f:<\/p>\n<pre><code class=\"python\">dict(label=&quot;\u275a\u275a&quot;, method=&quot;animate&quot;, args=[[None], {&quot;frame&quot;: {&quot;duration&quot;: 0, &quot;redraw&quot;: False},                                                  &quot;mode&quot;: &quot;immediate&quot;,                                                  &quot;transition&quot;: {&quot;duration&quot;: 0}}])<\/code><\/pre>\n<p>  \u041f\u0440\u0430\u0432\u0434\u0430, \u0435\u0441\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c 2 \u0442\u0430\u043a\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438, \u0442\u043e \u0432\u044b \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u0435, \u0447\u0442\u043e \u043a\u043d\u043e\u043f\u043a\u0430 play, \u043d\u0430\u0436\u0430\u0442\u0430\u044f \u043f\u043e\u0441\u043b\u0435 \u043f\u0430\u0443\u0437\u044b, \u0432 \u0438\u0442\u043e\u0433\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441 \u043d\u0430\u0447\u0430\u043b\u0430. \u042d\u0442\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0439 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0451 1 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442:<\/p>\n<pre><code class=\"python\">dict(label=&quot;&quot;, method=&quot;animate&quot;, args=[None, {&quot;fromcurrent&quot;: True}])<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0438\u0437 2 \u043d\u0430\u0448\u0438\u0445 \u043a\u043d\u043e\u043f\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"python\">buttons=[dict(label=&quot;\u25ba&quot;, method=&quot;animate&quot;, args=[None, {&quot;fromcurrent&quot;: True}]),          dict(label=&quot;\u275a\u275a&quot;, method=&quot;animate&quot;, args=[[None], {&quot;frame&quot;: {&quot;duration&quot;: 0, &quot;redraw&quot;: False},                                                            &quot;mode&quot;: &quot;immediate&quot;,                                                            &quot;transition&quot;: {&quot;duration&quot;: 0}}])])]<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434 \u0441 2 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438: \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Scatter(x=[x[0]], y=[f(x)[0]], mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;',                          marker=dict(color=h(x[0]), colorbar=dict(title=&quot;h(x)=sin(x)&quot;), colorscale='Inferno', size=50*abs(h(x[0])))                         ))  frames=[] for i in range(1, len(x)):     frames.append(go.Frame(data=[go.Scatter(x=x[:i+1], y=f(x[:i+1]), marker=dict(color=h(x[:i+1]), size=50*abs(h(x[:i+1]))))]))  fig.frames = frames     fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   updatemenus=[dict(type=&quot;buttons&quot;, buttons=[dict(label=&quot;\u25ba&quot;, method=&quot;animate&quot;, args=[None, {&quot;fromcurrent&quot;: True}]),                                                              dict(label=&quot;\u275a\u275a&quot;, method=&quot;animate&quot;, args=[[None], {&quot;frame&quot;: {&quot;duration&quot;: 0, &quot;redraw&quot;: False},                                                                                                                &quot;mode&quot;: &quot;immediate&quot;,                                                                                                                &quot;transition&quot;: {&quot;duration&quot;: 0}}])])],                   margin=dict(l=0, r=0, t=0, b=0)) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0418\u043d\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c\u0435 \u043c\u0435\u0441\u0442\u043e. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441 \u044d\u0442\u0438\u043c \u043f\u043e\u043c\u043e\u0433\u0443\u0442:<\/p>\n<ul>\n<li>direction \u2014 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a\u043d\u043e\u043f\u043e\u043a (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u0432\u0435\u0440\u0445\u0443-\u0432\u043d\u0438\u0437, \u043d\u043e \u0435\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u00ableft\u00bb, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0432\u0430-\u043d\u0430\u043f\u0440\u0430\u0432\u043e)<\/li>\n<li>x, y \u2014 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (\u0432 \u0434\u043e\u043b\u044f\u0445 \u043e\u0442 \u0444\u0438\u0433\u0443\u0440\u044b)<\/li>\n<li>xanchor, yanchor \u2014 \u043a\u0430\u043a \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0438. \u0423 \u043d\u0430\u0441 \u0431\u044b\u043b\u0430 \u0440\u0430\u043d\u044c\u0448\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u043b\u0435\u0433\u0435\u043d\u0434, \u0442\u0443\u0442 \u0442\u0430 \u0436\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u044f. \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u043c \u0432\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u043f\u043e \u0446\u0435\u043d\u0442\u0440\u0443, \u0442\u043e x=0.5 \u0438 xanchor=\u00abcenter\u00bb \u043f\u043e\u043c\u043e\u0433\u0443\u0442.<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434 \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u0432\u043d\u0438\u0437\u0443<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Scatter(x=[x[0]], y=[f(x)[0]], mode='lines+markers',  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;',                          marker=dict(color=h(x[0]), colorbar=dict(title=&quot;h(x)=sin(x)&quot;), colorscale='Inferno', size=50*abs(h(x[0])))                         ))  frames=[] for i in range(1, len(x)):     frames.append(go.Frame(data=[go.Scatter(x=x[:i+1], y=f(x[:i+1]), marker=dict(color=h(x[:i+1]), size=50*abs(h(x[:i+1]))))]))  fig.frames = frames     fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   updatemenus=[dict(direction=&quot;left&quot;, x=0.5, xanchor=&quot;center&quot;, y=0,                                     type=&quot;buttons&quot;, buttons=[dict(label=&quot;\u25ba&quot;, method=&quot;animate&quot;, args=[None, {&quot;fromcurrent&quot;: True}]),                                                              dict(label=&quot;\u275a\u275a&quot;, method=&quot;animate&quot;, args=[[None], {&quot;frame&quot;: {&quot;duration&quot;: 0, &quot;redraw&quot;: False},                                                                                                                &quot;mode&quot;: &quot;immediate&quot;,                                                                                                                &quot;transition&quot;: {&quot;duration&quot;: 0}}])])],                   margin=dict(l=0, r=0, t=0, b=0)) fig.update_traces(hoverinfo=&quot;all&quot;, hovertemplate=&quot;\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442: %{x}&lt;br&gt;\u0424\u0443\u043d\u043a\u0446\u0438\u044f: %{y}&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <\/p>\n<h3>\u0421\u043b\u0430\u0439\u0434\u0435\u0440<\/h3>\n<p>  \u0421\u043b\u0430\u0439\u0434\u0435\u0440 \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e, \u043d\u043e \u0435\u0441\u0442\u044c \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435.<\/p>\n<p>  \u0421\u043b\u0430\u0439\u0434\u0435\u0440 \u2014 \u044d\u0442\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438, \u043f\u043e\u043b\u043e\u0441\u043a\u0430 \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043a\u043e\u043b\u044c\u0437\u0438\u0442 \u043f\u043e\u043b\u0437\u0443\u043d\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u043d\u0430 \u0444\u0438\u0433\u0443\u0440\u0435.<\/p>\n<p>  \u0422.\u0435. \u0435\u0441\u043b\u0438 \u0444\u0440\u0435\u0439\u043c\u044b \u0432 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0437\u0430 \u0434\u0440\u0443\u0433\u0438\u043c, \u0442\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u0430 \u0432\u0441\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0435\u0441\u0442\u044c. \u041d\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u0430. \u0418 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u0437\u0443\u043d\u043a\u0430 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u043c, \u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c (\u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043e\u0441\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e).<\/p>\n<p>  <b>1. \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432.<\/b> \u0412\u0430\u0436\u043d\u043e, \u0447\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 1\u0439) \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u044b\u043c.<\/p>\n<p>  \u0414\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438\/\u043d\u0435\u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 visible:<\/p>\n<ul>\n<li>\u0412\u0438\u0434\u0438\u043c\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u2014 <code>go.Scatter(visible=True, x=[x[0]], y=[f(x)[0]], mode='lines+markers', name='f(x)=x<sup>2<\/sup>')<\/code><\/li>\n<li>\u041d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u2014 <code>go.Scatter(visible=False, x=[x[0]], y=[f(x)[0]], mode='lines+markers', name='f(x)=x<sup>2<\/sup>')<\/code><\/li>\n<\/ul>\n<p>  <b>\u0412\u0441\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0440\u0438\u0441\u0443\u0435\u043c \u043d\u0430 \u0444\u0438\u0433\u0443\u0440\u0435<\/b> \u2014 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 data \u0444\u0438\u0433\u0443\u0440\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0438\u0445 \u0432\u0441\u0435 \u0441\u043f\u0438\u0441\u043a\u043e\u043c:<\/p>\n<p>  <code>fig = go.Figure(data=trace_list)<\/code><\/p>\n<p>  <b>2. \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u00ab\u0448\u0430\u0433\u043e\u0432\u00bb \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u0430.<\/b><\/p>\n<p>  \u0428\u0430\u0433 \u0438\u043c\u0435\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441. \u041f\u043e \u0441\u0443\u0442\u0438 \u043e\u043d \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 (\u043a\u0430\u043a\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0432\u0438\u0434\u0438\u043c\u044b, \u043a\u0430\u043a\u0438\u0435 \u043d\u0435\u0442) \u0438 \u043c\u0435\u0442\u043e\u0434 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043a \u043d\u0435\u043c\u0443.<\/p>\n<p>  \u0428\u0430\u0433 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <b>\u0432\u0441\u0435\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432<\/b>.<\/p>\n<p>  \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 1 \u0448\u0430\u0433\u0430:<\/p>\n<p>  <code>dict(<br \/>   method = 'restyle',<br \/>   args = #\u0421\u041f\u0418\u0421\u041e\u041a \u0421\u041e\u0421\u0422\u041e\u042f\u041d\u0418\u0419 \u0412\u0421\u0415\u0425 \u0413\u0420\u0410\u0424\u0418\u041a\u041e\u0412<br \/>   )<\/code><\/p>\n<p>  \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438\/\u043d\u0435\u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u0430\u0440\u043e\u0439 &#8216;visible&#8217; \u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 (\u043a\u0430\u043a\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 &#8216;visible&#8217;, \u0430 \u043a\u0430\u043a\u0438\u0435 \u043d\u0435\u0442). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u041a\u0410\u0416\u0414\u041e\u0413\u041e \u0448\u0430\u0433\u0430 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a False, \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0443\u0436\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 True, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a.<\/p>\n<p>  \u0428\u0430\u0433\u0438 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432 \u0441\u043f\u0438\u0441\u043e\u043a (\u0442.\u0435. \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u0439).<\/p>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446 \u0432\u0441\u0435 \u0448\u0430\u0433\u0438 \u043d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0444\u0438\u0433\u0443\u0440\u0443:<\/p>\n<p>  <code>fig.layout.sliders = sliders<\/code><\/p>\n<p>  \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043a\u043e\u0434 (\u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u0443\u0447\u0438\u0442\u0435 \u0435\u0433\u043e, \u0442.\u043a. \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u043d\u043a\u0438\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432):<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">num_steps = len(x) trace_list = [go.Scatter(visible=True, x=[x[0]], y=[f(x)[0]], mode='lines+markers', name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;')]  for i in range(1, len(x)):     trace_list.append(go.Scatter(visible=False, x=x[:i+1], y=f(x[:i+1]), mode='lines+markers', name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;'))  fig = go.Figure(data=trace_list)  steps = [] for i in range(num_steps):     # Hide all traces     step = dict(         method = 'restyle',           args = ['visible', [False] * len(fig.data)],     )     # Enable trace we want to see     step['args'][1][i] = True          # Add step to step list     steps.append(step)  sliders = [dict(     steps = steps, )]  fig.layout.sliders = sliders  fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/xv\/x2\/_3\/xvx2_3zrouwmtwaiwdire13jw8m.png\"><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435 1 \u0433\u0440\u0430\u0444\u0438\u043a, \u0430 2, \u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u0445 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0430\u0440\u043e\u0439 \u0432\u0435\u0437\u0434\u0435:<\/p>\n<ul>\n<li>\u0432 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435<\/li>\n<li>\u0432\u0441\u0435 \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 (\u0441\u043a\u0440\u044b\u0442\u044b\u0435)<\/li>\n<li>\u043f\u0430\u0440\u0430\u043c\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0448\u0430\u0433\u043e\u0432<\/li>\n<li>\u043f\u0430\u0440\u0430\u043c\u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u043d\u0430 \u0448\u0430\u0433\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438<\/li>\n<\/ul>\n<p>  \u041f\u043e\u043c\u0435\u043d\u044f\u0435\u043c \u0438\u0437\u0443\u0447\u0430\u0435\u043c\u0443\u044e \u0444\u0438\u0433\u0443\u0440\u0443 \u043d\u0430 \u0441\u0438\u043d\u0443\u0441 \u0438 \u043a\u043e\u0441\u0438\u043d\u0443\u0441 (\u0447\u0442\u043e\u0431\u044b \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0442\u0435\u043c \u043a\u0430\u043a \u043e\u043d\u0438 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442\u0441\u044f):<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">num_steps = len(x) trace_list = [go.Scatter(visible=True, x=[x[0]], y=[h(x)[0]], mode='lines+markers', name='h(x)=sin(x)'),               go.Scatter(visible=True, x=[x[0]], y=[k(x)[0]], mode='lines+markers', name='k(x)=cos(x)')]  # \u0422\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0440\u0430\u043d\u044c\u0448\u0435: #fig.add_trace(go.Scatter(x=x, y=h(x),  name='h(x)=sin(x)'), 1, 1) #fig.add_trace(go.Scatter(x=x, y=k(x),  name='k(x)=cos(x)'), 1, 1)  for i in range(1, len(x)):     trace_list.append(go.Scatter(visible=False, x=x[:i+1], y=h(x[:i+1]), mode='lines+markers', name='h(x)=sin(x)'))     trace_list.append(go.Scatter(visible=False, x=x[:i+1], y=k(x[:i+1]), mode='lines+markers', name='k(x)=cos(x)'))  fig = go.Figure(data=trace_list)  steps = [] for i in range(num_steps):     step = dict(         method = 'restyle',           args = ['visible', [False] * len(fig.data)],     )     step['args'][1][2*i] = True     step['args'][1][2*i+1] = True     steps.append(step)  sliders = [dict(     steps = steps, )]  fig.layout.sliders = sliders  fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/yz\/li\/ef\/yzliefesx1cieje524vgqy2yljw.png\"><\/p>\n<p>  \u041f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043d\u043e\u043f\u043a\u0438 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438. \u041e\u043d\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0434\u0435\u043b\u0430\u0442\u044c, \u0442.\u043a. \u043c\u044b \u0435\u0449\u0451 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438. \u041f\u0440\u043e\u0441\u0442\u043e \u00ab\u043f\u0440\u0438\u0446\u0435\u043b\u0438\u043c\u0441\u044f\u00bb.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434 \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u0430 \u0441 \u043d\u0435\u0440\u0430\u0431\u043e\u0447\u0438\u043c\u0438 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">num_steps = len(x) trace_list = [go.Scatter(visible=True, x=[x[0]], y=[h(x)[0]], mode='lines+markers', name='h(x)=sin(x)'),               go.Scatter(visible=True, x=[x[0]], y=[k(x)[0]], mode='lines+markers', name='k(x)=cos(x)')]  for i in range(1, len(x)):     trace_list.append(go.Scatter(visible=False, x=x[:i+1], y=h(x[:i+1]), mode='lines+markers', name='h(x)=sin(x)'))     trace_list.append(go.Scatter(visible=False, x=x[:i+1], y=k(x[:i+1]), mode='lines+markers', name='k(x)=cos(x)'))  fig = go.Figure(data=trace_list)  steps = [] for i in range(num_steps):     step = dict(         method = 'restyle',           args = ['visible', [False] * len(fig.data)],     )     step['args'][1][2*i] = True     step['args'][1][2*i+1] = True     steps.append(step)  sliders = [dict(     steps = steps, )]  fig.update_layout(updatemenus=[dict(direction=&quot;left&quot;, x=0.5, xanchor=&quot;center&quot;, y=0,                                     type=&quot;buttons&quot;, buttons=[dict(label=&quot;\u25ba&quot;, method=&quot;animate&quot;, args=[None, {&quot;fromcurrent&quot;: True}]),                                                              dict(label=&quot;\u275a\u275a&quot;, method=&quot;animate&quot;, args=[[None], {&quot;frame&quot;: {&quot;duration&quot;: 0, &quot;redraw&quot;: False},                                                                                                                &quot;mode&quot;: &quot;immediate&quot;,                                                                                                                &quot;transition&quot;: {&quot;duration&quot;: 0}}])])],                   )   fig.layout.sliders = sliders  fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u044b \u0441 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439 \u0442\u0430\u043a, \u043a\u0430\u043a \u043c\u044b \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u0442\u043e \u043a\u043d\u043e\u043f\u043a\u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442. \u041d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 1 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u0430.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434 \u0438\u0441\u043a\u0430\u043b\u0435\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">num_steps = len(x) trace_list = [go.Scatter(visible=True, x=[x[0]], y=[h(x)[0]], mode='lines+markers', name='h(x)=sin(x)'),               go.Scatter(visible=True, x=[x[0]], y=[k(x)[0]], mode='lines+markers', name='k(x)=cos(x)')]  for i in range(1, len(x)):     trace_list.append(go.Scatter(visible=False, x=x[:i+1], y=h(x[:i+1]), mode='lines+markers', name='h(x)=sin(x)'))     trace_list.append(go.Scatter(visible=False, x=x[:i+1], y=k(x[:i+1]), mode='lines+markers', name='k(x)=cos(x)'))  frames=[] for i in range(1, len(x)):     frames.append(go.Frame(data=[go.Scatter(visible=True, x=x[:i+1], y=h(x[:i+1]), mode='lines+markers', name='h(x)=sin(x)'),                                  go.Scatter(visible=True, x=x[:i+1], y=k(x[:i+1]), mode='lines+markers', name='k(x)=cos(x)')]))   fig = go.Figure(data=trace_list)  steps = [] for i in range(num_steps):     step = dict(         method = 'restyle',           args = ['visible', [False] * len(fig.data)],     )     step['args'][1][2*i] = True     step['args'][1][2*i+1] = True     steps.append(step)  sliders = [dict(     steps = steps, )]  fig.update_layout(updatemenus=[dict(direction=&quot;left&quot;, x=0.5, xanchor=&quot;center&quot;, y=0,                                     type=&quot;buttons&quot;, buttons=[dict(label=&quot;\u25ba&quot;, method=&quot;animate&quot;, args=[None, {&quot;fromcurrent&quot;: True}]),                                                              dict(label=&quot;\u275a\u275a&quot;, method=&quot;animate&quot;, args=[[None], {&quot;frame&quot;: {&quot;duration&quot;: 0, &quot;redraw&quot;: False},                                                                                                                &quot;mode&quot;: &quot;immediate&quot;,                                                                                                                &quot;transition&quot;: {&quot;duration&quot;: 0}}])])],                   )   fig.layout.sliders = sliders fig.frames = frames    fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041e\u041a, \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u00ab\u0444\u0438\u043d\u0442 \u0443\u0448\u0430\u043c\u0438\u00bb \u0438 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432, \u0430 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0441\u043b\u0430\u0439\u0434\u0435\u0440 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a \u0444\u0440\u0435\u0439\u043c\u0430\u043c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 (\u041f\u043e\u0447\u0435\u043c\u0443 \u043c\u044b \u0442\u0430\u043a \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0441\u0440\u0430\u0437\u0443? \u0427\u0442\u043e\u0431\u044b \u0431\u044b\u043b \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431, \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u0430 \u0431\u0435\u0437 \u0438\u0437\u044b\u0441\u043a\u043e\u0432)<\/p>\n<ol>\n<li>\u0417\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u0451, \u0447\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f trace_list \u2014 \u0441\u043f\u0438\u0441\u043a\u0430 \u043d\u0430\u0448\u0438\u0445 \u00ab\u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0445\u00bb \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432.<\/li>\n<li>\u0412\u044b\u043d\u0435\u0441\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c 2 \u0432\u0438\u0434\u0438\u043c\u044b\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0432 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0438\u0433\u0443\u0440\u044b<\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 name \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0444\u0440\u0435\u0439\u043c\u0443<\/li>\n<li>\u041f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0435\u043c \u0448\u0430\u0431\u043b\u043e\u043d \u0448\u0430\u0433\u0430:\n<ul>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u043c label, \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0439 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0430<\/li>\n<li>\u0421\u043c\u0435\u043d\u0438\u043c \u043c\u0435\u0442\u043e\u0434 \u043d\u0430 \u00abanimate\u00bb<\/li>\n<li>\u0412\u0441\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u043d\u0430 1 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 1 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438, \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u0439 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u0444\u0440\u0435\u0439\u043c\u0430<\/li>\n<\/ul>\n<\/li>\n<li>\u0423\u0431\u0435\u0440\u0451\u043c \u00ab\u043f\u0440\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u00bb \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u044f\u0445 \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u0430, \u0442.\u043a. \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043b\u0430\u0439\u0434\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043a \u0444\u0440\u0435\u0439\u043c\u0430\u043c<\/li>\n<\/ol>\n<p>  <i>\u0427\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u044b, \u044f \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0443\u0431\u0438\u0440\u0430\u0435\u043c\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438<\/i><\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u0430 \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">num_steps = len(x) fig = go.Figure(data=[go.Scatter(x=[x[0]], y=[h(x)[0]], mode='lines+markers', name='h(x)=sin(x)'),                       go.Scatter(x=[x[0]], y=[k(x)[0]], mode='lines+markers', name='k(x)=cos(x)')]) ''' trace_list = [go.Scatter(visible=True, x=[x[0]], y=[h(x)[0]], mode='lines+markers', name='h(x)=sin(x)'),               go.Scatter(visible=True, x=[x[0]], y=[k(x)[0]], mode='lines+markers', name='k(x)=cos(x)')]  for i in range(1, len(x)):     trace_list.append(go.Scatter(visible=False, x=x[:i+1], y=h(x[:i+1]), mode='lines+markers', name='h(x)=sin(x)'))     trace_list.append(go.Scatter(visible=False, x=x[:i+1], y=k(x[:i+1]), mode='lines+markers', name='k(x)=cos(x)')) ''' frames=[] for i in range(0, len(x)):     frames.append(go.Frame(name=str(i),                            data=[go.Scatter(x=x[:i+1], y=h(x[:i+1]), mode='lines+markers', name='h(x)=sin(x)'),                                  go.Scatter(x=x[:i+1], y=k(x[:i+1]), mode='lines+markers', name='k(x)=cos(x)')]))   #fig = go.Figure(data=trace_list)  steps = [] for i in range(num_steps):     step = dict(         #method = 'restyle',           #args = ['visible', [False] * len(fig.data)],         label = str(i),         method = &quot;animate&quot;,         args = [[str(i)]]     )     #step['args'][1][2*i] = True     #step['args'][1][2*i+1] = True     steps.append(step)  sliders = [dict(     steps = steps, )]  fig.update_layout(updatemenus=[dict(direction=&quot;left&quot;, x=0.5, xanchor=&quot;center&quot;, y=0,                                     type=&quot;buttons&quot;, buttons=[dict(label=&quot;\u25ba&quot;, method=&quot;animate&quot;, args=[None, {&quot;fromcurrent&quot;: True}]),                                                              dict(label=&quot;\u275a\u275a&quot;, method=&quot;animate&quot;, args=[[None], {&quot;frame&quot;: {&quot;duration&quot;: 0, &quot;redraw&quot;: False},                                                                                                                &quot;mode&quot;: &quot;immediate&quot;,                                                                                                                &quot;transition&quot;: {&quot;duration&quot;: 0}}])])],                   )   fig.layout.sliders = sliders fig.frames = frames    fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043b\u0435\u0433\u043a\u0430 \u0440\u0430\u0437\u0434\u0440\u0430\u0436\u0430\u0435\u0442 \u2014 \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u00ab\u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u00bb, \u0442\u043e \u043f\u043e\u043b\u0437\u0443\u043d\u043e\u043a \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u0430 \u043d\u0435 \u043f\u043e\u043b\u0437\u0451\u0442.<\/p>\n<p>  \u042d\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 showactive \u0434\u043b\u044f \u043c\u0435\u043d\u044e. \u0422\u0430\u043a \u0436\u0435 \u0435\u0433\u043e \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u043d\u0438\u043c\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u00ab\u043d\u0430\u0436\u0430\u0442\u043e\u00bb \u0441 \u043a\u043d\u043e\u043f\u043e\u043a Play\/Pause.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434 \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0436\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">num_steps = len(x) fig = go.Figure(data=[go.Scatter(x=[x[0]], y=[h(x)[0]], mode='lines+markers', name='h(x)=sin(x)'),                       go.Scatter(x=[x[0]], y=[k(x)[0]], mode='lines+markers', name='k(x)=cos(x)')])  frames=[] for i in range(0, len(x)):     frames.append(go.Frame(name=str(i),                            data=[go.Scatter(x=x[:i+1], y=h(x[:i+1]), mode='lines+markers', name='h(x)=sin(x)'),                                  go.Scatter(x=x[:i+1], y=k(x[:i+1]), mode='lines+markers', name='k(x)=cos(x)')]))   steps = [] for i in range(num_steps):     step = dict(         label = str(i),         method = &quot;animate&quot;,         args = [[str(i)]]     )     steps.append(step)  sliders = [dict(     steps = steps, )]  fig.update_layout(updatemenus=[dict(direction=&quot;left&quot;,                                     x=0.5,                                     xanchor=&quot;center&quot;,                                     y=0,                                     showactive=False,                                     type=&quot;buttons&quot;,                                      buttons=[dict(label=&quot;\u25ba&quot;, method=&quot;animate&quot;, args=[None, {&quot;fromcurrent&quot;: True}]),                                              dict(label=&quot;\u275a\u275a&quot;, method=&quot;animate&quot;, args=[[None], {&quot;frame&quot;: {&quot;duration&quot;: 0, &quot;redraw&quot;: False},                                                                                                &quot;mode&quot;: &quot;immediate&quot;,                                                                                                &quot;transition&quot;: {&quot;duration&quot;: 0}}])])],                   )   fig.layout.sliders = sliders fig.frames = frames    fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0435\u043f\u043b\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u0430\u0440\u043a\u0435\u0440\u0430 \u0434\u043b\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438<\/p>\n<p>  \u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e colorbar \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0432\u0441\u0435\u0433\u043e 1 \u0440\u0430\u0437, \u043e\u0434\u043d\u0430\u043a\u043e, \u0432 \u043d\u0435\u0433\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u043d\u0435\u0441\u0442\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0430\u0432\u043a\u0438 \u2014 \u043c\u044b \u0441\u0434\u0432\u0438\u043d\u0443\u043b\u0438 \u0435\u0433\u043e \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438 \u0441\u043b\u0435\u0433\u043a\u0430 \u0432\u043d\u0438\u0437, \u0442.\u043a. \u0442\u0435\u043f\u0435\u0440\u044c \u0432 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043b\u0435\u0433\u0435\u043d\u0434\u0430.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">num_steps = len(x) fig = go.Figure(data=[go.Scatter(x=[x[0]], y=[h(x)[0]], mode='lines+markers', name='h(x)=sin(x)',                                  marker=dict(color=[f(x[0])], colorbar=dict(yanchor='top', y=0.8, title=&quot;f(x)=x&lt;sup&gt;2&lt;\/sup&gt;&quot;), colorscale='Inferno', size=[50*abs(h(x[0]))])),                       go.Scatter(x=[x[0]], y=[k(x)[0]], mode='lines+markers', name='k(x)=cos(x)',                                  marker=dict(color=[f(x[0])], colorscale='Inferno', size=[50*abs(k(x[0]))]))])  frames=[] for i in range(0, len(x)):     frames.append(go.Frame(name=str(i),                            data=[go.Scatter(x=x[:i+1], y=h(x[:i+1]), mode='lines+markers', name='h(x)=sin(x)',                                             marker=dict(color=f(x[:i+1]), colorscale='Inferno', size=50*abs(h(x[:i+1])))),                                  go.Scatter(x=x[:i+1], y=k(x[:i+1]), mode='lines+markers', name='k(x)=cos(x)',                                             marker=dict(color=f(x[:i+1]), colorscale='Inferno', size=50*abs(k(x[:i+1]))))]))   steps = [] for i in range(num_steps):     step = dict(         label = str(i),         method = &quot;animate&quot;,         args = [[str(i)]]     )     steps.append(step)  sliders = [dict(     steps = steps, )]  fig.update_layout(updatemenus=[dict(direction=&quot;left&quot;,                                     x=0.5,                                     xanchor=&quot;center&quot;,                                     y=0,                                     showactive=False,                                     type=&quot;buttons&quot;,                                      buttons=[dict(label=&quot;\u25ba&quot;, method=&quot;animate&quot;, args=[None, {&quot;fromcurrent&quot;: True}]),                                              dict(label=&quot;\u275a\u275a&quot;, method=&quot;animate&quot;, args=[[None], {&quot;frame&quot;: {&quot;duration&quot;: 0, &quot;redraw&quot;: False},                                                                                                &quot;mode&quot;: &quot;immediate&quot;,                                                                                                &quot;transition&quot;: {&quot;duration&quot;: 0}}])])],                   )   fig.layout.sliders = sliders fig.frames = frames    fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/gi\/gs\/ii\/gigsiii3ycrmbrqaqwg5-coezbe.png\"><\/p>\n<p>  \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u043b\u0430\u0433\u043e\u0440\u043e\u0434\u0438\u0442\u044c \u043f\u0430\u043d\u0435\u043b\u044c \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u0430.<\/p>\n<p>  <i>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043a \u0433\u0440\u0430\u0444\u0438\u043a\u0443 \u0438 \u043e\u0441\u044f\u043c, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043c \u0438 \u043e\u0444\u043e\u0440\u043c\u0438\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u0430 (\u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430\u0445 \u043e\u043d \u0441\u0442\u0430\u043b \u0431\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0448\u043a\u0430\u043b\u043e\u0439), \u0441\u043c\u0435\u0441\u0442\u0438\u043c \u043a\u043d\u043e\u043f\u043a\u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0432\u043b\u0435\u0432\u043e\u0439, \u0430 \u0441\u043b\u0430\u0439\u0434\u0435\u0440 \u0447\u0443\u0442\u044c \u0441\u043e\u0436\u043c\u0451\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c \u0438\u043c \u043c\u0435\u0441\u0442\u043e.<\/i><\/p>\n<ul>\n<li>\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442 currentvalue \u2014 \u0437\u0430\u0434\u0430\u0451\u0442 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u0448\u0430\u0433\u0443, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043f\u0440\u0435\u0444\u0438\u043a\u0441, \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u043b\u0430\u0439\u0434\u0435, \u0448\u0440\u0438\u0444\u0442<\/li>\n<li>\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b x, y, xanchor, yanchor, pad \u2014 \u0437\u0430\u0434\u0430\u044e\u0442 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043e\u0442\u0441\u0442\u0443\u043f\u044b \u0434\u043b\u044f \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u0430 \u0438 \u0438\u0445 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u0442\u0430\u043a\u043e\u0432\u043e\u043c\u0443 \u0443 \u043a\u043d\u043e\u043f\u043e\u043a<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">num_steps = len(x) fig = go.Figure(data=[go.Scatter(x=[x[0]], y=[h(x)[0]], mode='lines+markers', name='h(x)=sin(x)',                                  marker=dict(color=[f(x[0])], colorbar=dict(yanchor='top', y=0.8, title=&quot;f(x)=x&lt;sup&gt;2&lt;\/sup&gt;&quot;), colorscale='Inferno', size=[50*abs(h(x[0]))])),                       go.Scatter(x=[x[0]], y=[k(x)[0]], mode='lines+markers', name='k(x)=cos(x)',                                  marker=dict(color=[f(x[0])], colorscale='Inferno', size=[50*abs(k(x[0]))]))])  frames=[] for i in range(0, len(x)):     frames.append(go.Frame(name=str(i),                            data=[go.Scatter(x=x[:i+1], y=h(x[:i+1]), mode='lines+markers', name='h(x)=sin(x)',                                             marker=dict(color=f(x[:i+1]), colorscale='Inferno', size=50*abs(h(x[:i+1])))),                                  go.Scatter(x=x[:i+1], y=k(x[:i+1]), mode='lines+markers', name='k(x)=cos(x)',                                             marker=dict(color=f(x[:i+1]), colorscale='Inferno', size=50*abs(k(x[:i+1]))))]))   steps = [] for i in range(num_steps):     step = dict(         label = str(i),         method = &quot;animate&quot;,         args = [[str(i)]]     )     steps.append(step)  sliders = [dict(     currentvalue = {&quot;prefix&quot;: &quot;\u0428\u0430\u0433 \u2116&quot;, &quot;font&quot;: {&quot;size&quot;: 20}},     len = 0.9,     x = 0.1,     pad = {&quot;b&quot;: 10, &quot;t&quot;: 50},     steps = steps, )]  fig.update_layout(title=&quot;\u0421\u0442\u0440\u043e\u0438\u043c \u0441\u0438\u043d\u0443\u0441 \u0438 \u043a\u043e\u0441\u0438\u043d\u0443\u0441 \u043f\u043e \u0448\u0430\u0433\u0430\u043c&quot;,                   xaxis_title=&quot;\u041e\u0441\u044c X&quot;,                   yaxis_title=&quot;\u041e\u0441\u044c Y&quot;,                   updatemenus=[dict(direction=&quot;left&quot;,                                     pad = {&quot;r&quot;: 10, &quot;t&quot;: 80},                                     x = 0.1,                                     xanchor = &quot;right&quot;,                                     y = 0,                                     yanchor = &quot;top&quot;,                                     showactive=False,                                     type=&quot;buttons&quot;,                                      buttons=[dict(label=&quot;\u25ba&quot;, method=&quot;animate&quot;, args=[None, {&quot;fromcurrent&quot;: True}]),                                              dict(label=&quot;\u275a\u275a&quot;, method=&quot;animate&quot;, args=[[None], {&quot;frame&quot;: {&quot;duration&quot;: 0, &quot;redraw&quot;: False},                                                                                                &quot;mode&quot;: &quot;immediate&quot;,                                                                                                &quot;transition&quot;: {&quot;duration&quot;: 0}}])])],                   )   fig.layout.sliders = sliders fig.frames = frames    fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/hy\/bn\/ch\/hybnchguinqe1eakm8cn1mkx6ly.png\"><\/p>\n<p>  \u0412\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 <i>\u0437\u0430\u0447\u0435\u043c \u0436\u0435 \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u043c\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u043c\u0438, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u043b\u0438\u0441\u044c?<\/i><\/p>\n<p>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0434\u043b\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u043b\u0430\u0439\u0434\u0430\u0445 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432, \u0442\u043e \u0432\u0430\u043c \u043d\u0430\u0434\u043e \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0444\u0438\u0433\u0443\u0440\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0445 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e. \u041e\u043d\u0438 \u0432\u0441\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u043c\u0438.<\/p>\n<p>  \u042f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u0434\u0430\u043c 2 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435:<\/p>\n<ul>\n<li>graphs_invisible \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u0430\u043a \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0439 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a, \u0442\u0430\u043a \u0438 \u043f\u0443\u0441\u0442\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438<\/li>\n<li>graphs_visible \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 \u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438<\/li>\n<\/ul>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043c\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u043c \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0438\u043b\u0438 \u043f\u0443\u0441\u0442\u044b\u0448\u043a\u0438, \u0430 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0444\u0440\u0435\u0439\u043c\u0435 \u0431\u0443\u0434\u0435\u043c \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u0438 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0435, \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u043c.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">graphs_invisible = [go.Scatter(visible = False, x=x, y=f(x),  name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;'),                     go.Scatter(visible = False, x=x, y=x,  name='g(x)=x'),                     go.Scatter(visible = False, x=x, y=h(x), name='h(x)=sin(x)'),                     go.Scatter(visible = False, x=x, y=k(x), name='k(x)=cos(x)')] graphs_visible = [go.Scatter(visible = True, x=x, y=f(x), name='f(x)=x&lt;sup&gt;2&lt;\/sup&gt;'),                   go.Scatter(visible = True, x=x, y=x,  name='g(x)=x'),                   go.Scatter(visible = True, x=x, y=h(x), name='h(x)=sin(x)'),                   go.Scatter(visible = True, x=x, y=k(x), name='k(x)=cos(x)')] fig = go.Figure(data=graphs_invisible)  frames=[] for i in range(len(graphs_visible)+1):     frames.append(go.Frame(name=str(i),                            data=graphs_visible[:i]+graphs_invisible[i:]))   steps = [] for i in range(len(graphs_visible)+1):     step = dict(         label = str(i),         method = &quot;animate&quot;,         args = [[str(i)]]     )     steps.append(step)  sliders = [dict(     currentvalue = {&quot;prefix&quot;: &quot;\u0413\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f: &quot;, &quot;font&quot;: {&quot;size&quot;: 20}},     len = 0.9,     x = 0.1,     pad = {&quot;b&quot;: 10, &quot;t&quot;: 50},     steps = steps, )]  fig.update_layout(title=&quot;\u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438&quot;,                   xaxis_title=&quot;\u041e\u0441\u044c X&quot;,                   yaxis_title=&quot;\u041e\u0441\u044c Y&quot;,                   updatemenus=[dict(direction=&quot;left&quot;,                                     pad = {&quot;r&quot;: 10, &quot;t&quot;: 80},                                     x = 0.1,                                     xanchor = &quot;right&quot;,                                     y = 0,                                     yanchor = &quot;top&quot;,                                     showactive=False,                                     type=&quot;buttons&quot;,                                      buttons=[dict(label=&quot;\u25ba&quot;, method=&quot;animate&quot;, args=[None, {&quot;fromcurrent&quot;: True}]),                                              dict(label=&quot;\u275a\u275a&quot;, method=&quot;animate&quot;, args=[[None], {&quot;frame&quot;: {&quot;duration&quot;: 0, &quot;redraw&quot;: False},                                                                                                &quot;mode&quot;: &quot;immediate&quot;,                                                                                                &quot;transition&quot;: {&quot;duration&quot;: 0}}])])],                   )   fig.layout.sliders = sliders fig.frames = frames    fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/tg\/qc\/oq\/tgqcoq3crqd0laengz-5vbrydos.png\"><\/p>\n<h4>\u0424\u0438\u043b\u043e\u0441\u043e\u0444\u0441\u043a\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u2014 \u0437\u0430\u0447\u0435\u043c \u043c\u044b \u0442\u0430\u043a \u043c\u0443\u0447\u0430\u0435\u043c\u0441\u044f, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c plotly.express?<\/h4>\n<p>  \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f plotly \u043f\u043e \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 <a href=\"https:\/\/plotly.com\/python\/animations\/\" rel=\"nofollow\">plotly.com\/python\/animations<\/a> \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0444\u0435\u0435\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0439 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Plotly Express<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">import plotly.express as px df = px.data.gapminder() px.scatter(df, x=&quot;gdpPercap&quot;, y=&quot;lifeExp&quot;, animation_frame=&quot;year&quot;, animation_group=&quot;country&quot;,            size=&quot;pop&quot;, color=&quot;continent&quot;, hover_name=&quot;country&quot;,            log_x=True, size_max=55, range_x=[100,100000], range_y=[25,90])<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u042d\u043a\u0441\u043f\u0440\u0435\u0441\u0441\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0434\u0430\u0442\u0430\u0444\u0440\u0435\u0439\u043c\u044b (\u0434\u0430, \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0438\u0437 Pandas), \u0432\u0430\u043c \u043b\u0438\u0448\u044c \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u0418 \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438 \u0442\u0435\u043f\u043b\u043e\u0432\u044b\u0435 \u043a\u0430\u0440\u0442\u044b, \u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043a\u043e\u0434\u0430, \u043a\u0430\u043a \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/o2\/jn\/nm\/o2jnnmubbn2dcgsw1nsib2ksee4.gif\"><\/p>\n<p>  \u041e\u0442\u0432\u0435\u0442 \u0438 \u043f\u0440\u043e\u0441\u0442 \u0438 \u0441\u043b\u043e\u0436\u0435\u043d:<\/p>\n<ol>\n<li>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u042d\u043a\u0441\u043f\u0440\u0435\u0441\u0441\u0430 \u043c\u043e\u0433\u0443\u0442 \u043d\u0435 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u044c \u0432\u0430\u0448\u0438\u0445 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0435\u0439, \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u0438 \u0445\u0438\u0442\u0440\u043e\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a \u0438 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0443. \u0412\u0440\u0443\u0447\u043d\u0443\u044e \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438.<\/li>\n<li>\u041f\u043e\u043d\u044f\u0442\u044c \u043a\u0430\u043a \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0434\u0430\u0442\u0430\u0444\u0440\u0435\u0439\u043c\u0435 \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0440\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a \u0434\u043b\u044f \u0444\u0440\u0435\u0439\u043c\u043e\u0432 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438\/\u0441\u043b\u0430\u0439\u0434\u0435\u0440\u0430.<\/li>\n<\/ol>\n<p>  <\/p>\n<h3>\u041f\u043e\u043a\u0430\u0437 plotly \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435<\/h3>\n<p>  Plotly \u2014 \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f Python, \u043d\u043e \u0435\u0449\u0451 \u0438 JS, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043b\u044e\u0431\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0432 jupyter notebook, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 (\u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0430 Python, \u043b\u0438\u0431\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0432\u0441\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435).<\/p>\n<p>  \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u0443\u0440\u043e\u043a\u0430 \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430 \u0438\u043b\u0438 \u0432\u0435\u0431 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"python\">import json #\u0417\u0434\u0435\u0441\u044c \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0435 \u0441\u0432\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u0432 \u0444\u0438\u0433\u0443\u0440\u0435 fig graphJSON = json.dumps(fig, cls=plotly.utils.PlotlyJSONEncoder)<\/code><\/pre>\n<p>  \u0412 graphJSON \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u044b\u0439 JSON. \u041d\u0435 \u0431\u0443\u0434\u0435\u043c \u0432\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0445\u043e\u0442\u044f \u043b\u0435\u0433\u043a\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0435\u0433\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0430\u0448\u0435\u043c\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u0444\u0438\u0433\u0443\u0440\u044b, \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u043c\u0438, \u0444\u0440\u0435\u0439\u043c\u0430\u043c\u0438, \u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0430\u043c\u0438, \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u0438 \u0442.\u043f.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e \u043a\u0440\u0430\u044f\u043c \u0438 \u0441\u043b\u043e\u0436\u0438\u043c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0432 \u0444\u0430\u0439\u043b:<\/p>\n<pre><code class=\"python\">with open('example.JSON', 'w') as file:     file.write('var graphs = {};'.format(graphJSON))<\/code><\/pre>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0442\u043a\u0440\u043e\u0435\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 <a href=\"https:\/\/lexnekr.github.io\/plotly_lesson\/example.html\" rel=\"nofollow\">example.html<\/a>, \u043a\u043e\u0433\u0434\u0430 \u0432 \u043e\u0434\u043d\u043e\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u0441 \u043d\u0435\u0439 \u0435\u0441\u0442\u044c \u043d\u0430\u0448 \u0444\u0430\u0439\u043b <a href=\"https:\/\/lexnekr.github.io\/plotly_lesson\/example.JSON\" rel=\"nofollow\">example.JSON<\/a> (<b>\u0414\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u0442.\u043a. \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u0438\u043b\u0438 \u0438 JS \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0441\u0430\u0439\u0442\u043e\u0432<\/b>).<\/p>\n<p>  \u0423\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0435 \u043f\u0440\u0430\u0432\u0434\u0430 \u043b\u0438?<\/p>\n<p>  \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0442\u043e \u043e\u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0430 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435\u0433\u043e 4 \u0432\u0430\u0436\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 (\u0438\u0445 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0432\u0430\u0436\u0435\u043d):<\/p>\n<p>  1. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 JS \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Plotly (\u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043e\u043d\u043b\u0430\u0439\u043d \u0438\u0437 CDN, \u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0434\u0435\u043b\u0430\u0435\u0442\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438, JS \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0438)<\/p>\n<pre><code class=\"xml\">&lt;script src=&quot;https:\/\/cdn.plot.ly\/plotly-latest.min.js&quot;&gt;&lt;\/script&gt; &lt;script src=&quot;https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/d3\/3.5.6\/d3.min.js&quot;&gt;&lt;\/script&gt;<\/code><\/pre>\n<p>  2. \u0411\u043b\u043e\u043a, \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0433\u0440\u0430\u0444\u0438\u043a<\/p>\n<pre><code class=\"xml\">&lt;div id=&quot;plotly_graph&quot;&gt;&lt;\/div&gt;<\/code><\/pre>\n<p>  \u0412\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e Plotly \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0435 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0433\u0440\u0430\u0444\u0438\u043a\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043a \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443 \u0441\u0432\u043e\u0438 \u0441\u0442\u0438\u043b\u0438, \u0441\u0432\u0435\u0440\u0441\u0442\u0430\u0432 \u0435\u0433\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0438 \u0432 \u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u0433\u0434\u0435 \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0430\u043c. Plotly \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043d\u044f\u0442\u044c \u0432\u0441\u0451 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u043f\u043e \u0448\u0438\u0440\u0438\u043d\u0435.<\/p>\n<p>  \u0412\u0430\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 id \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e \u043d\u0435\u043c\u0443 plotly \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043c\u0435\u0441\u0442\u043e \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435, \u043a\u0443\u0434\u0430 \u043d\u0430\u0434\u043e \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a.<\/p>\n<p>  3. JS \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u043d\u0430\u0448 JSON, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0433\u0440\u0430\u0444\u0438\u043a. \u041c\u044b \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0435\u0451 \u0438 \u0441\u043b\u043e\u0436\u0438\u043b\u0438 \u0432 \u0444\u0430\u0439\u043b \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0435\u0451 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u043a\u043e\u0434\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<\/p>\n<pre><code class=\"xml\">&lt;script src=&quot;example.JSON&quot;&gt;&lt;\/script&gt;<\/code><\/pre>\n<p>  4. \u0412\u044b\u0437\u043e\u0432 JS \u0444\u0443\u043d\u043a\u0446\u0438\u0438 plotly, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442 \u0433\u0440\u0430\u0444\u0438\u043a.<\/p>\n<ul>\n<li>\u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f id \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a<\/li>\n<li>\u0432\u0442\u043e\u0440\u044b\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f JSON Plotly \u043e\u0431\u044a\u0435\u043a\u0442\u0430<\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"xml\">&lt;script&gt;Plotly.plot('plotly_graph',graphs,{});&lt;\/script&gt;<\/code><\/pre>\n<p>  <b>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u0441\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043a\u043e\u0434 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0432\u043e\u0451\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0435!<\/b><\/p>\n<h3>\u041a\u0440\u0443\u0433\u043e\u0432\u044b\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b<\/h3>\n<p>  \u0414\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0442\u044b \u043a\u0430\u0440\u0442\u0438\u043d\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u0440\u043e\u043c\u0435 \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432. \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u043a\u0440\u0443\u0433\u043e\u0432\u044b\u0445 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c<\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u00ab\u043f\u043e\u0434\u0431\u0440\u043e\u0441\u0438\u043c\u00bb 100 \u0440\u0430\u0437 \u043f\u0430\u0440\u0443 \u0438\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u0443\u0431\u0438\u043a\u043e\u0432 (\u043a\u043e\u0441\u0442\u0435\u0439) \u0438 \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u0441\u0443\u043c\u043c\u044b \u0432\u044b\u043f\u0430\u0432\u0448\u0438\u0445 \u043e\u0447\u043a\u043e\u0432.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">dices = pd.DataFrame(np.random.randint(low=1, high=7, size=(100, 2)), columns=('\u041a\u043e\u0441\u0442\u044c 1', '\u041a\u043e\u0441\u0442\u044c 2'))   dices['\u0421\u0443\u043c\u043c\u0430'] = dices['\u041a\u043e\u0441\u0442\u044c 1'] + dices['\u041a\u043e\u0441\u0442\u044c 2']  # \u041f\u0435\u0440\u0432\u044b\u0435 5 \u0431\u0440\u043e\u0441\u043a\u043e\u0432 \u0438\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u0441\u0442\u0435\u0439 display(dices.head())  sum_counts = dices['\u0421\u0443\u043c\u043c\u0430'].value_counts().sort_index() # \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u043f\u0430\u0432\u0448\u0438\u0445 \u0441\u0443\u043c\u043c display(sum_counts)<\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/db\/f0\/k2\/dbf0k2jv9sjbkn0vjbgpzffn2ra.png\">  <\/div>\n<\/p><\/div>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u0440\u0443\u0433\u043e\u0432\u0443\u044e \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c go.Pie, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b\u0438 \u0433\u0440\u0430\u0444\u0438\u043a \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0443\u044e \u0444\u0438\u0433\u0443\u0440\u0443.<\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c 2 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430:<\/p>\n<ul>\n<li>values \u2014 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0435\u043a\u0442\u043e\u0440\u0430 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u044f\u043c\u043e \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u0435\u043d \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0442\u043e\u0439 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b<\/li>\n<li>labels \u2014 \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0441\u0435\u043a\u0442\u043e\u0440\u0430, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0443\u043c\u043c\u044b. \u0415\u0441\u043b\u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u044c, \u0442\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u0437\u044f\u0442 \u0438\u043d\u0434\u0435\u043a\u0441 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 values<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Pie(values=sum_counts, labels=sum_counts.index)) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/x3\/6l\/ec\/x36lecc7shadjwxdqrnsqx1secq.png\"><\/p>\n<p>  \u0421\u0440\u0430\u0437\u0443 \u0431\u0440\u043e\u0441\u0430\u0435\u0442\u0441\u044f \u0432 \u0433\u043b\u0430\u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u0445\u043e\u0442\u044f \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438 \u043c\u0430\u0441\u0441\u0438\u0432, \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c, \u043d\u043e \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u043e\u043d \u0431\u044b\u043b \u043f\u0435\u0440\u0435\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c.<\/p>\n<p>  \u042d\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 <code>sort = False<\/code><\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Pie(values=sum_counts, labels=sum_counts.index, sort = False)) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/cs\/qg\/9o\/csqg9oxqzfkroatp_mf2ehabrlm.png\"><\/p>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u00ab\u0432\u044b\u0434\u0432\u0438\u043d\u0443\u0442\u044c\u00bb \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0442\u043e\u0440\u043e\u0432.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 pull, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0447\u0438\u0441\u0435\u043b. \u041a\u0430\u0436\u0434\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u2014 \u0434\u043e\u043b\u044f, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0430\u0434\u043e \u0432\u044b\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0441\u0435\u043a\u0442\u043e\u0440 \u0438\u0437 \u043a\u0440\u0443\u0433\u0430:<\/p>\n<ul>\n<li>0 \u2014 \u043d\u0435 \u0432\u044b\u0434\u0432\u0438\u0433\u0430\u0442\u044c<\/li>\n<li>1 \u2014 100% \u0440\u0430\u0434\u0438\u0443\u0441\u0430 \u043a\u0440\u0443\u0433\u0430<\/li>\n<\/ul>\n<p>  \u041c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u043d\u0443\u043b\u0435\u0439, \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0434\u043b\u0438\u043d\u043d\u044b, \u0447\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0410 \u043f\u043e\u0442\u043e\u043c \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043c \u0434\u043e 0.2.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\"><i>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043c\u0435\u0442\u043e\u0434 idxmax Pandas, \u0442.\u043a. \u043d\u0430\u0448 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u043c\u0435\u0435\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0441\u0443\u043c\u043c\u0430\u043c. \u0410 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u0430\u043a\u043e\u0439 \u0441\u0435\u043a\u0442\u043e\u0440 \u0432\u044b\u0434\u0432\u0438\u0433\u0430\u0442\u044c \u043d\u0430 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0441\u043f\u0438\u0441\u043a\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0430\u0448 \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f.<\/i><\/p>\n<pre><code class=\"python\">fig = go.Figure() pull = [0]*len(sum_counts) pull[sum_counts.tolist().index(sum_counts.max())] = 0.2 fig.add_trace(go.Pie(values=sum_counts, labels=sum_counts.index, pull=pull)) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/7u\/iv\/8p\/7uiv8pdqaajkb2pfmc5lazmi-sa.png\"><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0435 \u043d\u0440\u0430\u0432\u044f\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u0440\u0443\u0433\u043e\u0432\u044b\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u00ab\u043f\u0438\u0440\u043e\u0436\u043a\u0438\u00bb, \u0442\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0438\u0445 \u0432 \u00ab\u043f\u043e\u043d\u0447\u0438\u043a\u0438\u00bb, \u0432\u044b\u0440\u0435\u0437\u0430\u0432 \u0441\u0435\u0440\u0434\u0446\u0435\u0432\u0438\u043d\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 hole, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0447\u0438\u0441\u043b\u043e (\u0434\u043e\u043b\u044e \u0440\u0430\u0434\u0438\u0443\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0430\u0434\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c):<\/p>\n<ul>\n<li>0 \u2014 \u043d\u0435 \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e<\/li>\n<li>1 \u2014 100% \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c<\/li>\n<\/ul>\n<p>  <i>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0.9 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442 \u043a\u0440\u0443\u0433\u043e\u0432\u0443\u044e \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0443 \u0432 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u0443\u044e.<\/i><\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() pull = [0]*len(sum_counts) pull[sum_counts.tolist().index(sum_counts.max())] = 0.2 fig.add_trace(go.Pie(values=sum_counts, labels=sum_counts.index, pull=pull, hole=0.9)) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_x\/g2\/c-\/_xg2c-y-v5z7a7heauswyfoad-y.png\"><\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0432\u0448\u0430\u044f\u0441\u044f \u00ab\u0434\u044b\u0440\u043a\u0430 \u043e\u0442 \u0431\u0443\u0431\u043b\u0438\u043a\u0430\u00bb \u2014 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 annotations \u0441\u043b\u043e\u044f.<\/p>\n<p>  \u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u043d\u043e\u0433\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 annotations \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u0439.<\/p>\n<p>  \u0422\u0435\u043a\u0441\u0442 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 HTML \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443 (\u0447\u0435\u043c \u043c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f, \u0437\u0430\u0434\u0430\u0432 \u0430\u0431\u0441\u0443\u0440\u0434\u043d\u043e \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442, \u043d\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0432 1 \u0441\u0442\u0440\u043e\u043a\u0443)<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() pull = [0]*len(sum_counts) pull[sum_counts.tolist().index(sum_counts.max())] = 0.2 fig.add_trace(go.Pie(values=sum_counts, labels=sum_counts.index, pull=pull, hole=0.9))  fig.update_layout(     annotations=[dict(text='\u0421\u0443\u043c\u043c\u044b \u043e\u0447\u043a\u043e\u0432&lt;br&gt;\u043f\u0440\u0438 \u0431\u0440\u043e\u0441\u043a\u0435&lt;br&gt;2 \u0438\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u0441\u0442\u0435\u0439', x=0.5, y=0.5, font_size=20, showarrow=False)]) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/um\/g2\/co\/umg2cowc5fljemp6umyfzzsjvja.png\"><\/p>\n<p>  \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439, \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432, \u0442\u0443\u0442 \u0442\u043e\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442:<\/p>\n<ul>\n<li>title<\/li>\n<li>title_x<\/li>\n<li>margin<\/li>\n<li>legend_orientation<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() pull = [0]*len(sum_counts) pull[sum_counts.tolist().index(sum_counts.max())] = 0.2 fig.add_trace(go.Pie(values=sum_counts, labels=sum_counts.index, pull=pull, hole=0.9))  fig.update_layout(     title=&quot;\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0439\/\u043a\u0440\u0443\u0433\u043e\u0432\u043e\u0439 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b&quot;,     title_x = 0.5,     margin=dict(l=0, r=0, t=30, b=0),     legend_orientation=&quot;h&quot;,     annotations=[dict(text='\u0421\u0443\u043c\u043c\u044b \u043e\u0447\u043a\u043e\u0432&lt;br&gt;\u043f\u0440\u0438 \u0431\u0440\u043e\u0441\u043a\u0435&lt;br&gt;2 \u0438\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u0441\u0442\u0435\u0439', x=0.5, y=0.5, font_size=20, showarrow=False)]) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/xu\/an\/1b\/xuan1bedfot9wubzuiydi15kkpk.png\"><\/p>\n<p>  \u0427\u0442\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u043c \u0434\u0435\u0442\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443?<\/p>\n<h3>Sunburst \u0438\u043b\u0438 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u00ab\u0441\u043e\u043b\u043d\u0435\u0447\u043d\u044b\u0435 \u043b\u0443\u0447\u0438\u00bb<\/h3>\n<p>  \u041d\u0430\u043c \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u00ab\u0441\u043e\u043b\u043d\u0435\u0447\u043d\u044b\u0435 \u043b\u0443\u0447\u0438\u00bb \u2014 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u0440\u0443\u0433\u043e\u0432\u043e\u0439. \u041f\u043e \u0441\u0443\u0442\u0438 \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u044b\u0445 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c, \u043d\u0430\u043d\u0438\u0437\u0430\u043d\u043d\u044b\u0445 \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430, \u043f\u0440\u0438\u0447\u0451\u043c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0433\u0440\u0430\u043d\u0438\u0446 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0432\u043e\u0435\u0433\u043e \u00ab\u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f\u00bb \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c 8 \u043e\u0447\u043a\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e 2 \u0438\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u0441\u0442\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438:<\/p>\n<ul>\n<li>2 + 6<\/li>\n<li>3 + 5<\/li>\n<li>4 + 4<\/li>\n<\/ul>\n<p>  \u0414\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f go.Sunburst \u0438 4 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430:<\/p>\n<ul>\n<li>values \u2014 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0437\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0434\u043e\u043b\u044e \u043e\u0442 \u043a\u0440\u0443\u0433\u0430 \u043d\u0430 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0435<\/li>\n<li>branchvalues=\u00abtotal\u00bb \u2014 \u0442\u0430\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0443\u043c\u043c\u043e\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432. \u042d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u0440\u0443\u0433 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435.<\/li>\n<li>labels \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0434\u043f\u0438\u0441\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0435<\/li>\n<li>parents \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0434\u043f\u0438\u0441\u0435\u0439 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439, \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438. \u0414\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 0 \u0443\u0440\u043e\u0432\u043d\u044f (\u0431\u0435\u0437 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439) \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0443\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430.<\/li>\n<\/ul>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u043e\u0439\u0434\u0451\u043c\u0441\u044f 2 \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438 (\u0432\u0441\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438 \u0441\u0443\u043c\u043c\u044b)<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\"># 1-\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c, \u0446\u0435\u043d\u0442\u0440 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b labels = [&quot;\u0412\u0441\u0435\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0439: &quot; + str(sum(sum_counts))] parents = [&quot;&quot;] values = [sum(sum_counts)]  # 2-\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c, &quot;\u043b\u0435\u043f\u0435\u0441\u0442\u043a\u0438&quot; \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b second_level_dict = {x:'\u0421\u043e\u0431\u044b\u0442\u0438\u0439: ' + str(sum_counts[x]) + '&lt;br&gt;\u03a3 = ' + str(x) for x in sum_counts.index} labels += map(lambda x: second_level_dict[x], sum_counts.index) parents += [labels[0]]*len(sum_counts) values += sum_counts.tolist()  fig = go.Figure(go.Sunburst(     labels = labels,     parents = parents,     values=values,     branchvalues=&quot;total&quot; )) #fig.update_layout(margin = dict(t=0, l=0, r=0, b=0))  fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/mx\/10\/s6\/mx10s6igoplbs4xrsczd6ip8_u4.png\"><\/p>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0443 \u043f\u043e \u043f\u0430\u0440\u0430\u043c \u0438\u0441\u0445\u043e\u0434\u043e\u0432 \u0438\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u0441\u0442\u0435\u0439 \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u043f\u0430\u0440 \u00ab\u0440\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439\u00bb.<\/p>\n<p>  <i>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u043b\u0438 \u043a\u043e\u0441\u0442\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b, \u0442\u043e 6+2 \u0438 2+6 \u2014 \u044d\u0442\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0435 \u0438\u0441\u0445\u043e\u0434\u044b, \u043a\u0430\u043a \u0438 \u043f\u0430\u0440\u0430 3+5 \u0438 5+3, \u043d\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0445 \u0440\u0430\u0437\u043d\u044b\u043c\u0438, \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043b\u0438\u0448\u043d\u0435\u0433\u043e \u043a\u043e\u0434\u0430.<\/i><\/p>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043c \u043e\u0442\u0441\u0442\u0443\u043f\u044b, \u0442.\u043a. \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0443\u0436 \u043e\u0447\u0435\u043d\u044c \u043c\u0435\u043b\u043a\u0438\u043c\u0438.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\"># 1-\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c, \u0446\u0435\u043d\u0442\u0440 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b labels = [&quot;\u0412\u0441\u0435\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0439: &quot; + str(sum(sum_counts))] parents = [&quot;&quot;] values = [sum(sum_counts)]  # 2-\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c, &quot;\u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439&quot; second_level_dict = {x:'\u0421\u043e\u0431\u044b\u0442\u0438\u0439: ' + str(sum_counts[x]) + '&lt;br&gt;\u03a3 = ' + str(x) for x in sum_counts.index} labels += map(lambda x: second_level_dict[x], sum_counts.index) parents += [labels[0]]*len(sum_counts) values += sum_counts.tolist()  # \u0413\u043e\u0442\u043e\u0432\u0438\u043c DataFrame \u0434\u043b\u044f 3 \u0443\u0440\u043e\u0432\u043d\u044f (\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u0435\u043c ) third_level = dices.groupby(['\u041a\u043e\u0441\u0442\u044c 1', '\u041a\u043e\u0441\u0442\u044c 2']).count().reset_index() third_level.rename(columns={'\u0421\u0443\u043c\u043c\u0430':'Value'}, inplace=True) third_level['\u0421\u0443\u043c\u043c\u0430'] = third_level['\u041a\u043e\u0441\u0442\u044c 1'] + third_level['\u041a\u043e\u0441\u0442\u044c 2'] third_level['Label'] = third_level['\u041a\u043e\u0441\u0442\u044c 1'].map(str) + ' + ' + third_level['\u041a\u043e\u0441\u0442\u044c 2'].map(str) third_level['Parent'] = third_level['\u0421\u0443\u043c\u043c\u0430'].map(lambda x: second_level_dict[x]) # 3-\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c, &quot;\u043b\u0435\u043f\u0435\u0441\u0442\u043a\u0438&quot; \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b values += third_level['Value'].tolist() parents += third_level['Parent'].tolist() labels += third_level['Label'].tolist()  fig = go.Figure(go.Sunburst(     labels = labels,     parents = parents,     values=values,     branchvalues=&quot;total&quot; )) fig.update_layout(margin = dict(t=0, l=0, r=0, b=0))  fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/di\/rj\/up\/dirjupqmovqbhlwg3fpjfn7wxxk.png\"><\/p>\n<h3>\u0413\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/h3>\n<p>  \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0435 \u043a\u0440\u0443\u0433\u043e\u0432\u044b\u043c\u0438 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438 \u0435\u0434\u0438\u043d\u044b\u043c\u0438, \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u044b \u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0447\u0430\u0442\u044b\u0435.<\/p>\n<p>  \u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0430\u044f \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e go.Histogram. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0432 x \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u0432\u044b\u0431\u043e\u0440\u043a\u0435 (Plotly \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u0435\u0442 \u0438\u0445 \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442 \u0432\u044b\u0441\u043e\u0442\u0443), \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043a\u043e\u043b\u043e\u043d\u043a\u0430 \u0441 \u0441\u0443\u043c\u043c\u0430\u043c\u0438.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure(data=[go.Histogram(x=dices['\u0421\u0443\u043c\u043c\u0430'])]) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/fx\/_g\/gp\/fx_ggp4bcthggx_nygajy66y7xi.png\"><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0435 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0443\u044e, \u0430 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u0442\u043e \u043c\u0435\u043d\u044f\u0435\u043c x \u043d\u0430 y:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure(data=[go.Histogram(y=dices['\u0421\u0443\u043c\u043c\u0430'])]) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/oj\/sg\/5j\/ojsg5jzpseouu5kix8i2fcnm5eo.png\"><\/p>\n<p>  \u0410 \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 2 \u0438\u043b\u0438 3 \u043d\u0430\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0438\u0445 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c? \u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0435\u0449\u0451 1100 \u0431\u0440\u043e\u0441\u043a\u043e\u0432 \u043f\u0430\u0440 \u043a\u0443\u0431\u0438\u043a\u043e\u0432 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0430 \u0444\u0438\u0433\u0443\u0440\u0443 2 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">dices2 = pd.DataFrame(np.random.randint(low=1, high=7, size=(100, 2)), columns=('\u041a\u043e\u0441\u0442\u044c 1', '\u041a\u043e\u0441\u0442\u044c 2')) dices2['\u0421\u0443\u043c\u043c\u0430'] = dices2['\u041a\u043e\u0441\u0442\u044c 1'] + dices2['\u041a\u043e\u0441\u0442\u044c 2'] dices3 = pd.DataFrame(np.random.randint(low=1, high=7, size=(1000, 2)), columns=('\u041a\u043e\u0441\u0442\u044c 1', '\u041a\u043e\u0441\u0442\u044c 2')) dices3['\u0421\u0443\u043c\u043c\u0430'] = dices3['\u041a\u043e\u0441\u0442\u044c 1'] + dices3['\u041a\u043e\u0441\u0442\u044c 2']  fig = go.Figure() fig.add_trace(go.Histogram(x=dices['\u0421\u0443\u043c\u043c\u0430'])) fig.add_trace(go.Histogram(x=dices2['\u0421\u0443\u043c\u043c\u0430'])) fig.add_trace(go.Histogram(x=dices3['\u0421\u0443\u043c\u043c\u0430'])) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/q1\/8a\/py\/q18apyf3mefpkv-fjh-ttinh0gc.png\"><\/p>\n<p>  \u0412\u0441\u0435 3 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043f\u043e\u0434\u0447\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u0442\u043e\u043c\u0443 \u0436\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e, \u0438 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043d\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u043d\u0430\u0448\u0435\u0439 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0441\u0438\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0440\u0443\u0433\u0438\u0445.<\/p>\n<p>  \u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u043d\u0430\u0434\u043e \u00ab\u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u00bb. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0443\u0436\u0438\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 histnorm.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Histogram(x=dices['\u0421\u0443\u043c\u043c\u0430'], histnorm='probability density')) fig.add_trace(go.Histogram(x=dices2['\u0421\u0443\u043c\u043c\u0430'], histnorm='probability density')) fig.add_trace(go.Histogram(x=dices3['\u0421\u0443\u043c\u043c\u0430'], histnorm='probability density')) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/jq\/qi\/ni\/jqqinis8hdwnxbalg4dqtnchq44.png\"><\/p>\n<p>  \u041a\u0430\u043a \u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0432\u0438\u0434\u044b \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439, \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435:<\/p>\n<ul>\n<li>\u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0430, \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043e\u0441\u0435\u0439<\/li>\n<li>\u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043b\u0435\u0433\u0435\u043d\u0434\u044b.<\/li>\n<li>\u043e\u0442\u0441\u0442\u0443\u043f\u044b<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Histogram(x=dices['\u0421\u0443\u043c\u043c\u0430'], histnorm='probability density', name='100 \u0431\u0440\u043e\u0441\u043a\u043e\u0432 v.1')) fig.add_trace(go.Histogram(x=dices2['\u0421\u0443\u043c\u043c\u0430'], histnorm='probability density', name='100 \u0431\u0440\u043e\u0441\u043a\u043e\u0432 v.2')) fig.add_trace(go.Histogram(x=dices3['\u0421\u0443\u043c\u043c\u0430'], histnorm='probability density', name='1000 \u0431\u0440\u043e\u0441\u043a\u043e\u0432')) fig.update_layout(     title=&quot;\u041f\u0440\u0438\u043c\u0435\u0440 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0431\u0440\u043e\u0441\u043a\u043e\u0432 \u043f\u0430\u0440\u044b \u0438\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u0441\u0442\u0435\u0439&quot;,     title_x = 0.5,     xaxis_title=&quot;\u0441\u0443\u043c\u043c\u0430 \u043e\u0447\u043a\u043e\u0432&quot;,     yaxis_title=&quot;\u041f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438&quot;,     legend=dict(x=.5, xanchor=&quot;center&quot;, orientation=&quot;h&quot;),     margin=dict(l=0, r=0, t=30, b=0))  fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/rt\/ax\/1i\/rtax1iszccqulhxfp-i05p8u4w8.png\"><\/p>\n<p>  \u0414\u0440\u0443\u0433\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0440\u0435\u0436\u0438\u043c \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f \u2014 barmode=&#8217;overlay&#8217; \u2014 \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043e\u0434\u043d\u0438 \u043f\u043e\u0432\u0435\u0440\u0445 \u0434\u0440\u0443\u0433\u0438\u0445.<\/p>\n<p>  \u0418\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c opacity \u0441\u0430\u043c\u0438\u0445 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c \u2014 \u043e\u043d \u0437\u0430\u0434\u0430\u0451\u0442 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b (\u043e\u0442 0 \u0434\u043e 100%).<\/p>\n<p>  <i>\u041e\u0434\u043d\u0430\u043a\u043e, \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u044f\u0436\u0435\u043b\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0441\u043a\u0440\u043e\u0435\u043c \u043e\u0434\u043d\u0443.<\/i><\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Histogram(x=dices['\u0421\u0443\u043c\u043c\u0430'], histnorm='probability density', opacity=0.75, name='100 \u0431\u0440\u043e\u0441\u043a\u043e\u0432 v.1')) fig.add_trace(go.Histogram(x=dices2['\u0421\u0443\u043c\u043c\u0430'], histnorm='probability density', opacity=0.75, name='100 \u0431\u0440\u043e\u0441\u043a\u043e\u0432 v.2')) #fig.add_trace(go.Histogram(x=dices3['\u0421\u0443\u043c\u043c\u0430'], histnorm='probability density', opacity=0.75, name='1000 \u0431\u0440\u043e\u0441\u043a\u043e\u0432')) fig.update_layout(     title=&quot;\u041f\u0440\u0438\u043c\u0435\u0440 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0431\u0440\u043e\u0441\u043a\u043e\u0432 \u043f\u0430\u0440\u044b \u0438\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u0441\u0442\u0435\u0439&quot;,     title_x = 0.5,     xaxis_title=&quot;\u0441\u0443\u043c\u043c\u0430 \u043e\u0447\u043a\u043e\u0432&quot;,     yaxis_title=&quot;\u041f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438&quot;,     legend=dict(x=.5, xanchor=&quot;center&quot;, orientation=&quot;h&quot;),     barmode='overlay',     margin=dict(l=0, r=0, t=30, b=0))  fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ll\/bm\/ie\/llbmie6bsthux1_n4odah-gdidi.png\"><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438, \u0442\u043e \u0438\u043c\u0435\u0435\u0442 \u0442\u0430\u043a \u0436\u0435 \u0441\u043c\u044b\u0441\u043b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438 \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c X \u043e\u0447\u043a\u043e\u0432 \u043d\u0430 \u0441\u0443\u043c\u043c\u0435 \u0438\u0437 2 \u0438\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u0441\u0442\u0435\u0439.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b cumulative_enabled=True<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Histogram(x=dices['\u0421\u0443\u043c\u043c\u0430'], histnorm='probability density', cumulative_enabled=True, name='100 \u0431\u0440\u043e\u0441\u043a\u043e\u0432 v.1')) fig.add_trace(go.Histogram(x=dices2['\u0421\u0443\u043c\u043c\u0430'], histnorm='probability density', cumulative_enabled=True, name='100 \u0431\u0440\u043e\u0441\u043a\u043e\u0432 v.2')) fig.add_trace(go.Histogram(x=dices3['\u0421\u0443\u043c\u043c\u0430'], histnorm='probability density', cumulative_enabled=True, name='1000 \u0431\u0440\u043e\u0441\u043a\u043e\u0432')) fig.update_layout(     title=&quot;\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0431\u0440\u043e\u0441\u043a\u043e\u0432 \u043f\u0430\u0440\u044b \u0438\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u0441\u0442\u0435\u0439&quot;,     title_x = 0.5,     xaxis_title=&quot;\u0441\u0443\u043c\u043c\u0430 \u043e\u0447\u043a\u043e\u0432&quot;,     yaxis_title=&quot;\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c&quot;,     legend=dict(x=.5, xanchor=&quot;center&quot;, orientation=&quot;h&quot;),     margin=dict(l=0, r=0, t=30, b=0))  fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/nl\/rj\/z_\/nlrjz_rzsxu1oorvcc6rlgmljly.png\"><\/p>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u0444\u0438\u0433\u0443\u0440\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043f\u043e \u0442\u043e\u0447\u043a\u0430\u043c (go.Scatter) \u0438 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0443 (go.Histogram).<\/p>\n<p>  \u0414\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c 1000 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u2014 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e. \u0414\u043b\u044f \u043d\u0435\u0433\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043a\u0440\u0438\u0432\u0443\u044e. \u041c\u044b \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u043c\u043e\u0434\u0443\u043b\u044f scipy:<\/p>\n<ul>\n<li>scipy.stats.norm.rvs \u2014 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439<\/li>\n<li>scipy.stats.norm.pdf \u2014 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 (x) \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 \u0432 3\u03c3<\/p>\n<pre><code class=\"python\">from scipy.stats import norm r = norm.rvs(size=1000)  x_norm = np.linspace(norm.ppf(0.01), norm.ppf(0.99), 100)  fig = go.Figure() fig.add_trace(go.Histogram(x=r, histnorm='probability density', name='&quot;\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435&quot; \u0434\u0430\u043d\u043d\u044b\u0435')) fig.add_trace(go.Scatter(x=x_norm, y=norm.pdf(x_norm), name='\u0422\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0444\u043e\u0440\u043c\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f')) fig.update_layout(     title=&quot;\u041f\u0440\u0438\u043c\u0435\u0440 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f&quot;,     title_x = 0.5,     legend=dict(x=.5, xanchor=&quot;center&quot;, orientation=&quot;h&quot;),     margin=dict(l=0, r=0, t=30, b=0))  fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/hj\/kb\/dc\/hjkbdcc3vchrgake4jkadp7tryc.png\"><\/p>\n<p>  \u042d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a \u0436\u0435 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u044b, \u0435\u0441\u043b\u0438 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430 \u043d\u0435 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u0430\u044f.<\/p>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0442\u0435\u043c \u0432\u044b\u0448\u0435, \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u043f\u0430\u043b\u043e \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0448\u0438\u0440\u0438\u043d\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430.<\/p>\n<p>  \u0412 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0438 \u0438\u0445 \u0448\u0438\u0440\u0438\u043d\u0443 (\u044d\u0442\u043e 2 \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430).<\/p>\n<ul>\n<li>\u0412\u0430\u0440\u0438\u0430\u043d\u0442 1 \u2014 \u0437\u0430\u0434\u0430\u0432 \u0448\u0438\u0440\u0438\u043d\u0443 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u2014 xbins={\u00absize\u00bb:0.1}<\/li>\n<li>\u0412\u0430\u0440\u0438\u0430\u043d\u0442 2 \u2014 \u0437\u0430\u0434\u0430\u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u2014 nbinsx=200<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Histogram(nbinsx=200,                            x=r, histnorm='probability density', name='&quot;\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435&quot; \u0434\u0430\u043d\u043d\u044b\u0435')) fig.add_trace(go.Scatter(x=x_norm, y=norm.pdf(x_norm), name='\u0422\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0444\u043e\u0440\u043c\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f')) fig.update_layout(     title=&quot;\u041f\u0440\u0438\u043c\u0435\u0440 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f&quot;,     title_x = 0.5,     legend=dict(x=.5, xanchor=&quot;center&quot;, orientation=&quot;h&quot;),     margin=dict(l=0, r=0, t=30, b=0))  fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/wq\/hq\/_u\/wqhq_u5rz3typ0bgmw6ptvyvjs4.png\"><\/p>\n<h3>\u0414\u0440\u0443\u0433\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0447\u0430\u0442\u044b\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u2014 Bar Charts<\/h3>\n<p>  \u0421\u0442\u043e\u043b\u0431\u0447\u0430\u0442\u044b\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u043c\u043e\u0436\u043d\u043e \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0441\u0432\u043e\u0438\u043c\u0438 \u0441\u0438\u043b\u0430\u043c\u0438, \u0435\u0441\u043b\u0438 \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0432\u044b\u0441\u043e\u0442\u044b \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432.<\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043b\u0430\u0441\u0441 go.Bar \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0438 \u0438\u0445 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b \u0432 2 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430:<\/p>\n<ul>\n<li>x \u2014 \u043f\u043e\u0434\u043f\u0438\u0441\u0438<\/li>\n<li>y \u2014 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">d_grouped = dices.groupby(['\u0421\u0443\u043c\u043c\u0430']).count()  labels = d_grouped.index values = d_grouped['\u041a\u043e\u0441\u0442\u044c 1'].values  fig = go.Figure(data=[go.Bar(x = labels, y = values)]) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/el\/9p\/tv\/el9ptvi3jaa9qqbkk1f2izj3bse.png\"><br \/>  <b>\u0412\u0430\u0436\u043d\u043e!<\/b><\/p>\n<p>  \u041a\u0430\u043a \u0438 \u043a\u0440\u0443\u0433\u043e\u0432\u0430\u044f \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430, \u0442\u0430\u043a\u0430\u044f \u0441\u0442\u043e\u043b\u0431\u0447\u0430\u0442\u0430\u044f \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0440\u0430\u043d\u0435\u0435 \u0438\u0437\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c \u043d\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0435\u0433\u043e \u043d\u0435\u0442!<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e 10 \u0431\u0440\u043e\u0441\u043a\u043e\u0432 \u043f\u043e 2 \u043a\u043e\u0441\u0442\u0438, \u0442\u043e \u0441\u0440\u0435\u0434\u0438 \u043d\u0438\u0445 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u0430\u0441\u0442\u044c \u0432\u0441\u0435\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432. \u0410 \u0437\u043d\u0430\u0447\u0438\u0442, \u043e\u043d\u0438 \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u044f\u0442\u0441\u044f \u043d\u0430 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0435:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434 \u0434\u044b\u0440\u044f\u0432\u043e\u0439 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0431\u0435\u0437 \u043a\u0440\u0430\u0439\u043d\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">BAD_d_grouped = dices.head(10).groupby(['\u0421\u0443\u043c\u043c\u0430']).count()  labels = BAD_d_grouped.index values = BAD_d_grouped['\u041a\u043e\u0441\u0442\u044c 1'].values  fig = go.Figure(data=[go.Bar(x = labels, y = values)]) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/n1\/er\/c5\/n1erc5gndrzwgulihszbdf95bys.png\"><br \/>  \u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0412\u0421\u0415\u0425, \u0434\u0430\u0436\u0435 \u043d\u0443\u043b\u0435\u0432\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432, \u0438\u0445 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">labels = tuple(range(2,13))  BAD_d_grouped = dices.head(10).groupby(['\u0421\u0443\u043c\u043c\u0430']).count() clear = BAD_d_grouped['\u041a\u043e\u0441\u0442\u044c 1'].append(pd.DataFrame([0]*len(labels), index=labels)).reset_index().drop_duplicates('index').sort_values('index')  values = clear[0]  fig = go.Figure(data=[go.Bar(x = labels, y = values)]) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/zw\/rc\/fx\/zwrcfxtq4cplaadwfodklwvicr4.png\"><\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0430\u0440\u043d\u0443\u044e \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f 2 \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u043f\u043e 100 \u0431\u0440\u043e\u0441\u043a\u043e\u0432, \u0432 \u043e\u0431\u0430 \u043d\u0430\u0431\u043e\u0440\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0441 \u043d\u0443\u043b\u044f\u043c\u0438, \u0435\u0441\u043b\u0438 \u0438\u0445 \u043d\u0435\u0442.<\/p>\n<p>  <i>\u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043c\u0435\u0441\u0442\u0430\u0445 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e 1 \u043a\u043e\u043b\u043e\u043d\u043a\u0430, \u043b\u0438\u0431\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0432\u043e\u043e\u0431\u0449\u0435.<\/i><\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">labels = tuple(range(2,13))  d_grouped = dices.groupby(['\u0421\u0443\u043c\u043c\u0430']).count() clear = d_grouped['\u041a\u043e\u0441\u0442\u044c 1'].append(pd.DataFrame([0]*len(labels), index=labels)).reset_index().drop_duplicates('index').sort_values('index') values = clear[0]  d_grouped2 = dices2.groupby(['\u0421\u0443\u043c\u043c\u0430']).count() clear2 = d_grouped2['\u041a\u043e\u0441\u0442\u044c 1'].append(pd.DataFrame([0]*len(labels), index=labels)).reset_index().drop_duplicates('index').sort_values('index') values2 = clear2[0]   fig = go.Figure() fig.add_trace(go.Bar(x = labels, y = values)) fig.add_trace(go.Bar(x = labels, y = values2)) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/bi\/ai\/27\/biai275ndr_eoufv1__fs5xab4o.png\"><\/p>\n<p>  \u0410 \u0432\u043e\u0442 \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0438 3\u0439 \u043d\u0430\u0431\u043e\u0440 \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0439 (1000 \u0431\u0440\u043e\u0441\u043a\u043e\u0432), \u0442\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u0442.\u043a. \u0443 go.Bar \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c \u043d\u0435\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0432\u0440\u043e\u0434\u0435 histnorm.<\/p>\n<p>  \u0418\u043d\u0430\u0447\u0435 \u0432\u043d\u043e\u0432\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u0442\u0440\u0430\u043d\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443, \u043a\u043e\u0433\u0434\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0441\u0435\u0440\u0438\u0438 \u0441\u0438\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0438 \u0438\u0445 \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">labels = tuple(range(2,13))  d_grouped = dices.groupby(['\u0421\u0443\u043c\u043c\u0430']).count() clear = d_grouped['\u041a\u043e\u0441\u0442\u044c 1'].append(pd.DataFrame([0]*len(labels), index=labels)).reset_index().drop_duplicates('index').sort_values('index') values = clear[0] \/ clear[0].sum()   d_grouped2 = dices2.groupby(['\u0421\u0443\u043c\u043c\u0430']).count() clear2 = d_grouped2['\u041a\u043e\u0441\u0442\u044c 1'].append(pd.DataFrame([0]*len(labels), index=labels)).reset_index().drop_duplicates('index').sort_values('index') values2 = clear2[0] \/ clear2[0].sum()   d_grouped3 = dices3.groupby(['\u0421\u0443\u043c\u043c\u0430']).count() clear3 = d_grouped3['\u041a\u043e\u0441\u0442\u044c 1'].append(pd.DataFrame([0]*len(labels), index=labels)).reset_index().drop_duplicates('index').sort_values('index') values3 = clear3[0] \/ clear3[0].sum()   fig = go.Figure() fig.add_trace(go.Bar(x = labels, y = values)) fig.add_trace(go.Bar(x = labels, y = values2)) fig.add_trace(go.Bar(x = labels, y = values3)) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ih\/ki\/oe\/ihkioepzxz__g265viqhnqpjleg.png\"><\/p>\n<p>  \u0417\u0430\u0442\u043e \u0435\u0441\u0442\u044c \u0443 \u0442\u0430\u043a\u043e\u0439 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u2014 \u0432\u044b\u0441\u043e\u0442\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u0440\u0438\u0431\u044b\u043b\u0435\u0439 \u0438 \u0443\u0431\u044b\u0442\u043a\u043e\u0432 \u043f\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u043c. \u041f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0447\u0442\u0435\u043c \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0434\u0440\u0443\u0433\u043e\u0439, \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0447\u0438\u0441\u0435\u043b (\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435, \u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 0) \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0433\u043e \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u044d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u0432\u043e\u0434 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0447\u0430\u0442\u044b\u0445 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432\u0441\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u0445. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043a\u0440\u0430\u0441\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">labels = tuple(range(2,13))  d_grouped = dices.groupby(['\u0421\u0443\u043c\u043c\u0430']).count() clear = d_grouped['\u041a\u043e\u0441\u0442\u044c 1'].append(pd.DataFrame([0]*len(labels), index=labels)).reset_index().drop_duplicates('index').sort_values('index') values = clear[0]   d_grouped2 = dices2.groupby(['\u0421\u0443\u043c\u043c\u0430']).count() clear2 = d_grouped2['\u041a\u043e\u0441\u0442\u044c 1'].append(pd.DataFrame([0]*len(labels), index=labels)).reset_index().drop_duplicates('index').sort_values('index') values2 = clear2[0]    fig = go.Figure() fig.add_trace(go.Bar(x = labels, y = values - values2)) fig.update_yaxes(zeroline=True, zerolinewidth=3, zerolinecolor='red') fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   title=&quot;\u0427\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0432 \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u044f\u0445&lt;br&gt;\u043d\u0430 \u043a\u0430\u043a\u0443\u044e \u0441\u0443\u043c\u043c\u0443 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0438\u0437 100 \u0431\u0440\u043e\u0441\u043a\u043e\u0432 \u0431\u044b\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0443\u0441\u043f\u0435\u0445\u043e\u0432?&quot;,                   xaxis_title=&quot;\u0421\u0443\u043c\u043c\u0430 \u043e\u0447\u043a\u043e\u0432&quot;,                   yaxis_title=&quot;\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 \u0447\u0438\u0441\u043b\u0435 \u0438\u0441\u0445\u043e\u0434\u043e\u0432&quot;,                   margin=dict(l=0, r=0, t=50, b=0)) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ph\/mo\/9f\/phmo9f8fa8mjoh0oa_ziqbhr4rk.png\"><\/p>\n<p>  \u0410 \u0435\u0449\u0451 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043f\u0440\u044f\u043c\u043e \u043f\u043e\u0432\u0435\u0440\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0430\u0440\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<ul>\n<li>text \u2014 \u0441\u044e\u0434\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0435\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 (\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438)<\/li>\n<li>textposition \u2014 \u0441\u043f\u043e\u0441\u043e\u0431 \u0432\u044b\u0432\u043e\u0434\u0430 \u0442\u0435\u043a\u0441\u0442\u0430:<br \/> \n<ul>\n<li>&#8216;auto&#8217; \u2014 Plotly \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0448\u0435\u043d\u0438\u0435<\/li>\n<li>&#8216;outside&#8217; \u2014 \u0441\u043d\u0430\u0440\u0443\u0436\u0438, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0442\u043e\u043b\u0431\u0447\u0430\u0442\u043e\u0439 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 <b>\u043d\u0430\u0434 <\/b>\u0441\u0442\u043e\u043b\u0431\u0446\u043e\u043c \u0441 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u043e\u0439 \u0438 <b>\u043f\u043e\u0434 <\/b>\u0441\u0442\u043e\u043b\u0431\u0446\u043e\u043c \u0441 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u043e\u0439<\/li>\n<li>&#8216;inside&#8217; \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 (\u0435\u0441\u043b\u0438 \u0432\u044b\u0441\u043e\u0442\u0430 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 = 0, \u0442\u043e \u043d\u0430\u0434\u043f\u0438\u0441\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u0438\u0434\u043d\u043e)<\/li>\n<li>\u0438 \u0442.\u0434.<\/li>\n<\/ul>\n<p>  <\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">labels = tuple(range(2,13))  d_grouped = dices.groupby(['\u0421\u0443\u043c\u043c\u0430']).count() clear = d_grouped['\u041a\u043e\u0441\u0442\u044c 1'].append(pd.DataFrame([0]*len(labels), index=labels)).reset_index().drop_duplicates('index').sort_values('index') values = clear[0]   d_grouped2 = dices2.groupby(['\u0421\u0443\u043c\u043c\u0430']).count() clear2 = d_grouped2['\u041a\u043e\u0441\u0442\u044c 1'].append(pd.DataFrame([0]*len(labels), index=labels)).reset_index().drop_duplicates('index').sort_values('index') values2 = clear2[0]    fig = go.Figure() fig.add_trace(go.Bar(x = labels, y = values - values2, text=values - values2, textposition='outside')) fig.update_yaxes(zeroline=True, zerolinewidth=3, zerolinecolor='red') fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   title=&quot;\u0427\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0432 \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u044f\u0445&lt;br&gt;\u043d\u0430 \u043a\u0430\u043a\u0443\u044e \u0441\u0443\u043c\u043c\u0443 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0438\u0437 100 \u0431\u0440\u043e\u0441\u043a\u043e\u0432 \u0431\u044b\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0443\u0441\u043f\u0435\u0445\u043e\u0432?&quot;,                   xaxis_title=&quot;\u0421\u0443\u043c\u043c\u0430 \u043e\u0447\u043a\u043e\u0432&quot;,                   yaxis_title=&quot;\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 \u0447\u0438\u0441\u043b\u0435 \u0438\u0441\u0445\u043e\u0434\u043e\u0432&quot;,                   margin=dict(l=0, r=0, t=50, b=0)) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/0y\/ds\/ej\/0ydsejpo2uwuvbqey86on5fy37q.png\"><\/p>\n<p>  \u0410 \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043d\u0435 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b, \u0430 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u043e\u0441\u043a\u0438?<\/p>\n<p>  \u042d\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430\u0434\u043e \u0442\u043e\u043b\u044c\u043a\u043e:<\/p>\n<ul>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 orientation=&#8217;h&#8217;<\/li>\n<li>\u041f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043c\u0435\u0441\u0442\u0430\u043c\u0438 x \u0438 y \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044f\u0445 (\u0430 \u0442\u0430\u043a \u0436\u0435 \u0432\u0435\u0437\u0434\u0435, \u0433\u0434\u0435 \u043c\u044b \u0437\u0430\u0434\u0430\u0451\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043e\u0441\u0435\u0439, \u043e\u0441\u0435\u0432\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 \u0438 \u0442.\u043f.)<\/li>\n<\/ul>\n<p>  \u0418 \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f &quot;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Tornado_diagram\" rel=\"nofollow\">\u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0442\u043e\u0440\u043d\u0430\u0434\u043e<\/a>&quot; (<i>\u0442\u0430\u043a \u0436\u0435 \u044d\u0442\u043e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u0438 \u0438\u0445 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043d\u0438\u0437\u0443<\/i>)<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">labels = tuple(range(2,13))  d_grouped = dices.groupby(['\u0421\u0443\u043c\u043c\u0430']).count() clear = d_grouped['\u041a\u043e\u0441\u0442\u044c 1'].append(pd.DataFrame([0]*len(labels), index=labels)).reset_index().drop_duplicates('index').sort_values('index') values = clear[0]   d_grouped2 = dices2.groupby(['\u0421\u0443\u043c\u043c\u0430']).count() clear2 = d_grouped2['\u041a\u043e\u0441\u0442\u044c 1'].append(pd.DataFrame([0]*len(labels), index=labels)).reset_index().drop_duplicates('index').sort_values('index') values2 = clear2[0]    fig = go.Figure() fig.add_trace(go.Bar(y = labels, x = values - values2, orientation='h', text=values - values2, textposition='outside')) fig.update_xaxes(zeroline=True, zerolinewidth=3, zerolinecolor='red') fig.update_layout(legend_orientation=&quot;h&quot;,                   legend=dict(x=.5, xanchor=&quot;center&quot;),                   title=&quot;\u0427\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0432 \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u044f\u0445&lt;br&gt;\u043d\u0430 \u043a\u0430\u043a\u0443\u044e \u0441\u0443\u043c\u043c\u0443 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0438\u0437 100 \u0431\u0440\u043e\u0441\u043a\u043e\u0432 \u0431\u044b\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0443\u0441\u043f\u0435\u0445\u043e\u0432?&quot;,                   yaxis_title=&quot;\u0421\u0443\u043c\u043c\u0430 \u043e\u0447\u043a\u043e\u0432&quot;,                   xaxis_title=&quot;\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 \u0447\u0438\u0441\u043b\u0435 \u0438\u0441\u0445\u043e\u0434\u043e\u0432&quot;,                   margin=dict(l=0, r=0, t=50, b=0)) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/px\/gw\/8p\/pxgw8pydhm81jd-is3c3phanpb4.png\"><\/p>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u043f\u0440\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c 2 \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0441\u043b\u043e\u044f \u2014 barmode=&#8217;stack&#8217;.<\/p>\n<p>  \u041e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0432 \u043e\u0431\u0449\u0438\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438. \u042d\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u0430\u043a \u0435\u0434\u0438\u043d\u0443\u044e \u0441\u0435\u0440\u0438\u044e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432, \u0442.\u0435. \u043c\u044b \u0431\u0440\u043e\u0441\u0438\u043b\u0438 100 \u0440\u0430\u0437 \u043a\u0443\u0431\u0438\u043a\u0438, \u043f\u043e\u0442\u043e\u043c \u0435\u0449\u0451 100 \u0440\u0430\u0437 \u0438 \u0445\u043e\u0442\u0438\u043c \u0443\u0437\u043d\u0430\u0442\u044c \u0447\u0442\u043e \u0432\u044b\u0448\u043b\u043e \u0432 \u0438\u0442\u043e\u0433\u0435, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043a\u0430\u043a\u0438\u0445 \u0438\u0441\u0445\u043e\u0434\u043e\u0432.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">labels = tuple(range(2,13))  d_grouped = dices.groupby(['\u0421\u0443\u043c\u043c\u0430']).count() clear = d_grouped['\u041a\u043e\u0441\u0442\u044c 1'].append(pd.DataFrame([0]*len(labels), index=labels)).reset_index().drop_duplicates('index').sort_values('index') values = clear[0]   d_grouped2 = dices2.groupby(['\u0421\u0443\u043c\u043c\u0430']).count() clear2 = d_grouped2['\u041a\u043e\u0441\u0442\u044c 1'].append(pd.DataFrame([0]*len(labels), index=labels)).reset_index().drop_duplicates('index').sort_values('index') values2 = clear2[0]   fig = go.Figure() fig.add_trace(go.Bar(x = labels, y = values)) fig.add_trace(go.Bar(x = labels, y = values2)) fig.update_layout(barmode='stack') fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/zl\/do\/c7\/zldoc7jrsw42wliq_3nq-y-alpu.png\"><\/p>\n<h3>\u042f\u0449\u0438\u043a\u0438 \u0441 \u0443\u0441\u0430\u043c\u0438 (Box Plots)<\/h3>\n<p>  \u0410 \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442? \u041f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0436\u0438\u0442\u044c \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0440\u0430\u0437\u043c\u0430\u0445\u0430 \u0438\u043b\u0438 \u00ab\u044f\u0449\u0438\u043a \u0441 \u0443\u0441\u0430\u043c\u0438\u00bb (<a href=\"https:\/\/habr.com\/ru\/post\/267123\/\">\u0441\u0441\u044b\u043b\u043a\u0430<\/a>)<\/p>\n<p>  \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u0430\u0431\u043e\u0440 100 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0441 \u0431\u0440\u043e\u0441\u043a\u0430\u043c\u0438 \u043d\u0430\u0431\u043e\u0440\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0438\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u0441\u0442\u0435\u0439. \u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 3 4-\u0433\u0440\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u0441\u0442\u0438 (3d4). \u042d\u0442\u043e \u043c\u043e\u0433\u043b\u043e \u0431\u044b \u0431\u044b\u0442\u044c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435\u043c 2 \u0438\u0433\u0440\u043e\u0432\u044b\u0445 \u043c\u0435\u0447\u0435\u0439 \u0441 \u0443\u0440\u043e\u043d\u043e\u043c 2d6 \u0438 3d4, \u043e\u0434\u043d\u0430\u043a\u043e, \u043b\u044e\u0431\u043e\u043c\u0443 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435 (\u0440\u0430\u0437\u0431\u0440\u043e\u0441 2-12 \u043f\u0440\u043e\u0442\u0438\u0432 \u0440\u0430\u0437\u0431\u0440\u043e\u0441\u0430 3-12). \u0412\u0441\u044f \u043b\u0438 \u044d\u0442\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u00ab\u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c\u00bb \u0438\u0437 \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445?<\/p>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u043d\u0435\u0442, \u0432\u0435\u0434\u044c \u0443 \u043d\u0438\u0445 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u0438 \u043c\u0435\u0440\u044b \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u0438 (\u043c\u0435\u0434\u0438\u0430\u043d\u044b \u0438\u043b\u0438 \u0441\u0440\u0435\u0434\u043d\u0438\u0435).<\/p>\n<p>  \u0414\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u044f\u0449\u0438\u043a\u043e\u0432 \u0441 \u0443\u0441\u0430\u043c\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043b\u0430\u0441\u0441 go.Box. \u0414\u0430\u043d\u043d\u044b\u0435 (\u0432\u0435\u0441\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u00ab\u0441\u0443\u043c\u043c\u00bb) \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0432 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u2014 y.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">dices4 = pd.DataFrame(np.random.randint(low=1, high=5, size=(100, 3)), columns=('\u041a\u043e\u0441\u0442\u044c 1', '\u041a\u043e\u0441\u0442\u044c 2', '\u041a\u043e\u0441\u0442\u044c 4')) dices4['\u0421\u0443\u043c\u043c\u0430'] = dices4['\u041a\u043e\u0441\u0442\u044c 1'] + dices4['\u041a\u043e\u0441\u0442\u044c 2'] + dices4['\u041a\u043e\u0441\u0442\u044c 4']  fig = go.Figure() fig.add_trace(go.Box(y=dices['\u0421\u0443\u043c\u043c\u0430'])) fig.add_trace(go.Box(y=dices4['\u0421\u0443\u043c\u043c\u0430'])) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/vn\/rp\/0f\/vnrp0fxlevgv04fkbgt9xp7mkqi.png\"><br \/>  \u041d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043a\u0442\u043e \u0435\u0441\u0442\u044c \u043a\u0442\u043e.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041d\u0443 \u0438\u043b\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e<\/b>                         <\/p>\n<div class=\"spoiler_text\"><i>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435. \u0422.\u043a. \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c random, \u0442\u043e \u0432 \u0432\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0435 \u0442\u0430\u043a\u043e\u0439, \u043a\u0430\u043a \u0443 \u043c\u0435\u043d\u044f \u043f\u0440\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438, \u043e\u0434\u043d\u0430\u043a\u043e \u0437\u0430\u0431\u0430\u0432\u043d\u043e, \u0447\u0442\u043e \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u0436\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0432\u043e\u0442 \u0442\u0430\u043a\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443:<\/i><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/q6\/kj\/va\/q6kjva_tuw3jkyrk7gqbw9pvnow.png\"><\/p>\n<p>  <i>\u0422\u0443\u0442 \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u00ab\u0443\u0441\u044b\u00bb \u043b\u0435\u0432\u043e\u0433\u043e \u044f\u0449\u0438\u043a\u0430 \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0437\u043c\u0430\u0445 2-12, \u0437\u043d\u0430\u0447\u0438\u0442, \u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c 2d6. \u041d\u043e \u0437\u0430\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0445\u043e\u0442\u044f \u043d\u0438\u0436\u043d\u044f\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u00ab\u0443\u0441\u044b\u00bb \u0432\u044b\u0448\u0435 \u043b\u0435\u0432\u043e\u0433\u043e, \u043d\u043e \u0438 \u0432\u0435\u0440\u0445\u043d\u044f\u044f \u043d\u0438\u0436\u0435! \u042d\u0442\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e 100 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0438 \u043c\u043d\u043e\u0433\u043e, \u0430 \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0441\u0440\u0430\u0437\u0443 3 \u0447\u0435\u0442\u0432\u0451\u0440\u043a\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e. \u0418 \u043c\u0435\u0434\u0438\u0430\u043d\u044b \u0443 \u043d\u0438\u0445 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435. \u0412\u044b\u0445\u043e\u0434\u0438\u0442, \u043d\u0430\u0448\u0435 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043e\u0440\u0443\u0436\u0438\u044f \u0441 \u0443\u0440\u043e\u043d\u043e\u043c 3d4 \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u044b\u043c \u043b\u0438\u0448\u044c \u043f\u043e \u0443\u0440\u043e\u0432\u043d\u044e 25% \u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044f \u2014 \u043e\u043d \u044f\u0432\u043d\u043e \u0432\u044b\u0448\u0435 \u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435. \u0422.\u0435. \u00ab\u044f\u0449\u0438\u043a \u0441 \u0443\u0441\u0430\u043c\u0438\u00bb \u0432\u0441\u0451 \u0436\u0435 \u0434\u0430\u043b \u043d\u0430\u043c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043b\u0435\u0433\u043a\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0438 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0439 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/i>  <\/div>\n<\/p><\/div>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e, \u043a\u0430\u043a \u0438 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u0438\u0433\u0443\u0440, \u0442\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u0438.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Box(y=dices['\u0421\u0443\u043c\u043c\u0430'], name='2d6')) fig.add_trace(go.Box(y=dices4['\u0421\u0443\u043c\u043c\u0430'], name='3d4')) fig.update_layout(title=&quot;\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0439 \u043f\u043e 100 \u0431\u0440\u043e\u0441\u043a\u043e\u0432 \u0438\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u0441\u0442\u0435\u0439&quot;,                   xaxis_title=&quot;\u0412\u0438\u0434 \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0439&quot;,                   yaxis_title=&quot;\u0421\u0443\u043c\u043c\u0430 \u043e\u0447\u043a\u043e\u0432&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/we\/si\/lh\/wesilhyeiv1xecnq525r9dxws6a.png\"><\/p>\n<p>  \u0418\u043d\u043e\u0433\u0434\u0430 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u044f\u0449\u0438\u043a\u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u044b (\u043b\u0438\u0431\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0441\u043d\u0438\u0437\u0443), \u0442\u043e\u0433\u0434\u0430 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u00ab\u043d\u0430 \u0431\u043e\u043a\u00bb \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u0441 \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u0441\u0442\u043e\u043b\u0431\u0447\u0430\u0442\u044b\u043c\u0438 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Box(x=dices['\u0421\u0443\u043c\u043c\u0430'], name='2d6')) fig.add_trace(go.Box(x=dices4['\u0421\u0443\u043c\u043c\u0430'], name='3d4')) fig.update_layout(title=&quot;\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0439 \u043f\u043e 100 \u0431\u0440\u043e\u0441\u043a\u043e\u0432 \u0438\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u0441\u0442\u0435\u0439&quot;,                   yaxis_title=&quot;\u0412\u0438\u0434 \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0439&quot;,                   xaxis_title=&quot;\u0421\u0443\u043c\u043c\u0430 \u043e\u0447\u043a\u043e\u0432&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/2q\/_i\/yu\/2q_iyuqrwjlwzsjanotbcbb8wvy.png\"><\/p>\n<p>  \u0418\u043d\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044f\u0449\u0438\u043a\u0430 \u0441 \u0443\u0441\u0430\u043c\u0438 \u0442\u0430\u043a \u0436\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u043e\u0431\u043b\u0430\u043a\u043e \u0442\u043e\u0447\u0435\u043a, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435. \u042d\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 boxpoints=&#8217;all&#8217;<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure() fig.add_trace(go.Box(x=dices['\u0421\u0443\u043c\u043c\u0430'], name='2d6', boxpoints='all')) fig.add_trace(go.Box(x=dices4['\u0421\u0443\u043c\u043c\u0430'], name='3d4', boxpoints='all')) fig.update_layout(title=&quot;\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0439 \u043f\u043e 100 \u0431\u0440\u043e\u0441\u043a\u043e\u0432 \u0438\u0433\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u0441\u0442\u0435\u0439&quot;,                   yaxis_title=&quot;\u0412\u0438\u0434 \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0439&quot;,                   xaxis_title=&quot;C\u0443\u043c\u043c\u0430 \u043e\u0447\u043a\u043e\u0432&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/br\/uj\/pq\/brujpqegmoo9f4dgmchrtjwudt4.png\"><\/p>\n<h3>\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u0430\u0440\u0442\u044b<\/h3>\n<p>  Plotly \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0435\u043b\u0438\u043a\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0438\u0434\u043e\u0432 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439, \u043e\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0432\u0441\u0435 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 \u043e\u0434\u043d\u043e\u043c \u043e\u0431\u0437\u043e\u0440\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0442\u0440\u0443\u0434\u043d\u043e (\u0438 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e, \u0442.\u043a. \u043e\u0431\u0449\u0438\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u0445\u043e\u0436\u0438 \u0441 \u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c\u0438)<\/p>\n<p>  \u041f\u043e\u043b\u0435\u0437\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u043b\u0438\u0448\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0445 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u00ab\u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432\u00bb \u2014 Scattermapbox \u2014 \u0433\u0435\u043e\u043a\u0430\u0440\u0442\u044b.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0437\u044c\u043c\u0451\u043c CSV \u0441 1117 \u043d\u0430\u0441\u0435\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u043f\u0443\u043d\u043a\u0442\u0430\u043c\u0438 \u0420\u0424 \u0438 \u0438\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 (\u0444\u0430\u0439\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 <a href=\"https:\/\/github.com\/hflabs\/city\/blob\/master\/city.csv\" rel=\"nofollow\">github.com\/hflabs\/city\/blob\/master\/city.csv<\/a>) \u2014 &#8216;https:\/\/raw.githubusercontent.com\/hflabs\/city\/master\/city.csv.<\/p>\n<p>  \u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u043c go.Scattermapbox \u0438 2 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438:<\/p>\n<ul>\n<li>lat (\u0448\u0438\u0440\u043e\u0442\u0430)<\/li>\n<li>lon (\u0434\u043e\u043b\u0433\u043e\u0442\u0430)<\/li>\n<\/ul>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c OSM \u043a\u0430\u0440\u0442\u0443, \u0442.\u043a. Scattermapbox \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0432\u0438\u0434\u0430\u043c\u0438 \u043a\u0430\u0440\u0442:<\/p>\n<pre><code class=\"python\">fig.update_layout(mapbox_style=&quot;open-street-map&quot;)<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">cities = pd.read_csv('https:\/\/raw.githubusercontent.com\/hflabs\/city\/master\/city.csv') fig = go.Figure(go.Scattermapbox(lat=cities['geo_lat'], lon=cities['geo_lon'])) fig.update_layout(mapbox_style=&quot;open-street-map&quot;) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/a5\/tq\/_9\/a5tq_9-wmq6u0sisvmdqvsqz_ac.png\"><\/p>\n<p>  \u041a\u0430\u043a-\u0442\u043e \u043a\u0440\u0438\u0432\u043e, \u043f\u0440\u0430\u0432\u0434\u0430? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0432\u0438\u043d\u0435\u043c \u0446\u0435\u043d\u0442\u0440 \u043a\u0430\u0440\u0442\u044b \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043f\u0440\u0438\u0448\u0451\u043b\u0441\u044f \u043d\u0430 \u0441\u0442\u043e\u043b\u0438\u0446\u0443 \u043d\u0430\u0448\u0435\u0439 \u0440\u043e\u0434\u0438\u043d\u044b (\u0432\u0435\u0440\u043d\u0435\u0435 \u0441\u0442\u043e\u043b\u0438\u0446\u0443 \u0440\u043e\u0434\u0438\u043d\u044b \u0430\u0432\u0442\u043e\u0440\u0430 \u044d\u0442\u0438\u0445 \u0441\u0442\u0440\u043e\u043a, \u0442.\u043a. \u0443 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u0440\u043e\u0434\u0438\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u043d\u043e\u0439).<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 go.layout.mapbox.Center \u0438\u043b\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441 2 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438:<\/p>\n<ul>\n<li>lat<\/li>\n<li>lon<\/li>\n<\/ul>\n<p>  \u042d\u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\/\u0441\u043b\u043e\u0432\u0430\u0440\u044c \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 center \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u0432\u043d\u0443\u0442\u0440\u044c mapbox:<\/p>\n<pre><code class=\"python\">fig.update_layout(     mapbox=dict(         center=dict(             lat=...,             lon=...         )     ) )<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure(go.Scattermapbox(lat=cities['geo_lat'], lon=cities['geo_lon'])) capital = cities[cities['region']=='\u041c\u043e\u0441\u043a\u0432\u0430'] map_center = go.layout.mapbox.Center(lat=capital['geo_lat'].values[0], lon=capital['geo_lon'].values[0]) # \u0410\u043d\u0430\u043b\u043e\u0433 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u043e\u0432\u0430\u0440\u044f #map_center =                   dict(lat=capital['geo_lat'].values[0], lon=capital['geo_lon'].values[0])  fig.update_layout(mapbox_style=&quot;open-street-map&quot;, mapbox=dict(center=map_center)) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ff\/dv\/uo\/ffdvuomukii941tj0iv8k-x_bpg.png\"><\/p>\n<p>  \u041d\u0435\u043f\u043b\u043e\u0445\u043e, \u043d\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u043c\u0435\u043b\u043a\u043e\u0432\u0430\u0442 (\u043f\u043e \u0441\u0443\u0442\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0440\u0442\u0430 \u043c\u0438\u0440\u0430 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 1\/6 \u0447\u0430\u0441\u0442\u044c \u0441\u0443\u0448\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0451 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e).<\/p>\n<p>  \u0411\u0435\u0437 \u0443\u0449\u0435\u0440\u0431\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u043b\u0435\u0433\u043a\u0430 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 zoom=2<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure(go.Scattermapbox(lat=cities['geo_lat'], lon=cities['geo_lon'])) capital = cities[cities['region']=='\u041c\u043e\u0441\u043a\u0432\u0430'] map_center = go.layout.mapbox.Center(lat=capital['geo_lat'].values[0], lon=capital['geo_lon'].values[0]) fig.update_layout(mapbox_style=&quot;open-street-map&quot;,                   mapbox=dict(center=map_center, zoom=2)) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/78\/hu\/d8\/78hud8s_jkybw-itg8ixwwhixk0.png\"><\/p>\n<p>  <i>\u0423\u0432\u044b, \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u043f\u043e\u043f\u0430\u043b\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0415\u0432\u0440\u043e\u043f\u044b \u0431\u0435\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u043e \u043e\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u0430\u043b\u044c\u043d\u0435\u0433\u043e \u0432\u043e\u0441\u0442\u043e\u043a\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0446\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u043f\u043e \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0446\u0435\u043d\u0442\u0440\u0443 \u0441\u0442\u0440\u0430\u043d\u044b (\u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043c \u0435\u0433\u043e \u0432\u0435\u0441\u044c\u043c\u0430 \u00ab\u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u00bb).<\/i><\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure(go.Scattermapbox(lat=cities['geo_lat'], lon=cities['geo_lon']))  map_center = go.layout.mapbox.Center(lat=(cities['geo_lat'].max()+cities['geo_lat'].min())\/2,                                       lon=(cities['geo_lon'].max()+cities['geo_lon'].min())\/2) fig.update_layout(mapbox_style=&quot;open-street-map&quot;,                   mapbox=dict(center=map_center, zoom=2)) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ec\/zq\/zh\/eczqzhteu9g5wtgcpzqg5w64uoe.png\"><\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0433\u043e\u0440\u043e\u0434\u043e\u0432. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 text.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\"><i>\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043d\u0430\u0441\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432 (\u0433\u043e\u0440\u043e\u0434\u0430 \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f) \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043d\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u043f\u043e\u043b\u0435 city, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043d\u0438\u0445 \u043c\u044b \u0435\u0433\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u0438\u0437 address. \u041d\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u043e, \u043d\u043e \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e \u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0442\u0430.<\/i><\/p>\n<pre><code class=\"python\">cities.loc[cities['city'].isna(), 'city'] = cities.loc[cities['city'].isna(), 'address']  fig = go.Figure(go.Scattermapbox(lat=cities['geo_lat'], lon=cities['geo_lon'], text=cities['city'])) map_center = go.layout.mapbox.Center(lat=(cities['geo_lat'].max()+cities['geo_lat'].min())\/2,                                       lon=(cities['geo_lon'].max()+cities['geo_lon'].min())\/2) fig.update_layout(mapbox_style=&quot;open-street-map&quot;,                   mapbox=dict(center=map_center, zoom=2)) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ff\/zb\/fs\/ffzbfsvsfn4cdiaacryu9w6mqri.png\"><\/p>\n<p>  \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u043a\u0430\u043a \u043c\u044b \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u043b\u0438 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432. \u0422\u0443\u0442 \u0442\u0430\u043a \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u0430\u0440\u043a\u0435\u0440\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0442 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0447\u0435\u0441\u0442\u044c 2 \u043c\u043e\u043c\u0435\u043d\u0442\u0430:<\/p>\n<ul>\n<li>\u0414\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043c\u0443\u0441\u043e\u0440\u0435\u043d\u044b. \u041d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0433\u043e\u0440\u043e\u0434\u043e\u0432 \u0438\u043c\u0435\u0435\u0442 \u0432\u0438\u0434 96[3]. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043b\u043e\u043d\u043a\u0430 \u0441 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0435 \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u0430\u044f \u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u044d\u0442\u043e\u0442 \u043c\u0443\u0441\u043e\u0440 \u043e\u0431\u043d\u0443\u043b\u0438\u0442, \u043b\u0438\u0431\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u043a\u0430\u043a\u043e\u043c\u0443-\u0442\u043e \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u043c\u0443 \u0432\u0438\u0434\u0443.<\/li>\n<li>\u0420\u0430\u0437\u043c\u0435\u0440 \u043c\u0430\u0440\u043a\u0435\u0440\u0430 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445. \u0418 15 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u2014 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0434\u0438\u0430\u043c\u0435\u0442\u0440. \u041f\u043e\u0442\u043e\u043c\u0443 \u0440\u0430\u0437\u0443\u043c\u043d\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0443\u043b\u0443, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c.<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">def to_int_size(value):     try:         return np.log10(int(value))     except:         return np.log10(int(value.split('[')[0]))  fig = go.Figure(go.Scattermapbox(lat=cities['geo_lat'],                                   lon=cities['geo_lon'],                                   text=cities['city'],                                  marker=dict(size=cities['population'].map(to_int_size)))) map_center = go.layout.mapbox.Center(lat=(cities['geo_lat'].max()+cities['geo_lat'].min())\/2,                                       lon=(cities['geo_lon'].max()+cities['geo_lon'].min())\/2) fig.update_layout(mapbox_style=&quot;open-street-map&quot;,                   mapbox=dict(center=map_center, zoom=2)) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/qy\/gx\/ev\/qygxevfjkt2l84ekdpr-qo71b38.png\"><\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0446\u0432\u0435\u0442\u043e\u0432\u0443\u044e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0433\u043e\u0434\u0435 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f. \u0422.\u043a. \u043d\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0433\u043e\u0440\u043e\u0434\u043e\u0432 \u043e\u043d \u0442\u043e\u0447\u043d\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d (\u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443\u043a\u0430\u0437\u0430\u043d \u0432\u0435\u043a, \u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0438\u043c\u0441\u043a\u0438\u043c\u0438, \u0430 \u043d\u0435 \u0430\u0440\u0430\u0431\u0441\u043a\u0438\u043c\u0438 \u0446\u0438\u0444\u0440\u0430\u043c\u0438), \u0442\u043e \u043c\u044b \u0442\u0430\u043a \u0436\u0435 \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d\u044b \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0433\u043e\u0434\u043e\u0432, \u043d\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u0432\u0441\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c None \u0438 \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0434\u0430\u043b\u0438\u043c \u0432\u0441\u0435 \u0442\u0430\u043a\u0438\u0435 \u0433\u043e\u0440\u043e\u0434\u0430.<\/p>\n<p>  <i>\u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, np.NaN, \u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u0442\u0435\u043f\u043b\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u044d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b\u043c\u0438 0 \u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u043d\u0430\u0441\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u043f\u0443\u043d\u043a\u0442\u044b \u043e\u0434\u043d\u0438\u043c\u0438 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0441\u0442\u0430\u0440\u044b\u0445 \u0432 \u0441\u0442\u0440\u0430\u043d\u0435)<\/i><\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">def to_int_year(value):     try:         return int(value)     except:         return None  cities['foundation_year'] = cities['foundation_year'].map(to_int_year) cities = cities[['region', 'city', 'geo_lat', 'geo_lon', 'foundation_year', 'population']].dropna()  fig = go.Figure(go.Scattermapbox(lat=cities['geo_lat'],                                   lon=cities['geo_lon'],                                   text=cities['city'],                                  marker=dict(colorbar=dict(title=&quot;\u0413\u043e\u0434 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f&quot;),                                              color=cities['foundation_year'],                                              size=cities['population'].map(to_int_size)))) map_center = go.layout.mapbox.Center(lat=(cities['geo_lat'].max()+cities['geo_lat'].min())\/2,                                       lon=(cities['geo_lon'].max()+cities['geo_lon'].min())\/2) fig.update_layout(mapbox_style=&quot;open-street-map&quot;,                   mapbox=dict(center=map_center, zoom=2)) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/qg\/ji\/ru\/qgjirujyailqbji3jzyowiqk9so.png\"><\/p>\n<p>  \u0410 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043d\u0430\u043d\u0435\u0441\u0442\u0438 \u043b\u0438\u043d\u0438\u044e? \u0411\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c!<\/p>\n<p>  \u0412\u043e\u0437\u044c\u043c\u0451\u043c \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u043d\u0430 \u0438\u043c\u0435\u044e\u0449\u0443\u044e\u0441\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e 2 \u0442\u043e\u0447\u043a\u0438: \u041c\u043e\u0441\u043a\u0432\u0443 \u0438 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433.<\/p>\n<p>  \u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 mode = \u00ablines\u00bb (\u0443 \u043d\u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u00abmarkers+lines\u00bb), \u043d\u043e \u043c\u044b \u0443\u0436\u0435 \u0432\u044b\u0432\u0435\u043b\u0438 \u043c\u0435\u0442\u043a\u0443 \u0433\u043e\u0440\u043e\u0434\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0435 \u0445\u043e\u0442\u0438\u043c \u0435\u0451 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>  \u041d\u0435 \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043d\u0430 \u044d\u0442\u043e\u0442 \u043d\u043e\u0432\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u0431\u0438\u0432\u0430\u043b\u0430 \u044d\u0444\u0444\u0435\u043a\u0442 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438. hoverinfo=&#8217;skip&#8217;<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure(go.Scattermapbox(lat=cities['geo_lat'],                                   lon=cities['geo_lon'],                                   text=cities['city'],                                  marker=dict(colorbar=dict(title=&quot;\u0413\u043e\u0434 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f&quot;),                                              color=cities['foundation_year'].map(to_int_year),                                              size=cities['population'].map(to_int_size)))) fig.add_trace(go.Scattermapbox(mode = &quot;lines&quot;,                                hoverinfo='skip',                                lat=cities[cities['region'].isin(['\u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433', '\u041c\u043e\u0441\u043a\u0432\u0430'])]['geo_lat'],                                lon=cities[cities['region'].isin(['\u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433', '\u041c\u043e\u0441\u043a\u0432\u0430'])]['geo_lon']))      map_center = go.layout.mapbox.Center(lat=(cities['geo_lat'].max()+cities['geo_lat'].min())\/2,                                       lon=(cities['geo_lon'].max()+cities['geo_lon'].min())\/2) fig.update_layout(mapbox_style=&quot;open-street-map&quot;,                   mapbox=dict(center=map_center, zoom=2)) fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/8y\/4y\/fl\/8y4yfl9uhzbhy8q_rzt2t1qdoe8.png\"><\/p>\n<p>  \u041e\u0445, \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043e\u0441\u043a\u0430 \u0442\u0435\u043f\u043b\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u043d\u0430\u043b\u043e\u0436\u0438\u043b\u0430\u0441\u044c \u043d\u0430 \u043b\u0435\u0433\u0435\u043d\u0434\u0443. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u043b\u0435\u0433\u0435\u043d\u0434\u0430 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0434\u043b\u044f \u0442\u043e\u0447\u0435\u043a-\u0433\u043e\u0440\u043e\u0434\u043e\u0432 \u0438 \u043b\u0438\u043d\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u041c\u043e\u0441\u043a\u0432\u043e\u0439 \u0438 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u043e\u043c.<\/p>\n<ol>\n<li>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043c \u043b\u0435\u0433\u0435\u043d\u0434\u0443 \u0432 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c legend_orientation=\u00abh\u00bb (\u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0441\u043b\u043e\u044f)<\/li>\n<li>\u00ab\u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u0435\u043c\u00bb \u043b\u0435\u0433\u0435\u043d\u0434\u044b \u0432\u043c\u0435\u0441\u0442\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0433\u0440\u0443\u043f\u043f\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 legendgroup=\u00abgroup\u00bb (\u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u043b\u0438\u0448\u044c \u0431\u044b \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0443 \u0447\u043b\u0435\u043d\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b).<\/li>\n<\/ol>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure(go.Scattermapbox(legendgroup=&quot;group&quot;,                                  lat=cities['geo_lat'],                                   lon=cities['geo_lon'],                                   text=cities['city'],                                  marker=dict(colorbar=dict(title=&quot;\u0413\u043e\u0434 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f&quot;),                                              color=cities['foundation_year'].map(to_int_year),                                              size=cities['population'].map(to_int_size)))) fig.add_trace(go.Scattermapbox(legendgroup=&quot;group&quot;,                                mode = &quot;lines&quot;,                                hoverinfo='skip',                                lat=cities[cities['region'].isin(['\u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433', '\u041c\u043e\u0441\u043a\u0432\u0430'])]['geo_lat'],                                lon=cities[cities['region'].isin(['\u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433', '\u041c\u043e\u0441\u043a\u0432\u0430'])]['geo_lon']))      map_center = go.layout.mapbox.Center(lat=(cities['geo_lat'].max()+cities['geo_lat'].min())\/2,                                       lon=(cities['geo_lon'].max()+cities['geo_lon'].min())\/2) fig.update_layout(legend_orientation=&quot;h&quot;,                   mapbox_style=&quot;open-street-map&quot;,                   mapbox=dict(center=map_center, zoom=2))  fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ng\/tw\/rx\/ngtwrxgsty-kwez6usnvqy5anok.png\"><\/p>\n<p>  \u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043d\u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0443\u0431\u0435\u0440\u0451\u043c \u0438\u0437 \u043b\u0435\u0433\u0435\u043d\u0434\u044b \u00ab\u043b\u0438\u0448\u043d\u0438\u0439\u00bb \u044d\u043b\u0435\u043c\u0435\u043d\u0442 (\u043b\u0438\u043d\u0438\u044e \u0433\u043e\u0440\u043e\u0434\u043e\u0432) showlegend=False<\/p>\n<p>  \u0410 \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u0434\u043f\u0438\u0448\u0435\u043c \u043b\u0435\u0433\u0435\u043d\u0434\u0443 \u0434\u043b\u044f \u0433\u043e\u0440\u043e\u0434\u043e\u0432.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">fig = go.Figure(go.Scattermapbox(legendgroup=&quot;group&quot;,                                  name='\u0413\u043e\u0440\u043e\u0434\u0430 \u0420\u043e\u0441\u0441\u0438\u0438',                                  lat=cities['geo_lat'],                                   lon=cities['geo_lon'],                                   text=cities['city'],                                  marker=dict(colorbar=dict(title=&quot;\u0413\u043e\u0434 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f&quot;),                                              color=cities['foundation_year'].map(to_int_year),                                              size=cities['population'].map(to_int_size)))) fig.add_trace(go.Scattermapbox(legendgroup=&quot;group&quot;,                                showlegend=False,                                mode = &quot;lines&quot;,                                hoverinfo='skip',                                lat=cities[cities['region'].isin(['\u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433', '\u041c\u043e\u0441\u043a\u0432\u0430'])]['geo_lat'],                                lon=cities[cities['region'].isin(['\u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433', '\u041c\u043e\u0441\u043a\u0432\u0430'])]['geo_lon']))      map_center = go.layout.mapbox.Center(lat=(cities['geo_lat'].max()+cities['geo_lat'].min())\/2,                                       lon=(cities['geo_lon'].max()+cities['geo_lon'].min())\/2) fig.update_layout(legend_orientation=&quot;h&quot;,                   mapbox_style=&quot;open-street-map&quot;,                   mapbox=dict(center=map_center, zoom=2))  fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/1r\/se\/yp\/1rseyp69de3mkftz7ztoke98mc0.png\"><\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u043c \u043f\u043e\u0435\u0437\u0434\u0430 \u2116002\u041c \u00ab\u0420\u043e\u0441\u0441\u0438\u044f\u00bb \u041c\u043e\u0441\u043a\u0432\u0430-\u0412\u043b\u0430\u0434\u0438\u0432\u043e\u0441\u0442\u043e\u043a (<a href=\"https:\/\/pass.rzd.ru\/timetable\/public\/ru?STRUCTURE_ID=735&amp;layer_id=5370&amp;refererLayerId=5354&amp;train_num=002MJ&amp;numtrain=002%D0%9C&amp;src_code=2000000&amp;departureDate=01.06.2014&amp;firstStation=%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B0%20%D0%AF%D1%80&amp;lastStation=%D0%92%D0%BB%D0%B0%D0%B4%D0%B8%D0%B2%D0%BE%D1%81%D1%82\" rel=\"nofollow\">\u0441\u0430\u0439\u0442 \u0420\u0416\u0414<\/a>)<\/p>\n<p>  \u042f \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0441 \u0433\u043e\u0440\u043e\u0434\u0430\u043c\u0438, \u043d\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0435, \u0440\u0430\u0437\u0431\u0438\u0442\u043e\u043c \u043f\u043e \u0434\u043d\u044f\u043c. \u042d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u0430\u044f \u0440\u0430\u0437\u0431\u0438\u0432\u043a\u0430, \u0442.\u043a. \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043c\u043e\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0434\u043b\u044f \u043e\u0446\u0435\u043d\u043a\u0430 \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u0440\u0438\u0435\u0434\u0435\u0442\u0435 \u043a \u043b\u044e\u0431\u0438\u043c\u043e\u0439 \u0442\u0451\u0449\u0435 \u0432 \u0433\u043e\u0441\u0442\u0438. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u043f\u043e\u0435\u0437\u0434\u0430 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0430 \u0432 \u043d\u0430\u0448\u0435\u0439 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0433\u043e\u0440\u043e\u0434\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0438 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u0430. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u043e\u0440\u043e\u0434\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u044b 2 \u0440\u0430\u0437\u0430, \u0442.\u043a. \u043e\u043d\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u043d\u0435\u0432\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0433\u043e\u043d\u0430 \u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0434\u043d\u0435\u0432\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0433\u043e\u043d\u0430.<\/p>\n<p>  <i>\u041d\u0430\u0448 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0433\u043e\u0440\u043e\u0434\u0430, \u0430 \u043d\u0435 \u0432\u043e\u043a\u0437\u0430\u043b\u044b, \u0442\u0430\u043a \u0436\u0435 \u043e\u043d \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0439 \u0434\u043e\u0440\u043e\u0433\u043e\u0439. \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430, \u0430 \u043d\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438!<\/i><\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">train_russia = pd.read_csv('https:\/\/gist.githubusercontent.com\/lexnekr\/2da07b5fc12b5be24068e4d68ed47ca5\/raw\/d6256765a3223282fbfec7e0b040cbfb21593fff\/train_russia.scv')  fig = go.Figure(go.Scattermapbox(legendgroup=&quot;group&quot;,                                  name='\u0413\u043e\u0440\u043e\u0434\u0430 \u0420\u043e\u0441\u0441\u0438\u0438',                                  lat=cities['geo_lat'],                                   lon=cities['geo_lon'],                                   text=cities['city'],                                  marker=dict(colorbar=dict(title=&quot;\u0413\u043e\u0434 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f&quot;),                                              color=cities['foundation_year'].map(to_int_year),                                              size=cities['population'].map(to_int_size))))  for df_for_today in train_russia.groupby(['day number']):     fig.add_trace(go.Scattermapbox(name='\u0414\u0435\u043d\u044c {}'.format(df_for_today[0]),                                    mode = &quot;lines&quot;,                                    hoverinfo='skip',                                    lat=df_for_today[1]['geo_lat'],                                    lon=df_for_today[1]['geo_lon']))      map_center = go.layout.mapbox.Center(lat=(cities['geo_lat'].max()+cities['geo_lat'].min())\/2,                                       lon=(cities['geo_lon'].max()+cities['geo_lon'].min())\/2) fig.update_layout(title='\u041f\u043e \u0420\u043e\u0441\u0441\u0438\u0438 \u043d\u0430 \u043f\u043e\u0435\u0437\u0434\u0435',                   legend_orientation=&quot;h&quot;,                   mapbox_style=&quot;open-street-map&quot;,                   mapbox=dict(center=map_center, zoom=2))  fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/lg\/tk\/eo\/lgtkeo8emylokn85fta1d3ewn_a.png\"><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u043f\u043e \u0434\u043d\u044f\u043c, \u0442\u043e \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u0438\u0451\u043c, \u0447\u0442\u043e \u0438 \u0440\u0430\u043d\u0435\u0435 \u0441 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u2014 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0432\u0441\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0438\u043b\u0438 \u0438\u0445 \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0438 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u043c\u0438, \u0430 \u043f\u043e\u0442\u043e\u043c \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0444\u0440\u0435\u0439\u043c\u0435 \u0438 \u0448\u0430\u0433\u0435 \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u0430 \u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0445 \u0432\u0438\u0434\u0438\u043c\u044b\u043c\u0438.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">data = [go.Scattermapbox(legendgroup=&quot;group&quot;,                          name='\u0413\u043e\u0440\u043e\u0434\u0430 \u0420\u043e\u0441\u0441\u0438\u0438',                          lat=cities['geo_lat'],                           lon=cities['geo_lon'],                          text=cities['city'],                          marker=dict(colorbar=dict(title=&quot;\u0413\u043e\u0434 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f&quot;),                                      color=cities['foundation_year'].map(to_int_year),                                      size=cities['population'].map(to_int_size)))] for df_for_today in train_russia.groupby(['day number']):     data.append(go.Scattermapbox(visible=False,                                  name='\u0414\u0435\u043d\u044c {}'.format(df_for_today[0]),                                  mode = &quot;lines&quot;,                                  hoverinfo='skip',                                  lat=df_for_today[1]['geo_lat'],                                  lon=df_for_today[1]['geo_lon']))        fig = go.Figure(data)  frames=[] for i in range(len(data)+1):     temp_frame = go.Frame(name=str(i), data=data)      for j in range(1, i):         temp_frame['data'][j]['visible']=True               frames.append(temp_frame)  steps = [] for i in range(len(data)):     step = dict(         label = str(i),         method = &quot;animate&quot;,         args = [[str(i+1)]]     )     steps.append(step)  sliders = [dict(     currentvalue = {&quot;prefix&quot;: &quot;\u0414\u0435\u043d\u044c \u2116&quot;, &quot;font&quot;: {&quot;size&quot;: 20}},     len = 0.9,     x = 0.1,     pad = {&quot;b&quot;: 10, &quot;t&quot;: 50},     steps = steps, )]  map_center = go.layout.mapbox.Center(lat=(cities['geo_lat'].max()+cities['geo_lat'].min())\/2,                                       lon=(cities['geo_lon'].max()+cities['geo_lon'].min())\/2) fig.update_layout(title='\u041f\u043e \u0420\u043e\u0441\u0441\u0438\u0438 \u043d\u0430 \u043f\u043e\u0435\u0437\u0434\u0435',                   legend_orientation=&quot;h&quot;,                   mapbox_style=&quot;open-street-map&quot;,                   mapbox=dict(center=map_center, zoom=2),                   updatemenus=[dict(direction=&quot;left&quot;,                                     pad = {&quot;r&quot;: 10, &quot;t&quot;: 80},                                     x = 0.1,                                     xanchor = &quot;right&quot;,                                     y = 0,                                     yanchor = &quot;top&quot;,                                     showactive=False,                                     type=&quot;buttons&quot;,                                      buttons=[dict(label=&quot;\u25ba&quot;, method=&quot;animate&quot;, args=[None, {&quot;fromcurrent&quot;: True}]),                                              dict(label=&quot;\u275a\u275a&quot;, method=&quot;animate&quot;, args=[[None], {&quot;frame&quot;: {&quot;duration&quot;: 0, &quot;redraw&quot;: False},                                                                                                &quot;mode&quot;: &quot;immediate&quot;,                                                                                                &quot;transition&quot;: {&quot;duration&quot;: 0}}])])],                   )   fig.layout.sliders = sliders fig.frames = frames    fig.show()<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/d7\/_u\/9h\/d7_u9h4mpcfqhkve5cvbwjr9zkc.png\"><\/p>\n<p>  \u0411\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435 \u0432\u0438\u0434\u044b \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 Plotly. \u041e\u0434\u043d\u0430\u043a\u043e, \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0432\u0441\u0435 \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442.<\/p>\n<p>  \u0421 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0442\u0443\u0442 \u2014 <a href=\"https:\/\/plotly.com\/python\/\" rel=\"nofollow\">plotly.com\/python<\/a> (\u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b, \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u00abMore &#8230;\u00bb<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/502958\/\"> https:\/\/habr.com\/ru\/post\/502958\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/502958\/\">Plotly \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u0435\u0439:<\/p>\n<ul>\n<li>Front-End \u043d\u0430 JS<\/li>\n<li>Back-End \u043d\u0430 Python (\u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u0432\u0437\u044f\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Seaborn)<\/li>\n<li>Back-End \u043d\u0430 R<\/li>\n<\/ul>\n<p>  <i>\u0412 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u044b\u043d\u0435 \u0432\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u044b \u043e\u0442 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043a \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c, \u0442\u0430\u043a \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0441 \u043e\u043f\u044b\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u0443\u0447\u043d\u043e. \u0422\u0430\u043a \u0436\u0435 \u044d\u0442\u0430 \u00ab\u0448\u043f\u0430\u0440\u0433\u0430\u043b\u043a\u0430\u00bb \u043d\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u0442 \u043d\u0430 100% \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. <\/i><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/o2\/jn\/nm\/o2jnnmubbn2dcgsw1nsib2ksee4.gif\"><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-304188","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/304188","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=304188"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/304188\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=304188"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=304188"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=304188"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}