{
  "id": "qq-plot-response-time-distribution-shift",
  "schemaVersion": 2,
  "title": {
    "ja": "応答時間の分布変化 — 上位10%で長時間化",
    "en": "Response-Time Distribution Shift — Longer Tail Above the 90th Percentile"
  },
  "summary": {
    "ja": "前後の同じ分位点を同一単位の二軸で対応させ、対角線からのずれで分布全体と裾の変化を読むQ–Q plot",
    "en": "A Q–Q plot compares corresponding quantiles on identical scales; distance from the equality line reveals distribution and tail shifts."
  },
  "capturedAt": "2026-09-25",
  "categories": [
    "presentation"
  ],
  "tags": [
    "data-viz",
    "minimal"
  ],
  "useCases": [
    "comparison",
    "comparison"
  ],
  "format": "slide-16x9",
  "density": "medium",
  "layout": {
    "kind": "axis",
    "canvas": {
      "w": 1920,
      "h": 1080
    },
    "margin": {
      "top": 100,
      "right": 140,
      "bottom": 100,
      "left": 140
    }
  },
  "type": {
    "title": {
      "size": 46,
      "weight": 700,
      "tracking": "0.01em"
    },
    "subtitle": {
      "size": 22,
      "weight": 500
    },
    "axisTitle": {
      "size": 22,
      "weight": 700
    },
    "tick": {
      "size": 20,
      "weight": 500
    },
    "percentile": {
      "size": 20,
      "weight": 700
    },
    "label": {
      "size": 20,
      "weight": 500
    },
    "value": {
      "size": 28,
      "weight": 700
    },
    "legend": {
      "size": 20,
      "weight": 500
    },
    "takeaway": {
      "size": 28,
      "weight": 500
    },
    "note": {
      "size": 20,
      "weight": 400
    }
  },
  "colors": {
    "ground": "#FFFFFF",
    "surface": "#F4F6F9",
    "ink": "#131820",
    "muted": "#667183",
    "accent": "#1F5FA8",
    "rule": "#DBE1E9",
    "series": [
      "#668CB9",
      "#A85A2E"
    ]
  },
  "rules": [
    {
      "ja": "移行前後の同じ12分位を個別観測ペアではなく分布同士として比較する",
      "en": "Compare the same 12 quantiles before and after as distributions, not as paired individual observations."
    },
    {
      "ja": "両軸は同じ分・同じ0〜140分尺度。破線は両分布が一致するときのy=x基準を表す",
      "en": "Both axes use the same 0–140 minute scale; the dashed line is y=x where the distributions match."
    },
    {
      "ja": "上側の点ほど同じ分位で移行後の時間が長く、p90〜p99では差が大きくなる",
      "en": "Points above the line are slower after migration at the same quantile; the gap widens from p90 to p99."
    },
    {
      "ja": "架空データ。対象・計測定義・分位算出方法を揃え、因果を推定しない",
      "en": "Fictional data. Align population, measurement definitions, and quantile method; do not infer causality."
    }
  ],
  "cover": "https://design-vault.pages.dev/_astro/cover.BVXtBbEw.png",
  "assets": [],
  "shortlist": false,
  "status": "published",
  "relations": {
    "similar": []
  },
  "license": "Original",
  "publishedAt": null,
  "reproduction": {
    "spec": {
      "format": "slide-16x9",
      "density": "medium",
      "layout": {
        "kind": "axis",
        "canvas": {
          "w": 1920,
          "h": 1080
        },
        "margin": {
          "top": 100,
          "right": 140,
          "bottom": 100,
          "left": 140
        }
      },
      "type": {
        "title": {
          "size": 46,
          "weight": 700,
          "tracking": "0.01em"
        },
        "subtitle": {
          "size": 22,
          "weight": 500
        },
        "axisTitle": {
          "size": 22,
          "weight": 700
        },
        "tick": {
          "size": 20,
          "weight": 500
        },
        "percentile": {
          "size": 20,
          "weight": 700
        },
        "label": {
          "size": 20,
          "weight": 500
        },
        "value": {
          "size": 28,
          "weight": 700
        },
        "legend": {
          "size": 20,
          "weight": 500
        },
        "takeaway": {
          "size": 28,
          "weight": 500
        },
        "note": {
          "size": 20,
          "weight": 400
        }
      },
      "colors": {
        "ground": "#FFFFFF",
        "surface": "#F4F6F9",
        "ink": "#131820",
        "muted": "#667183",
        "accent": "#1F5FA8",
        "rule": "#DBE1E9",
        "series": [
          "#668CB9",
          "#A85A2E"
        ]
      },
      "rules": [
        "Compare the same 12 quantiles before and after as distributions, not as paired individual observations.",
        "Both axes use the same 0–140 minute scale; the dashed line is y=x where the distributions match.",
        "Points above the line are slower after migration at the same quantile; the gap widens from p90 to p99.",
        "Fictional data. Align population, measurement definitions, and quantile method; do not infer causality."
      ]
    },
    "prompt": {
      "ja": "以下の仕様でスライドを 1 枚作ってください。\n\n- 版面 1920 × 1080\n- 余白 上 100 右 140 下 100 左 140\n\n## 文字（版面 1920px に対する px）\ntitle  46px / 700 / 字間 0.01em\nsubtitle  22px / 500\naxisTitle  22px / 700\ntick  20px / 500\npercentile  20px / 700\nlabel  20px / 500\nvalue  28px / 700\nlegend  20px / 500\ntakeaway  28px / 500\nnote  20px / 400\n\n## 配色\n地 #FFFFFF / 面 #F4F6F9 / 文字 #131820 / 補助 #667183 / 強調 #1F5FA8 / 罫 #DBE1E9 / #668CB9 / #A85A2E\n\n## 外すと崩れる点\n- 移行前後の同じ12分位を個別観測ペアではなく分布同士として比較する\n- 両軸は同じ分・同じ0〜140分尺度。破線は両分布が一致するときのy=x基準を表す\n- 上側の点ほど同じ分位で移行後の時間が長く、p90〜p99では差が大きくなる\n- 架空データ。対象・計測定義・分位算出方法を揃え、因果を推定しない\n\n内容は［ここに自分の内容を書く］に置き換えてください。寸法と配色はそのまま守ってください。\n正確に再現する場合は、この HTML をそのまま使ってください: https://design-vault.pages.dev/designs/qq-plot-response-time-distribution-shift/pattern.html",
      "en": "Produce one slide to the following specification.\n\n- Canvas 1920 × 1080\n- Margin top 100 right 140 bottom 100 left 140\n\n## Type (px against a 1920px canvas)\ntitle  46px / 700 / tracking 0.01em\nsubtitle  22px / 500\naxisTitle  22px / 700\ntick  20px / 500\npercentile  20px / 700\nlabel  20px / 500\nvalue  28px / 700\nlegend  20px / 500\ntakeaway  28px / 500\nnote  20px / 400\n\n## Colour\nGround #FFFFFF / Surface #F4F6F9 / Ink #131820 / Muted #667183 / Accent #1F5FA8 / Rule #DBE1E9 / #668CB9 / #A85A2E\n\n## Constraints — dropping these breaks it\n- Compare the same 12 quantiles before and after as distributions, not as paired individual observations.\n- Both axes use the same 0–140 minute scale; the dashed line is y=x where the distributions match.\n- Points above the line are slower after migration at the same quantile; the gap widens from p90 to p99.\n- Fictional data. Align population, measurement definitions, and quantile method; do not infer causality.\n\nReplace the content with [your content]. Keep the measurements and colours as given.\nFor an exact reproduction, use the verbatim HTML at https://design-vault.pages.dev/designs/qq-plot-response-time-distribution-shift/pattern.html."
    },
    "code": {
      "html": "<!doctype html><meta charset=\"utf-8\"><title>応答時間の分布変化 — 上位10%で長時間化</title><meta name=\"dv-font\" content=\"Zen Kaku Gothic New:400;500;700\"><link rel=\"stylesheet\" href=\"./font.css\"><style>:root{--ground:#FFFFFF;--surface:#F4F6F9;--ink:#131820;--muted:#667183;--accent:#1F5FA8;--rule:#DBE1E9;--series-1:#668CB9;--series-2:#A85A2E;}*{box-sizing:border-box;margin:0}html,body{width:1920px;height:1080px}body{font-family:\"Zen Kaku Gothic New\",\"Hiragino Sans\",sans-serif}.artboard{width:1920px;height:1080px;padding:100px 140px;background:var(--ground);color:var(--ink)}.content{width:100%;height:100%;position:relative}.figure{position:absolute;left:-140px;top:-100px;width:1920px;height:1080px}</style><div class=\"artboard\" data-artboard><div class=\"content\" data-content><svg class=\"figure\" width=\"1920\" height=\"1080\" viewBox=\"0 0 1920 1080\" xmlns=\"http://www.w3.org/2000/svg\" role=\"img\" aria-label=\"架空の移行前後の応答時間分布を12の分位点で比較するQ-Q plot。90パーセンタイルは45分から58分、99パーセンタイルは80分から130分へ移動。\"><style>.figure{font-family:\"Zen Kaku Gothic New\",\"Hiragino Sans\",sans-serif}.ground{fill:var(--ground)}.ink{fill:var(--ink)}.muted{fill:var(--muted)}.rule{stroke:var(--rule)}.title{font-size:46px;font-weight:700;letter-spacing:.01em}.subtitle{font-size:22px;font-weight:500}.axis-title{font-size:22px;font-weight:700}.tick{font-size:20px;font-weight:500}.pct-label{font-size:20px;font-weight:700}.label{font-size:20px;font-weight:500}.value{font-size:28px;font-weight:700}.takeaway{font-size:28px;font-weight:500}.note{font-size:20px;font-weight:400}.reference{fill:none;stroke:var(--muted);stroke-width:2;stroke-dasharray:8 7}.point{fill:var(--series-1);stroke:var(--ground);stroke-width:3}.point-key{fill:var(--series-2);stroke:var(--ground);stroke-width:3}</style><rect class=\"ground\" width=\"1920\" height=\"1080\"/><text class=\"ink title\" data-type=\"title\" x=\"140\" y=\"153\">応答時間の分布変化 — 上位10%で長時間化</text><text class=\"muted subtitle\" data-type=\"subtitle\" x=\"140\" y=\"201\">移行前後 / 同じ対象集団の12分位 / 分 / 架空データ</text><line class=\"rule\" x1=\"140\" y1=\"238\" x2=\"1780\" y2=\"238\" stroke-width=\"2\"/><text class=\"ink axis-title\" data-type=\"axisTitle\" x=\"730\" y=\"294\" text-anchor=\"middle\">破線より上は、同じ分位点で移行後の時間が長い</text><line class=\"rule\" x1=\"480\" y1=\"370\" x2=\"480\" y2=\"870\" stroke-width=\"1\"/><line class=\"rule\" x1=\"480\" y1=\"870\" x2=\"980\" y2=\"870\" stroke-width=\"1\"/><line class=\"rule\" x1=\"605\" y1=\"370\" x2=\"605\" y2=\"870\" stroke-width=\"1\"/><line class=\"rule\" x1=\"480\" y1=\"745\" x2=\"980\" y2=\"745\" stroke-width=\"1\"/><line class=\"rule\" x1=\"730\" y1=\"370\" x2=\"730\" y2=\"870\" stroke-width=\"1\"/><line class=\"rule\" x1=\"480\" y1=\"620\" x2=\"980\" y2=\"620\" stroke-width=\"1\"/><line class=\"rule\" x1=\"855\" y1=\"370\" x2=\"855\" y2=\"870\" stroke-width=\"1\"/><line class=\"rule\" x1=\"480\" y1=\"495\" x2=\"980\" y2=\"495\" stroke-width=\"1\"/><line class=\"rule\" x1=\"980\" y1=\"370\" x2=\"980\" y2=\"870\" stroke-width=\"1\"/><line class=\"rule\" x1=\"480\" y1=\"370\" x2=\"980\" y2=\"370\" stroke-width=\"1\"/><line class=\"rule\" x1=\"480\" y1=\"870\" x2=\"980\" y2=\"870\" stroke-width=\"1.5\"/><line class=\"rule\" x1=\"480\" y1=\"370\" x2=\"480\" y2=\"870\" stroke-width=\"1.5\"/><path class=\"reference\" d=\"M 480 870 L 980 370\"/><circle class=\"point\" cx=\"522.9\" cy=\"823.6\" r=\"7\"/><circle class=\"point\" cx=\"530.0\" cy=\"816.4\" r=\"7\"/><circle class=\"point\" cx=\"537.1\" cy=\"809.3\" r=\"7\"/><circle class=\"point\" cx=\"544.3\" cy=\"802.1\" r=\"7\"/><circle class=\"point\" cx=\"551.4\" cy=\"795.0\" r=\"7\"/><circle class=\"point-key\" cx=\"558.6\" cy=\"787.9\" r=\"9\"/><circle class=\"point\" cx=\"569.3\" cy=\"777.1\" r=\"7\"/><circle class=\"point\" cx=\"580.0\" cy=\"762.9\" r=\"7\"/><circle class=\"point\" cx=\"601.4\" cy=\"730.7\" r=\"7\"/><circle class=\"point-key\" cx=\"640.7\" cy=\"662.9\" r=\"9\"/><text class=\"ink pct-label\" data-type=\"percentile\" x=\"657.7142857142858\" y=\"650.8571428571429\">p90</text><circle class=\"point-key\" cx=\"676.4\" cy=\"598.6\" r=\"9\"/><circle class=\"point-key\" cx=\"765.7\" cy=\"405.7\" r=\"9\"/><text class=\"ink pct-label\" x=\"781.7142857142858\" y=\"432.7142857142857\">p99</text><text class=\"muted tick\" data-type=\"tick\" x=\"480\" y=\"902\" text-anchor=\"middle\">0</text><text class=\"muted tick\" x=\"450\" y=\"870\" text-anchor=\"end\" dominant-baseline=\"central\">0</text><text class=\"muted tick\" data-type=\"tick\" x=\"605\" y=\"902\" text-anchor=\"middle\">35</text><text class=\"muted tick\" x=\"450\" y=\"745\" text-anchor=\"end\" dominant-baseline=\"central\">35</text><text class=\"muted tick\" data-type=\"tick\" x=\"730\" y=\"902\" text-anchor=\"middle\">70</text><text class=\"muted tick\" x=\"450\" y=\"620\" text-anchor=\"end\" dominant-baseline=\"central\">70</text><text class=\"muted tick\" data-type=\"tick\" x=\"855\" y=\"902\" text-anchor=\"middle\">105</text><text class=\"muted tick\" x=\"450\" y=\"495\" text-anchor=\"end\" dominant-baseline=\"central\">105</text><text class=\"muted tick\" data-type=\"tick\" x=\"980\" y=\"902\" text-anchor=\"middle\">140</text><text class=\"muted tick\" x=\"450\" y=\"370\" text-anchor=\"end\" dominant-baseline=\"central\">140</text><text class=\"muted tick\" x=\"730\" y=\"938\" text-anchor=\"middle\">移行前の応答時間（分）</text><text class=\"muted tick\" x=\"178\" y=\"620\" text-anchor=\"middle\" transform=\"rotate(-90 178 620)\">移行後の応答時間（分）</text><rect x=\"1130\" y=\"370\" width=\"570\" height=\"365\" rx=\"18\" fill=\"var(--surface)\"/><text class=\"muted label\" x=\"1170\" y=\"420\">同じ分位点を比較</text><text class=\"ink value\" data-type=\"value\" x=\"1170\" y=\"480\">p50　22 → 23分</text><text class=\"ink value\" x=\"1170\" y=\"550\">p90　45 → 58分</text><text class=\"ink value\" x=\"1170\" y=\"620\">p99　80 → 130分</text><line class=\"rule\" x1=\"1170\" y1=\"650\" x2=\"1660\" y2=\"650\"/><text class=\"muted label\" x=\"1170\" y=\"694\">p90以降で差が拡大</text><circle cx=\"1178\" cy=\"786\" r=\"8\" fill=\"var(--series-1)\"/><text class=\"ink label\" data-type=\"legend\" x=\"1198\" y=\"786\">その他の分位</text><circle cx=\"1420\" cy=\"786\" r=\"8\" fill=\"var(--series-2)\"/><text class=\"ink label\" x=\"1440\" y=\"786\">p50 / p90 / p95 / p99</text><line class=\"reference\" x1=\"1168\" y1=\"842\" x2=\"1220\" y2=\"842\"/><text class=\"muted label\" x=\"1235\" y=\"842\">同じ分布の基準線</text><text class=\"ink takeaway\" data-type=\"takeaway\" x=\"960\" y=\"980\" text-anchor=\"middle\">中央値はほぼ同じ — 長い応答の裾が移行後に伸びた</text><line class=\"rule\" x1=\"140\" y1=\"1000\" x2=\"1780\" y2=\"1000\" stroke-width=\"1\"/><text class=\"muted note\" data-type=\"note\" x=\"140\" y=\"1032\">対応点は順位分位の比較で個別ペアではない。対象集団と分位定義を揃え、因果は推定しない。</text></svg></div></div>",
      "url": "https://design-vault.pages.dev/designs/qq-plot-response-time-distribution-shift/pattern.html",
      "fonts": [
        "https://design-vault.pages.dev/designs/qq-plot-response-time-distribution-shift/font.css",
        "https://design-vault.pages.dev/designs/qq-plot-response-time-distribution-shift/font-0.woff2",
        "https://design-vault.pages.dev/designs/qq-plot-response-time-distribution-shift/font-1.woff2",
        "https://design-vault.pages.dev/designs/qq-plot-response-time-distribution-shift/font-2.woff2"
      ]
    }
  },
  "urls": {
    "ja": "https://design-vault.pages.dev/designs/qq-plot-response-time-distribution-shift",
    "en": "https://design-vault.pages.dev/en/designs/qq-plot-response-time-distribution-shift"
  },
  "notesMarkdown": "### 視覚的な問い\n\n移行後の応答時間分布は移行前と同じ形か。特に長い応答の裾はどれだけ変わったか。\n\n### 構造\n\n横軸は移行前、縦軸は移行後の応答時間で、両方を同じ0〜140分尺度にする。同じパーセンタイルの分位値を点として配置し、y=xの破線に沿えば分布が一致する。破線より上なら同じ順位分位で移行後の時間が長く、距離が大きいほど差が広い。\n\n架空例では中央値（p50）が22分から23分へほぼ変わらない一方、p90は45分から58分、p99は80分から130分へ広がる。これは個々の対応測定差を調べるBland–Altman plotでも、密度の山形を推定するviolin plotでもなく、分布同士の分位対応を比較するQ–Q plotである。架空データで、移行による因果を示さない。"
}