{"id":1336,"date":"2025-12-17T20:07:39","date_gmt":"2025-12-17T17:07:39","guid":{"rendered":"http:\/\/api-sport.pro\/?p=1336"},"modified":"2025-12-17T20:07:39","modified_gmt":"2025-12-17T17:07:39","slug":"how-to-interpret-the-pressure-momentum-and-shot-quality-graphs","status":"publish","type":"post","link":"https:\/\/api-sport.pro\/es\/how-to-interpret-the-pressure-momentum-and-shot-quality-graphs\/","title":{"rendered":"How to interpret the pressure, momentum, and shot-quality graphs?"},"content":{"rendered":"<div class=\"table-of-contents\">\n<div class=\"table-of-contents-title\">Contenidos<\/div>\n<ul class=\"table-of-contents-ul\">\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-1\">What are pressure graphs in football and how to read them<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-2\">Momentum metric in football: what it is and how the graph is constructed<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-3\">Shot-quality and xG in football: how to interpret the quality of shots from the graph<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-4\">How to assess a team\u2019s advantage during the match using pressure and momentum graphs<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-5\">What data on pressure, momentum, and shot-quality can be obtained through the sports statistics API<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-6\">How to use the sports events API for visualizing and analyzing pressure, momentum, and shot-quality graphs<\/a><\/li>\n<\/ul>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-1\">What are pressure graphs in football and how to read them<\/h2>\n<p>The pressure graph in football shows which team controlled the course of the match at each specific time interval. Unlike the final score, which only records the outcome, the pressure curve allows you to see the hidden dynamics: when one of the teams \u00absqueezed\u00bb the opponent, how long the periods of dominance lasted, and at what minutes turning points occurred. On such a graph, the X-axis represents game time, while the Y-axis represents the pressure index calculated from the sum of attacking actions.<\/p>\n<p>In practice, the pressure index is constructed based on several indicators averaged over a sliding window (for example, every 5 minutes of the match). The input data includes the intensity of attacks and play in the final third of the field. With the Sport Events API from <a href=\"http:\/\/api-sport.pro\/es\/\">api-sport.pro<\/a> you can obtain detailed statistics for each match through the endpoint <code>\/v2\/f\u00fatbol\/partidos\/{matchId}<\/code>, including groups <code>Disparos<\/code>, <code>Ataque<\/code>, <code>Pases<\/code> \u0438 <code>Resumen del partido<\/code>. Inside them are metrics that are well-suited for building a pressure graph:<\/p>\n<ul>\n<li><code>totalDisparosALaPorter\u00eda<\/code>, <code>disparosALaPorter\u00eda<\/code> \u2014 total number of shots and shots on target;<\/li>\n<li><code>tiros de esquina<\/code> \u2014 corner kicks, often reflecting territorial advantage;<\/li>\n<li><code>entradasEnElTercerCuarto<\/code> \u0438 <code>touchesEnCajaOpuesta<\/code> \u2014 entries into the final third and touches in the penalty area;<\/li>\n<li><code>posesi\u00f3nDelBal\u00f3n<\/code> \u2014 ball possession, especially in the context of halves.<\/li>\n<\/ul>\n<p>The simplest way to interpret the graph: if the pressure line is noticeably shifted upwards \u2014 the initiative belongs to the hosts, if downwards \u2014 to the guests. Sharp spikes are usually associated with series of shots, corners, or dangerous attacks. Having received match statistics via the API, you can aggregate metrics over time segments and build your own pressure index. Below is an example of how to obtain match data and prepare it for calculating the pressure index on your server or frontend:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\" data-no-translation=\"\">\nconst matchId = 14570728;\nfetch(`https:\/\/api.api-sport.ru\/v2\/football\/matches\/${matchId}`, {\n  headers: {\n    'Authorization': 'YOUR_API_KEY'\n  }\n})\n  .then(response =&gt; response.json())\n  .then(match =&gt; {\n    \/\/ match.matchStatistics \u2014 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430\u043c (ALL, 1ST, 2ND)\n    const allPeriod = match.matchStatistics.find(p =&gt; p.period === 'ALL');\n    \/\/ \u0418\u0449\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438\n    const overview = allPeriod.groups.find(g =&gt; g.groupName === 'Match overview');\n    const shots = allPeriod.groups.find(g =&gt; g.groupName === 'Shots');\n    const attack = allPeriod.groups.find(g =&gt; g.groupName === 'Attack');\n    \/\/ \u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e \u043c\u0430\u0442\u0447\u0443 \u0446\u0435\u043b\u0438\u043a\u043e\u043c\n    function pressureIndex(group) {\n      const corners = overview.statisticsItems.find(i =&gt; i.key === 'cornerKicks');\n      const totalShots = shots.statisticsItems.find(i =&gt; i.key === 'totalShotsOnGoal');\n      const touchesBox = attack.statisticsItems.find(i =&gt; i.key === 'touchesInOppBox');\n      return {\n        home: corners.homeValue + totalShots.homeValue + (touchesBox?.homeValue || 0),\n        away: corners.awayValue + totalShots.awayValue + (touchesBox?.awayValue || 0)\n      };\n    }\n    const pressure = pressureIndex({ overview, shots, attack });\n    console.log('\u0418\u043d\u0434\u0435\u043a\u0441 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e \u043c\u0430\u0442\u0447\u0443:', pressure);\n  });\n<\/pre>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-2\">Momentum metric in football: what it is and how the graph is constructed<\/h2>\n<p>Momentum (game \u00abacceleration\u00bb or impulse) is a dynamic metric that shows which team currently holds the initiative and how stable this advantage is. Unlike the pressure graph, which often reflects an averaged picture over segments, momentum is usually built as a cumulative line that responds to each significant event: a shot, a goal, a created big goal opportunity. If the line is rising \u2014 the advantage is on the side of the hosts, if it is falling \u2014 the pressure from the guests is increasing.<\/p>\n<p>The typical logic for building a momentum graph is as follows: with each important attacking event of the team, its \u00abimpulse\u00bb increases by a certain number of points, while the opponent\u2019s value, on the contrary, relatively decreases. In the Sport Events API, you can use the endpoint <code>\/v2\/f\u00fatbol\/partidos\/{matchId}<\/code> to obtain extended statistics (for example, <code>granOportunidadCreada<\/code>, <code>disparosALaPorter\u00eda<\/code>), as well as <code>\/v2\/f\u00fatbol\/partidos\/{matchId}\/eventos<\/code> \u2014 for the chronology of key events (goals, penalties, cards, stoppages in play). Based on the timestamp of the event and its type, you build the momentum curve, calculating the accumulated advantage of the teams throughout the match.<\/p>\n<p>Below is a simplified example of how to calculate momentum from match events and basic statistics using the Sport Events API. In this example, we consider goals and big moments, as well as shots on target, assigning them different \u00abweights\u00bb:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\" data-no-translation=\"\">\nconst matchId = 14570728;\nconst API_URL = 'https:\/\/api.api-sport.ru\/v2\/football';\nasync function loadMatchData() {\n  const &#x5B;matchRes, eventsRes] = await Promise.all(&#x5B;\n    fetch(`${API_URL}\/matches\/${matchId}`, {\n      headers: { 'Authorization': 'YOUR_API_KEY' }\n    }),\n    fetch(`${API_URL}\/matches\/${matchId}\/events`, {\n      headers: { 'Authorization': 'YOUR_API_KEY' }\n    })\n  ]);\n  const match = await matchRes.json();\n  const eventsWrapper = await eventsRes.json();\n  const events = eventsWrapper.events || &#x5B;];\n  \/\/ \u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u0432\u0435\u0441\u0430 \u0434\u043b\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0439\n  const WEIGHTS = {\n    goal: 5,\n    bigChance: 3,\n    shotOnTarget: 1\n  };\n  \/\/ \u0417\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 momentum \u043f\u043e \u043c\u0438\u043d\u0443\u0442\u0430\u043c\n  const totalMinutes = match.currentMatchMinute || 90;\n  const momentumSeries = Array.from({ length: totalMinutes + 1 }, (_, m) =&gt; ({\n    minute: m,\n    value: 0\n  }));\n  \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u0433\u043e\u043b\u043e\u0432 (\u0438\u0437 liveEvents)\n  events\n    .filter(e =&gt; e.type === 'goal')\n    .forEach(e =&gt; {\n      const sign = e.team === 'home' ? 1 : -1;\n      for (let m = e.time; m &amp;lt;= totalMinutes; m++) {\n        momentumSeries&#x5B;m].value += sign * WEIGHTS.goal;\n      }\n    });\n  \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0448\u0430\u043d\u0441\u043e\u0432 \u0438 \u0443\u0434\u0430\u0440\u043e\u0432 \u0438\u0437 \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 (\u043f\u043e \u0442\u0430\u0439\u043c\u0430\u043c)\n  const allPeriod = match.matchStatistics.find(p =&gt; p.period === 'ALL');\n  const overview = allPeriod.groups.find(g =&gt; g.groupName === 'Match overview');\n  const shots = allPeriod.groups.find(g =&gt; g.groupName === 'Shots');\n  const bigChances = overview.statisticsItems.find(i =&gt; i.key === 'bigChanceCreated');\n  const shotsOnTarget = shots.statisticsItems.find(i =&gt; i.key === 'shotsOnGoal');\n  \/\/ \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u044d\u0442\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u0441\u0438; \u0437\u0434\u0435\u0441\u044c \u2014 \u043f\u0440\u0438\u043c\u0435\u0440 \u043b\u043e\u0433\u0438\u043a\u0438\n  const homeImpulse = (bigChances.homeValue * WEIGHTS.bigChance) + (shotsOnTarget.homeValue * WEIGHTS.shotOnTarget);\n  const awayImpulse = (bigChances.awayValue * WEIGHTS.bigChance) + (shotsOnTarget.awayValue * WEIGHTS.shotOnTarget);\n  const delta = homeImpulse - awayImpulse;\n  for (let m = 0; m &amp;lt;= totalMinutes; m++) {\n    momentumSeries&#x5B;m].value += (delta \/ totalMinutes) * m; \/\/ \u043f\u043b\u0430\u0432\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430 \u043f\u043e \u043c\u0430\u0442\u0447\u0443\n  }\n  return momentumSeries;\n}\nloadMatchData().then(series =&gt; {\n  \/\/ series \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0434\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 (Chart.js, Highcharts \u0438 \u0442.\u043f.)\n  console.log('Momentum series:', series);\n});\n<\/pre>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-3\">Shot-quality and xG in football: how to interpret the quality of shots from the graph<\/h2>\n<p>Shot-quality and expected goals (xG) describe not just the number of shots, but their actual danger. Even if teams made 10 shots each, the quality of those moments can differ radically: a series of long-range low-danger shots and several shots from inside the penalty area are attacks of different value. That is why analysts use shot-quality and xG graphs to reflect the volume of truly dangerous moments created by each team during the match and at what time intervals.<\/p>\n<p>In the Sport Events API, aggregated statistics on shots are available in the block <code>estad\u00edsticasDelPartido<\/code> (groups <code>Disparos<\/code> \u0438 <code>Ataque<\/code>) for each match. You can operate with metrics such as <code>totalDisparosALaPorter\u00eda<\/code>, <code>disparosALaPorter\u00eda<\/code>, <code>totalDisparosDentroDel\u00c1rea<\/code>, <code>totalTirosFueraDel\u00c1rea<\/code>, <code>granOportunidadCreada<\/code>, <code>granOportunidadMarcada<\/code>. Based on them, you can build your own shot-quality index, and then a graph of accumulated shot quality throughout the match. If you have your own xG model, you can substitute its estimates instead of simple weight coefficients, using the API data as a basis for calculations.<\/p>\n<p>Below is an example of how to calculate a basic shot-quality index for a match on your service side. We do not calculate \u00abtrue\u00bb xG, but construct a transparent indicator where shots inside the penalty area, big moments, and shots on target have a greater weight than shots from outside the penalty area:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\" data-no-translation=\"\">\nasync function loadShotQuality(matchId) {\n  const res = await fetch(`https:\/\/api.api-sport.ru\/v2\/football\/matches\/${matchId}`, {\n    headers: { 'Authorization': 'YOUR_API_KEY' }\n  });\n  const match = await res.json();\n  const allPeriod = match.matchStatistics.find(p =&gt; p.period === 'ALL');\n  const shotsGroup = allPeriod.groups.find(g =&gt; g.groupName === 'Shots');\n  const attackGroup = allPeriod.groups.find(g =&gt; g.groupName === 'Attack');\n  const totalShotsInsideBox = shotsGroup.statisticsItems.find(i =&gt; i.key === 'totalShotsInsideBox');\n  const totalShotsOutsideBox = shotsGroup.statisticsItems.find(i =&gt; i.key === 'totalShotsOutsideBox');\n  const shotsOnTarget = shotsGroup.statisticsItems.find(i =&gt; i.key === 'shotsOnGoal');\n  const bigChances = attackGroup.statisticsItems.find(i =&gt; i.key === 'bigChanceCreated');\n  \/\/ \u041f\u0440\u043e\u0441\u0442\u0430\u044f \u0432\u0435\u0441\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c shot-quality\n  function sideQuality(side) {\n    const inBox = totalShotsInsideBox&#x5B;`${side}Value`];\n    const outBox = totalShotsOutsideBox&#x5B;`${side}Value`];\n    const onTarget = shotsOnTarget&#x5B;`${side}Value`];\n    const big = bigChances&#x5B;`${side}Value`];\n    return inBox * 1.2 + outBox * 0.5 + onTarget * 0.8 + big * 2.0;\n  }\n  return {\n    home: sideQuality('home'),\n    away: sideQuality('away')\n  };\n}\nloadShotQuality(14570728).then(q =&gt; {\n  console.log('\u0418\u043d\u0434\u0435\u043a\u0441 shot-quality \u043f\u043e \u043c\u0430\u0442\u0447\u0443:', q);\n  \/\/ \u0414\u0430\u043b\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a shot-quality \/ xG \u0432 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0435 \u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438\n});\n<\/pre>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-4\">How to assess a team\u2019s advantage during the match using pressure and momentum graphs<\/h2>\n<p>Joint analysis of pressure and momentum graphs allows for a much more accurate assessment of the actual advantage of a team than simple statistics of shots or ball possession. If the pressure curve remains above the zero line for a long time, and the momentum graph is steadily rising, one can speak of stable dominance. Conversely, when pressure is high, but momentum \u00abzigzags\u00bb up and down, it often indicates mutual attacks and a \u00abseesaw\u00bb scenario, where the game can easily swing in either direction.<\/p>\n<p>It is especially useful to compare these graphs with the chronology of key events and the dynamics of bookmaker odds. In the Sport Events API, you can simultaneously receive: live events through the endpoint <code>\/v2\/f\u00fatbol\/partidos\/{matchId}\/eventos<\/code>, full match statistics through <code>\/v2\/f\u00fatbol\/partidos\/{matchId}<\/code> and the bookmakers\u2019 line in the array <code>oddsBase<\/code>. This approach allows you to see how the market reacts to growing pressure and changing momentum: often the odds change even before a goal is scored, when the model notices prolonged dominance by one side.<\/p>\n<p>Below is an example of how to combine your calculations of pressure and momentum charts with odds from the Sport Events API. It is assumed that the functions <code>buildPressureSeries<\/code> \u0438 <code>buildMomentumSeries<\/code> are already implemented based on statistics and events, and here we focus on the 1X2 market (group <code>1X2<\/code>):<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\" data-no-translation=\"\">\nasync function loadMatchWithOdds(matchId) {\n  const res = await fetch(`https:\/\/api.api-sport.ru\/v2\/football\/matches\/${matchId}`, {\n    headers: { 'Authorization': 'YOUR_API_KEY' }\n  });\n  const match = await res.json();\n  \/\/ \u0412\u0430\u0448\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0438\u0439 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 momentum\n  const pressureSeries = buildPressureSeries(match);   \/\/ &#x5B;{ minute, home, away }]\n  const momentumSeries = buildMomentumSeries(match);   \/\/ &#x5B;{ minute, value }]\n  const markets = match.oddsBase || &#x5B;];\n  const fullTimeMarket = markets.find(m =&gt; m.group === '1X2' &amp;&amp; m.period === 'Full-time');\n  const odds = fullTimeMarket ? fullTimeMarket.choices.map(c =&gt; ({\n    name: c.name,\n    decimal: c.decimal,\n    initialDecimal: c.initialDecimal,\n    change: c.change\n  })) : &#x5B;];\n  return {\n    pressureSeries,\n    momentumSeries,\n    odds\n  };\n}\nloadMatchWithOdds(14570728).then(data =&gt; {\n  \/\/ \u041d\u0430 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c:\n  \/\/ 1) \u043b\u0438\u043d\u0438\u044e \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e \u043c\u0438\u043d\u0443\u0442\u0430\u043c \u0434\u043b\u044f \u043e\u0431\u0435\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434;\n  \/\/ 2) \u043b\u0438\u043d\u0438\u044e momentum;\n  \/\/ 3) \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b 1X2 \u0432 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0438\u043b\u0438 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0435.\n  console.log('\u0410\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0430\u043a\u0435\u0442 \u0434\u043b\u044f \u043c\u0430\u0442\u0447\u0430:', data);\n});\n<\/pre>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-5\">What data on pressure, momentum, and shot-quality can be obtained through the sports statistics API<\/h2>\n<p>Ready pressure, momentum, or xG charts are usually derivative metrics that are built on the product or analytical platform side. The task of the Sport Events API is <a href=\"http:\/\/api-sport.pro\/es\/\">api-sport.pro<\/a> to provide you with the most detailed and structured raw data from which you can reliably calculate your own models. For football through the endpoint <code>\/v2\/f\u00fatbol\/partidos<\/code> \u0438 <code>\/v2\/f\u00fatbol\/partidos\/{matchId}<\/code> you receive an array <code>estad\u00edsticasDelPartido<\/code>, broken down by periods (ALL, 1ST, 2ND) and grouped by logical blocks: shots, attack, passes, duels, defense, and goalkeeper line.<\/p>\n<p>Within these groups, dozens of metrics relevant specifically for building pressure, momentum, and shot-quality graphs are available: number of shots, shots on target, shots inside and outside the penalty area, big chances, touches in the penalty area, ball possession, and much more. Additionally, through the endpoint <code>\/v2\/f\u00fatbol\/partidos\/{matchId}\/eventos<\/code> you receive a detailed timeline of key events \u2014 goals, substitutions, cards, added time. Based on this data, you can:<\/p>\n<ul>\n<li>build a pressure index based on the combination of attacking actions and ball possession;<\/li>\n<li>calculate momentum as a cumulative advantage based on significant events and dangerous attacks;<\/li>\n<li>create your own shot-quality indices and integrate external xG models;<\/li>\n<li>compare the dynamics of metrics with market odds from <code>oddsBase<\/code> for live analytics and betting.<\/li>\n<\/ul>\n<p>Access to the data is provided via an API key, which can be obtained at <a href=\"https:\/\/app.api-sport.ru\">la cuenta personal.<\/a>. In upcoming updates, support for WebSocket subscriptions for events and advanced AI tools will be added to the infrastructure, allowing data to be transmitted for your graphs almost in real-time and building more advanced predictive models on top of the statistics provided by the Sport Events API.<\/p>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-6\">How to use the sports events API for visualizing and analyzing pressure, momentum, and shot-quality graphs<\/h2>\n<p>To turn raw sports statistics data into user-friendly graphs of pressure, momentum, and shot quality, a clear technical pipeline is needed. At the first step, you receive data from the Sport Events API: a list of matches for the required tournaments through <code>\/v2\/f\u00fatbol\/partidos<\/code>, then the details of a specific match with the block <code>estad\u00edsticasDelPartido<\/code>, events, and bookmaker odds. Next, the data is cleaned and normalized in your storage (DB or in-memory cache), after which derived metrics are calculated based on them \u2014 pressure indices, momentum, and shot quality indicators.<\/p>\n<p>On the frontend, the obtained series of values are tied to a timeline and visualized using any popular charting library. You can draw separate charts or combine them into one dashboard: for example, at the top \u2014 a cumulative chart of xG and shot quality, below \u2014 a momentum line, at the bottom \u2014 the dynamics of 1X2 and totals odds. Thanks to the fact that the Sport Events API supports several sports (football, hockey, basketball, tennis, table tennis, esports, etc.), the same architecture can be extended for other disciplines, just by adapting the calculation rules for metrics to the specifics of the sport.<\/p>\n<p>Below is an example of a server script in Python that retrieves matches for today, selects the required match, and prepares data for subsequent calculations and visualizations. In a real project, this code can be placed in a background worker or data aggregation service, and later replace periodic requests with WebSocket subscriptions when this functionality becomes available in the infrastructure. <a href=\"http:\/\/api-sport.pro\/es\/\">api-sport.pro<\/a>:<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\" data-no-translation=\"\">\nimport requests\nAPI_KEY = 'YOUR_API_KEY'\nBASE_URL = 'https:\/\/api.api-sport.ru\/v2\/football'\n\ndef get_today_matches():\n    resp = requests.get(f&quot;{BASE_URL}\/matches&quot;, headers={\n        'Authorization': API_KEY\n    })\n    resp.raise_for_status()\n    return resp.json()&#x5B;'matches']\n\ndef get_match_details(match_id: int):\n    resp = requests.get(f&quot;{BASE_URL}\/matches\/{match_id}&quot;, headers={\n        'Authorization': API_KEY\n    })\n    resp.raise_for_status()\n    return resp.json()\n\nif __name__ == &quot;__main__&quot;:\n    matches = get_today_matches()\n    if not matches:\n        print(&quot;\u041d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u0430\u0442\u0447\u0435\u0439 \u043d\u0435\u0442&quot;)\n    else:\n        match_id = matches&#x5B;0]&#x5B;'id']\n        match = get_match_details(match_id)\n        # \u0417\u0434\u0435\u0441\u044c \u0432\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0435 \u0441\u0432\u043e\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:\n        # build_pressure_series(match), build_momentum_series(match),\n        # calculate_shot_quality(match) \u0438 \u0442.\u043f.\n        print(f&quot;\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u043c\u0430\u0442\u0447 {match_id} \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438&quot;)\n<\/pre>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Content What are pressure graphs in football and how to read them Metric momentum in football: what it is and how the graph is built Shot-quality and xG in football: how to interpret the quality of shots from the graph How to evaluate a team&#8217;s advantage during the match using pressure and momentum graphs What data on pressure, momentum, and shot-quality can be obtained through the API [\u2026]<\/p>","protected":false},"author":1,"featured_media":1335,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","faq":"[{\"question\":\"\u0427\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0433\u0440\u0430\u0444\u0438\u043a \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432 \u0444\u0443\u0442\u0431\u043e\u043b\u0435?\",\"answer\":\"\u0413\u0440\u0430\u0444\u0438\u043a \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0430\u0442\u0430\u043a\u0443\u044e\u0449\u0438\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438: \u0443\u0434\u0430\u0440\u044b, \u0443\u0433\u043b\u043e\u0432\u044b\u0435, \u0432\u0445\u043e\u0434\u044b \u0432 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u0441\u0430\u043d\u0438\u044f \u0432 \u0448\u0442\u0440\u0430\u0444\u043d\u043e\u0439 \u0438 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435 \u043c\u044f\u0447\u043e\u043c. \u041f\u043e \u0444\u043e\u0440\u043c\u0435 \u043a\u0440\u0438\u0432\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0442\u043e \u0434\u043e\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0442\u0440\u0435\u0437\u043a\u0430\u0445, \u043a\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043b\u043e \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u043e\u0440\u043e\u0442\u0430 \u0438 \u0432 \u043a\u0430\u043a\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043b\u043e\u043c\u044b \u0445\u043e\u0434\u0430 \u0438\u0433\u0440\u044b.\"},{\"question\":\"\u0427\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0433\u0440\u0430\u0444\u0438\u043a momentum \u043e\u0442 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f?\",\"answer\":\"\u0413\u0440\u0430\u0444\u0438\u043a \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u043f\u043e \u0443\u0441\u0440\u0435\u0434\u043d\u0451\u043d\u043d\u044b\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c (\u0443\u0434\u0430\u0440\u044b, \u0443\u0433\u043b\u043e\u0432\u044b\u0435, \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435) \u0437\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u043d\u0430. Momentum \u2014 \u044d\u0442\u043e \u043a\u0443\u043c\u0443\u043b\u044f\u0442\u0438\u0432\u043d\u0430\u044f \u043b\u0438\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0435 \u0437\u043d\u0430\u0447\u0438\u043c\u043e\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 (\u0433\u043e\u043b\u044b, \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u0443\u0434\u0430\u0440\u044b) \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0430\u043a\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432\u043b\u0430\u0434\u0435\u0435\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u0442\u0438\u0432\u043e\u0439 \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0438 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e \u044d\u0442\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e.\"},{\"question\":\"\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 xG \u0447\u0435\u0440\u0435\u0437 Sport Events API?\",\"answer\":\"Sport Events API \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u044b\u0440\u044b\u0435 \u0438 \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435: \u0443\u0434\u0430\u0440\u044b, \u0443\u0434\u0430\u0440\u044b \u0432 \u0441\u0442\u0432\u043e\u0440, \u0443\u0434\u0430\u0440\u044b \u0432\u043d\u0443\u0442\u0440\u0438\/\u0432\u043d\u0435 \u0448\u0442\u0440\u0430\u0444\u043d\u043e\u0439, \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u043a\u0430\u0441\u0430\u043d\u0438\u044f \u0432 \u0448\u0442\u0440\u0430\u0444\u043d\u043e\u0439, \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435 \u043c\u044f\u0447\u043e\u043c \u0438 \u0434\u0440. \u041d\u0430 \u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u0435 \u0432\u044b \u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f, momentum \u0438 shot-quality\/xG. \u0413\u043e\u0442\u043e\u0432\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u0438\u043b\u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b.\"},{\"question\":\"\u041a\u0430\u043a\u0438\u0435 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b Sport Events API \u043d\u0443\u0436\u043d\u044b \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 momentum?\",\"answer\":\"\u0414\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u0438\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0434\u0432\u0430 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430: \/v2\/{sportSlug}\/matches \u0438 \/v2\/{sportSlug}\/matches\/{matchId} \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043c\u0430\u0442\u0447\u0430 (matchStatistics), \u0430 \u0442\u0430\u043a\u0436\u0435 \/v2\/{sportSlug}\/matches\/{matchId}\/events \u0434\u043b\u044f \u0445\u0440\u043e\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 momentum \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0430 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0435.\"},{\"question\":\"\u041a\u0430\u043a \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 momentum \u0441 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u0431\u0443\u043a\u043c\u0435\u043a\u0435\u0440\u043e\u0432?\",\"answer\":\"\u0427\u0435\u0440\u0435\u0437 Sport Events API \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u0430\u043a \u0441\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443, \u0442\u0430\u043a \u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0431\u0443\u043a\u043c\u0435\u043a\u0435\u0440\u043e\u0432 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 oddsBase. \u0420\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0432 \u0441\u0432\u043e\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 momentum \u043f\u043e \u043c\u0430\u0442\u0447\u0443, \u0432\u044b \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0438\u0445 \u0441 \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u043e\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 1X2, \u0442\u043e\u0442\u0430\u043b\u044b). \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u0430\u043a \u0440\u044b\u043d\u043e\u043a \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u0438\u0433\u0440\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f live-\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043f\u043e \u0441\u0442\u0430\u0432\u043a\u0430\u043c.\"}]","footnotes":""},"categories":[1],"tags":[],"class_list":["post-1336","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"yoast_head":"<title>Pressure, momentum, and shot-quality charts \u2014 Sport Events API<\/title>\n<meta name=\"description\" content=\"How to read pressure, momentum, and shot-quality graphs in football and build them based on the Sport Events API for analytics, predictions, and betting. Learn what to measure and how to visualize.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/api-sport.pro\/es\/how-to-interpret-the-pressure-momentum-and-shot-quality-graphs\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pressure, momentum, and shot-quality charts \u2014 Sport Events API\" \/>\n<meta property=\"og:description\" content=\"How to read pressure, momentum, and shot-quality graphs in football and build them based on the Sport Events API for analytics, predictions, and betting. Learn what to measure and how to visualize.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/api-sport.pro\/es\/how-to-interpret-the-pressure-momentum-and-shot-quality-graphs\/\" \/>\n<meta property=\"og:site_name\" content=\"Sports Events API\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-17T17:07:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-interpretirovat-grafiki-davleniya-momentum-i-shot-quality_posts.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1376\" \/>\n\t<meta property=\"og:image:height\" content=\"768\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/api-sport.pro\/how-to-interpret-the-pressure-momentum-and-shot-quality-graphs\/\",\"url\":\"https:\/\/api-sport.pro\/how-to-interpret-the-pressure-momentum-and-shot-quality-graphs\/\",\"name\":\"Pressure, momentum, and shot-quality charts \u2014 Sport Events API\",\"isPartOf\":{\"@id\":\"https:\/\/api-sport.pro\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/api-sport.pro\/how-to-interpret-the-pressure-momentum-and-shot-quality-graphs\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/api-sport.pro\/how-to-interpret-the-pressure-momentum-and-shot-quality-graphs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-interpretirovat-grafiki-davleniya-momentum-i-shot-quality_posts.jpg\",\"datePublished\":\"2025-12-17T17:07:39+00:00\",\"author\":{\"@id\":\"https:\/\/api-sport.pro\/#\/schema\/person\/bc93f449b3753a5f254264da266fb601\"},\"description\":\"How to read pressure, momentum, and shot-quality graphs in football and build them based on the Sport Events API for analytics, predictions, and betting. Learn what to measure and how to visualize.\",\"breadcrumb\":{\"@id\":\"https:\/\/api-sport.pro\/how-to-interpret-the-pressure-momentum-and-shot-quality-graphs\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/api-sport.pro\/how-to-interpret-the-pressure-momentum-and-shot-quality-graphs\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/api-sport.pro\/how-to-interpret-the-pressure-momentum-and-shot-quality-graphs\/#primaryimage\",\"url\":\"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-interpretirovat-grafiki-davleniya-momentum-i-shot-quality_posts.jpg\",\"contentUrl\":\"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-interpretirovat-grafiki-davleniya-momentum-i-shot-quality_posts.jpg\",\"width\":1376,\"height\":768,\"caption\":\"\u041a\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f, momentum \u0438 shot-quality?\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/api-sport.pro\/how-to-interpret-the-pressure-momentum-and-shot-quality-graphs\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\",\"item\":\"https:\/\/api-sport.pro\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to interpret the pressure, momentum, and shot-quality graphs?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/api-sport.pro\/#website\",\"url\":\"https:\/\/api-sport.pro\/\",\"name\":\"Sports Events API\",\"description\":\"Sports Events API\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/api-sport.pro\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/api-sport.pro\/#\/schema\/person\/bc93f449b3753a5f254264da266fb601\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/api-sport.pro\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8f3dce32feb8659c1f1c917db74325481c6133714f03d5a9433ba6df23a857ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8f3dce32feb8659c1f1c917db74325481c6133714f03d5a9433ba6df23a857ab?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/api-sport.pro\"],\"url\":\"https:\/\/api-sport.pro\/es\/author\/admin\/\"}]}<\/script>","yoast_head_json":{"title":"Pressure, momentum, and shot-quality charts \u2014 Sport Events API","description":"How to read pressure, momentum, and shot-quality graphs in football and build them based on the Sport Events API for analytics, predictions, and betting. Learn what to measure and how to visualize.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/api-sport.pro\/es\/how-to-interpret-the-pressure-momentum-and-shot-quality-graphs\/","og_locale":"es_ES","og_type":"article","og_title":"Pressure, momentum, and shot-quality charts \u2014 Sport Events API","og_description":"How to read pressure, momentum, and shot-quality graphs in football and build them based on the Sport Events API for analytics, predictions, and betting. Learn what to measure and how to visualize.","og_url":"https:\/\/api-sport.pro\/es\/how-to-interpret-the-pressure-momentum-and-shot-quality-graphs\/","og_site_name":"Sports Events API","article_published_time":"2025-12-17T17:07:39+00:00","og_image":[{"width":1376,"height":768,"url":"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-interpretirovat-grafiki-davleniya-momentum-i-shot-quality_posts.jpg","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"admin","Tiempo de lectura":"12 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/api-sport.pro\/how-to-interpret-the-pressure-momentum-and-shot-quality-graphs\/","url":"https:\/\/api-sport.pro\/how-to-interpret-the-pressure-momentum-and-shot-quality-graphs\/","name":"Pressure, momentum, and shot-quality charts \u2014 Sport Events API","isPartOf":{"@id":"https:\/\/api-sport.pro\/#website"},"primaryImageOfPage":{"@id":"https:\/\/api-sport.pro\/how-to-interpret-the-pressure-momentum-and-shot-quality-graphs\/#primaryimage"},"image":{"@id":"https:\/\/api-sport.pro\/how-to-interpret-the-pressure-momentum-and-shot-quality-graphs\/#primaryimage"},"thumbnailUrl":"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-interpretirovat-grafiki-davleniya-momentum-i-shot-quality_posts.jpg","datePublished":"2025-12-17T17:07:39+00:00","author":{"@id":"https:\/\/api-sport.pro\/#\/schema\/person\/bc93f449b3753a5f254264da266fb601"},"description":"How to read pressure, momentum, and shot-quality graphs in football and build them based on the Sport Events API for analytics, predictions, and betting. Learn what to measure and how to visualize.","breadcrumb":{"@id":"https:\/\/api-sport.pro\/how-to-interpret-the-pressure-momentum-and-shot-quality-graphs\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/api-sport.pro\/how-to-interpret-the-pressure-momentum-and-shot-quality-graphs\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/api-sport.pro\/how-to-interpret-the-pressure-momentum-and-shot-quality-graphs\/#primaryimage","url":"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-interpretirovat-grafiki-davleniya-momentum-i-shot-quality_posts.jpg","contentUrl":"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-interpretirovat-grafiki-davleniya-momentum-i-shot-quality_posts.jpg","width":1376,"height":768,"caption":"\u041a\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f, momentum \u0438 shot-quality?"},{"@type":"BreadcrumbList","@id":"https:\/\/api-sport.pro\/how-to-interpret-the-pressure-momentum-and-shot-quality-graphs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/api-sport.pro\/"},{"@type":"ListItem","position":2,"name":"How to interpret the pressure, momentum, and shot-quality graphs?"}]},{"@type":"WebSite","@id":"https:\/\/api-sport.pro\/#website","url":"https:\/\/api-sport.pro\/","name":"API de Eventos Deportivos","description":"API de Eventos Deportivos","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/api-sport.pro\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/api-sport.pro\/#\/schema\/person\/bc93f449b3753a5f254264da266fb601","name":"administrador","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/api-sport.pro\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8f3dce32feb8659c1f1c917db74325481c6133714f03d5a9433ba6df23a857ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8f3dce32feb8659c1f1c917db74325481c6133714f03d5a9433ba6df23a857ab?s=96&d=mm&r=g","caption":"admin"},"sameAs":["http:\/\/api-sport.pro"],"url":"https:\/\/api-sport.pro\/es\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/posts\/1336","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/comments?post=1336"}],"version-history":[{"count":3,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/posts\/1336\/revisions"}],"predecessor-version":[{"id":1709,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/posts\/1336\/revisions\/1709"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/media\/1335"}],"wp:attachment":[{"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/media?parent=1336"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/categories?post=1336"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/tags?post=1336"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}