倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com - 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20251015/24261 2025-10-15 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20251010/24260 2025-10-10 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })(); -----]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20251009/24259 2025-10-09 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20251008/24258 2025-10-08 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20251007/24257 2025-10-07 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })(); ]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20251006/24256 2025-10-06 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })(); ]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20251003/24255 2025-10-03 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })(); -----]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20251002/24254 2025-10-02 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20251001/24253 2025-10-01 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } .rank-text-number { font-size: 8px; fill: #fff; font-weight: bold; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); // 週タイトルのフォーマットを調整 title.textContent = week.replace('年', '/').replace('日週', '').replace('月', '/'); svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), rank: rank, weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { // 点 const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 順位テキスト (点の中) const rankText = document.createElementNS(svgNS, 'text'); rankText.setAttribute('x', p.x); rankText.setAttribute('y', p.y); rankText.setAttribute('dy', '.3em'); rankText.setAttribute('text-anchor', 'middle'); rankText.setAttribute('class', 'rank-text-number'); rankText.textContent = p.rank; svg.appendChild(rankText); // 最初と最後の点にだけラベルを表示 // 最初の週、またはその映画が最初に登場した週のラベル (左) if (k === 0 || p.weekIndex === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } // 最後の週、またはその映画が最後に登場した週のラベル (右) if (k === points.length - 1 || p.weekIndex === weeks.length - 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20251001/24252 2025-10-01 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 // (省略: スタイル設定はタグに移動) const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); // 週タイトルのフォーマットを調整 title.textContent = week.replace('年', '/').replace('日週', '').replace('月', '/'); svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), rank: rank, weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 順位テキスト const rankText = document.createElementNS(svgNS, 'text'); rankText.setAttribute('x', p.x); rankText.setAttribute('y', p.y); rankText.setAttribute('dy', '.3em'); rankText.setAttribute('text-anchor', 'middle'); rankText.setAttribute('class', 'rank-text'); // 既存のrank-textクラスを流用 rankText.setAttribute('style', `fill: #fff; font-weight: bold; font-size: 8px;`); rankText.textContent = p.rank; svg.appendChild(rankText); // 最初と最後の点にだけラベルを表示 if (k === 0 || p.weekIndex === 0) { // 最初の週、またはそのアニメが最初に登場した週のラベル const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 || p.weekIndex === weeks.length - 1) { // 最後の週、またはそのアニメが最後に登場した週のラベル const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250930/24251 2025-09-30 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250926/24250 2025-09-26 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250925/24249 2025-09-25 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), rank: rank, weekIndex: weekIndex, name: anime.name }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 順位テキストを表示 (点の上または下に表示) const rankText = document.createElementNS(svgNS, 'text'); rankText.setAttribute('x', p.x); rankText.setAttribute('y', p.y + (p.rank = 1) { // 1回のみ登場の場合も表示 const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = p.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250925/24248 2025-09-25 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), rank: rank, weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 順位テキストを表示 (点の上または下に表示) const rankText = document.createElementNS(svgNS, 'text'); rankText.setAttribute('x', p.x); rankText.setAttribute('y', p.y + (p.rank = 1) { // 1回のみ登場の場合も表示 const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250924/24247 2025-09-24 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250924/24246 2025-09-24 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250919/24245 2025-09-19 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250918/24244 2025-09-18 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250918/24243 2025-09-18 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250917/24242 2025-09-17 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250916/24241 2025-09-16 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250912/24240 2025-09-12 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250912/24239 2025-09-12 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250912/24238 2025-09-12 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250911/24237 2025-09-11 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for (let i = 1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画(連続週のみ接続) for (let j = 0; j < points.length - 1; j++) { if (points[j + 1].weekIndex - points[j].weekIndex === 1) { const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j + 1].x} ${points[j + 1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画(端点のみラベル) points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250911/24236 2025-09-11 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画(連続週のみ接続) for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画(端点のみラベル) points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250904/24235 2025-09-04 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250904/24234 2025-09-04 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250903/24233 2025-09-03 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250903/24232 2025-09-03 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250902/24231 2025-09-02 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250829/24230 2025-08-29 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; celeb.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = celeb.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = celeb.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250828/24229 2025-08-28 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; series.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex }); } }); if (points.length === 0) return; // 連続した週のみ線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベル(最初と最後のみ) points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); if (k === 0) { const labelL = document.createElementNS(svgNS, 'text'); labelL.setAttribute('x', p.x - 10); labelL.setAttribute('y', p.y); labelL.setAttribute('dy', '.3em'); labelL.setAttribute('text-anchor', 'end'); labelL.setAttribute('class', 'label-text'); labelL.textContent = series.name; svg.appendChild(labelL); } if (k === points.length - 1 && points.length > 1) { const labelR = document.createElementNS(svgNS, 'text'); labelR.setAttribute('x', p.x + 10); labelR.setAttribute('y', p.y); labelR.setAttribute('dy', '.3em'); labelR.setAttribute('text-anchor', 'start'); labelR.setAttribute('class', 'label-text'); labelR.textContent = series.name; svg.appendChild(labelR); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250828/24228 2025-08-28 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250828/24227 2025-08-28 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for (let i = 1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) points.push({ x: getX(weekIndex), y: getY(rank), weekIndex }); }); if (points.length === 0) return; // 線を描画(連続週のみ) for (let j = 0; j < points.length - 1; j++) { if (points[j + 1].weekIndex - points[j].weekIndex === 1) { const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j + 1].x} ${points[j + 1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベル points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にラベル if (k === 0) { const labelL = document.createElementNS(svgNS, 'text'); labelL.setAttribute('x', p.x - 10); labelL.setAttribute('y', p.y); labelL.setAttribute('dy', '.3em'); labelL.setAttribute('text-anchor', 'end'); labelL.setAttribute('class', 'label-text'); labelL.textContent = anime.name; svg.appendChild(labelL); } if (k === points.length - 1 && points.length > 1) { const labelR = document.createElementNS(svgNS, 'text'); labelR.setAttribute('x', p.x + 10); labelR.setAttribute('y', p.y); labelR.setAttribute('dy', '.3em'); labelR.setAttribute('text-anchor', 'start'); labelR.setAttribute('class', 'label-text'); labelR.textContent = anime.name; svg.appendChild(labelR); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250826/24226 2025-08-26 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for (let i = 1; i { const color = colors[i % colors.length]; const points = []; item.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex }); } }); if (points.length === 0) return; // 線を描画(連続週のみ結ぶ) for (let j = 0; j < points.length - 1; j++) { if (points[j + 1].weekIndex - points[j].weekIndex === 1) { const path = document.createElementNS(svgNS, 'path'); path.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j + 1].x} ${points[j + 1].y}`); path.setAttribute('class', 'line'); path.setAttribute('style', `stroke: ${color};`); svg.appendChild(path); } } // 点とラベル points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点のみラベル表示 if (k === 0) { const labelL = document.createElementNS(svgNS, 'text'); labelL.setAttribute('x', p.x - 10); labelL.setAttribute('y', p.y); labelL.setAttribute('dy', '.3em'); labelL.setAttribute('text-anchor', 'end'); labelL.setAttribute('class', 'label-text'); labelL.textContent = item.name; svg.appendChild(labelL); } if (k === points.length - 1 && points.length > 1) { const labelR = document.createElementNS(svgNS, 'text'); labelR.setAttribute('x', p.x + 10); labelR.setAttribute('y', p.y); labelR.setAttribute('dy', '.3em'); labelR.setAttribute('text-anchor', 'start'); labelR.setAttribute('class', 'label-text'); labelR.textContent = item.name; svg.appendChild(labelR); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250822/24225 2025-08-22
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250821/24224 2025-08-21
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250821/24223 2025-08-21
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250820/24222 2025-08-20 PADDING.left + (chartWidth / (weeks.length - 1)) * index; const getY = (rank) => PADDING.top + (chartHeight / (RANK_COUNT - 1)) * (rank - 1); // 週タイトルと順位ガイドを描画 const defs = document.createElementNS(svgNS, 'defs'); const style = document.createElementNS(svgNS, 'style'); style.textContent = ` .label-text { font-size: 11px; fill: #333; paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linecap: butt; stroke-linejoin: miter; } .week-title { font-size: 13px; font-weight: bold; } .rank-guide { stroke: #eee; } `; defs.appendChild(style); svg.appendChild(defs); weeks.forEach((week, i) => { const x = getX(i); const title = document.createElementNS(svgNS, 'text'); title.setAttribute('x', x); title.setAttribute('y', 20); title.setAttribute('text-anchor', 'middle'); title.setAttribute('class', 'week-title'); title.textContent = week; svg.appendChild(title); }); for(let i=1; i { const color = colors[i % colors.length]; const points = []; anime.ranks.forEach((rank, weekIndex) => { if (rank !== null) { points.push({ x: getX(weekIndex), y: getY(rank), weekIndex: weekIndex }); } }); if (points.length === 0) return; // 線を描画 for (let j = 0; j < points.length - 1; j++) { if (points[j+1].weekIndex - points[j].weekIndex === 1) { //連続した週か const line = document.createElementNS(svgNS, 'path'); line.setAttribute('d', `M ${points[j].x} ${points[j].y} L ${points[j+1].x} ${points[j+1].y}`); line.setAttribute('class', 'line'); line.setAttribute('style', `stroke: ${color};`); svg.appendChild(line); } } // 点とラベルを描画 points.forEach((p, k) => { const dot = document.createElementNS(svgNS, 'circle'); dot.setAttribute('cx', p.x); dot.setAttribute('cy', p.y); dot.setAttribute('r', 5); dot.setAttribute('class', 'dot'); dot.setAttribute('style', `fill:${color};`); svg.appendChild(dot); // 最初と最後の点にだけラベルを表示 if (k === 0) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x - 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'end'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } if (k === points.length - 1 && points.length > 1) { const label = document.createElementNS(svgNS, 'text'); label.setAttribute('x', p.x + 10); label.setAttribute('y', p.y); label.setAttribute('dy', '.3em'); label.setAttribute('text-anchor', 'start'); label.setAttribute('class', 'label-text'); label.textContent = anime.name; svg.appendChild(label); } }); }); })();]]>
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250820/24221 2025-08-20
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250815/24220 2025-08-15
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250815/24219 2025-08-15
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250814/24218 2025-08-14
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250813/24217 2025-08-13
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250812/24216 2025-08-12
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250807/24215 2025-08-07
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250807/24214 2025-08-07
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250806/24213 2025-08-06
- 倭人速報_倭国の「今」の話題をXランキングと記事で紹介! https://www.mayuer.com/pickup/20250805/24212 2025-08-05