AlphaMoatによると、2026-09時点でFinancial Design Systemsのダウンロード数は2,145、スター数は2で、AIスキル全体5,078件中4,326位、デザイン・メディアでは512件中436位です。
| プラットフォーム | インストール数 | ダウンロード数 | スター数 | コメント |
|---|---|---|---|---|
| ClawHub ↗ | 62 | 2022 | - | - |
| SkillHub ↗ | 113 | 2145 | 2 | — |
プラットフォームごとに集計方法と集計時点が異なります。
配色、価格チャート、ローソク足、パーセンテージバー、スパークライン、凡例、軸、ツールチップのスタイルを扱い、十分なコントラストと赤緑だけに依存しないアクセシブルな表現を勧めます。出力は再利用可能なフロントエンドのパターンとコード例であり、自ら市場データAPIを呼び出しません。ワンラインインストーラーが変更可能なリモートコードを実行する可能性を警告しています。導入経路を確認し、版を固定してください。
資料公開日 2026-10-29
スキルのドキュメントをもとに生成した例であり、実際の実行結果ではありません。
2026-09 から集計方法を変更し、同名スキルを作者ごとに分けて集計し、全スキルを対象にしました。破線は変更前の月で、変更後のデータとは直接比較せず、変更をまたぐ増減も計算していません。
| 月 | ダウンロード数 | 前月比 | スター数 |
|---|---|---|---|
| 2026-09 | 2145 | — | 2 |
| 2026-08 | 1939 | +6.1% | 2 |
| 2026-07 | 1827 | +12.5% | 2 |
| 2026-06 | 1624 | +8.4% | 2 |
| 2026-05 | 1498 | — | 1 |
| 2026-03 | 1093 | — | - |
作者が公開した元のファイルをテキストのまま表示しています。AlphaMoat による編集や審査はしていません。リンクはクリックできません。コマンドは内容を確認してから実行してください。取得日 2026-10-23。
--- name: financial-data-visualization model: standard description: Patterns for building dark-themed financial charts and data visualizations. Covers chart theming, color scales for gains/losses, and real-time data display. Use when building trading dashboards or financial analytics. Triggers on chart theme, data visualization, financial chart, dark theme, gains losses, trading UI. --- # Financial Data Visualization Build dark-themed financial charts and visualizations that are readable, beautiful, and consistent with modern trading UIs.
---
## When to Use
- Building trading dashboards with charts
- Displaying portfolio performance
- Showing price history and trends
- Any financial data visualization
---
## Pattern 1: Chart Color Palette
```typescript
// lib/chart-theme.ts
export const chartColors = {
// Gains/Losses
positive: 'hsl(154 80% 60%)', // Green
negative: 'hsl(346 80% 62%)', // Red
neutral: 'hsl(216 90% 68%)', // Blue
// Backgrounds
background: 'hsl(222 47% 11%)',
surface: 'hsl(222 47% 15%)',
grid: 'hsl(222 47% 20%)',
// Text
textPrimary: 'hsl(210 40% 98%)',
textSecondary: 'hsl(215 20% 65%)',
textMuted: 'hsl(215 20% 45%)',
// Data series
series: [
'hsl(200 90% 65%)', // Cyan
'hsl(280 90% 65%)', // Purple
'hsl(45 90% 65%)', // Gold
'hsl(160 90% 65%)', // Teal
'hsl(320 90% 65%)', // Pink
],
};
```
---
## Pattern 2: Recharts Theme Config
```tsx
// components/charts/chart-config.ts
import { chartColors } from '@/lib/chart-theme';
export const chartConfig = {
// Axis styling
axisStyle: {
stroke: chartColors.textMuted,
fontSize: 11,
fontFamily: 'var(--font-mono)',
},
// Grid styling
gridStyle: {
stroke: chartColors.grid,
strokeDasharray: '3 3',
},
// Tooltip styling
tooltipStyle: {
backgroundColor: chartColors.surface,
border: `1px solid ${chartColors.grid}`,
borderRadius: '8px',
boxShadow: '0 4px 12px rgba(0, 0, 0, 0.3)',
},
};
// Custom tooltip component
export function ChartTooltip({ active, payload, label }: any) {
if (!active || !payload) return null;
return (
<div
className="rounded-lg border bg-popover px-3 py-2 shadow-lg"
style={chartConfig.tooltipStyle}
>
<p className="text-xs text-muted-foreground mb-1">{label}</p>
{payload.map((entry: any, index: number) => (
<p
key={index}
className="text-sm font-mono tabular-nums"
style={{ color: entry.color }}
>
{entry.name}: {formatCurrency(entry.value)}
</p>
))}
</div>
);
}
```
---
## Pattern 3: Price Chart Component
```tsx
import {
AreaChart,
Area,
XAxis,
YAxis,
Tooltip,
ResponsiveContainer,
} from 'recharts';
interface PriceChartProps {
data: { time: string; price: number }[];
isPositive?: boolean;
}
export function PriceChart({ data, isPositive = true }: PriceChartProps) {
const color = isPositive ? chartColors.positive : chartColors.negative;
return (
<ResponsiveContainer width="100%" height={200}>
<AreaChart data={data}>
<defs>
<linearGradient id="priceGradient" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stopColor={color} stopOpacity={0.3} />
<stop offset="100%" stopColor={color} stopOpacity={0} />
</linearGradient>
</defs>
<XAxis
dataKey="time"
axisLine={false}
tickLine={false}
tick={{ ...chartConfig.axisStyle }}
/>
<YAxis
domain={['auto', 'auto']}
axisLine={false}
tickLine={false}
tick={{ ...chartConfig.axisStyle }}
tickFormatter={(value) => formatCompact(value)}
/>
<Tooltip content={<ChartTooltip />} />
<Area
type="monotone"
dataKey="price"
stroke={color}
strokeWidth={2}
fill="url(#priceGradient)"
/>
</AreaChart>
</ResponsiveContainer>
);
}
```
---
## Pattern 4: Candlestick Colors
```typescript
export const candlestickColors = {
up: {
fill: 'hsl(154 80% 60%)',
stroke: 'hsl(154 80% 50%)',
},
down: {
fill: 'hsl(346 80% 62%)',
stroke: 'hsl(346 80% 52%)',
},
wick: 'hsl(215 20% 45%)',
};
// Usage with lightweight-charts or similar
const candlestickSeries = chart.addCandlestickSeries({
upColor: candlestickColors.up.fill,
downColor: candlestickColors.down.fill,
borderUpColor: candlestickColors.up.stroke,
borderDownColor: candlestickColors.down.stroke,
wickUpColor: candlestickColors.wick,
wickDownColor: candlestickColors.wick,
});
```
---
## Pattern 5: Percentage Bar
```tsx
interface PercentageBarProps {
value: number; // -100 to 100
showLabel?: boolean;
}
export function PercentageBar({ value, showLabel = true }: PercentageBarProps) {
const isPositive = value >= 0;
const absValue = Math.min(Math.abs(value), 100);
return (
<div className="flex items-center gap-2">
{/* Negative side */}
<div className="flex-1 flex justify-end">
{!isPositive && (
<div
className="h-2 rounded-l bg-destructive"
style={{ width: `${absValue}%` }}
/>
)}
</div>
{/* Center divider */}
<div className="w-px h-4 bg-border" />
{/* Positive side */}
<div className="flex-1">
{isPositive && (
<div
className="h-2 rounded-r bg-success"
style={{ width: `${absValue}%` }}
/>
)}
</div>
{showLabel && (
<span
className={cn(
'text-xs font-mono tabular-nums w-12 text-right',
isPositive ? 'text-success' : 'text-destructive'
)}
>
{formatPercentage(value)}
</span>
)}
</div>
);
}
```
---
## Pattern 6: Mini Sparkline
```tsx
interface SparklineProps {
data: number[];
width?: number;
height?: number;
}
export function Sparkline({ data, width = 80, height = 24 }: SparklineProps) {
const first = data[0];
const last = data[data.length - 1];
const isPositive = last >= first;
const color = isPositive ? chartColors.positive : chartColors.negative;
const min = Math.min(...data);
const max = Math.max(...data);
const range = max - min || 1;
const points = data
.map((value, i) => {
const x = (i / (data.length - 1)) * width;
const y = height - ((value - min) / range) * height;
return `${x},${y}`;
})
.join(' ');
return (
<svg width={width} height={height} className="overflow-visible">
<polyline
points={points}
fill="none"
stroke={color}
strokeWidth={1.5}
strokeLinecap="round"
strokeLinejoin="round"
/>
</svg>
);
}
```
---
## Pattern 7: Chart Legend
```tsx
interface LegendItem {
label: string;
color: string;
value?: string;
}
export function ChartLegend({ items }: { items: LegendItem[] }) {
return (
<div className="flex flex-wrap gap-4">
{items.map((item) => (
<div key={item.label} className="flex items-center gap-2">
<div
className="size-3 rounded-full"
style={{ backgroundColor: item.color }}
/>
<span className="text-xs text-muted-foreground">{item.label}</span>
{item.value && (
<span className="text-xs font-mono">{item.value}</span>
)}
</div>
))}
</div>
);
}
```
---
## Related Skills
- **Meta-skill:** [ai/skills/meta/design-system-creation/](../../meta/design-system-creation/) — Complete design system workflow
- [animated-financial-display](../animated-financial-display/) — Number animations and value flash effects
- [dual-stream-architecture](../../realtime/dual-stream-architecture/) — Real-time data streaming patterns
---
## NEVER Do
- **Use light theme colors** — Ensure sufficient contrast on dark backgrounds
- **Use red/green without considering colorblind users** — Add shapes or patterns
- **Skip grid lines** — They help read values
- **Use thick strokes** — 1-2px is optimal for data lines
- **Animate charts on every data point** — Reserve animation for initial load
---
## Quick Reference
```tsx
// Color assignment
const color = value >= 0 ? chartColors.positive : chartColors.negative;
// Gradient definition
<linearGradient id="gradient" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stopColor={color} stopOpacity={0.3} />
<stop offset="100%" stopColor={color} stopOpacity={0} />
</linearGradient>
// Axis styling
<XAxis tick={{ fill: chartColors.textMuted, fontSize: 11 }} />
// Tooltip styling
<Tooltip contentStyle={{ background: chartColors.surface }} />
```
ContextWeaveアーキテクチャ図ワンショット生成
Nano Banana Pro で画像を生成・編集するスクリプト型のスキルです。
whisper コマンドで音声をローカルで文字起こしするスキルです。
MCP サーバー経由で図を生成、編集するスキルです。
洗練された画面のための設計知見と実装指南をまとめたスキルで、レイアウトからフロー、トークン、フロントエンドの変更まで扱います。
複数の動画モデル API をまたぐ AI 動画生成と編成のスキルです。
ffmpeg を使って動画からフレームを取り出し、手早い確認用のサムネイルを作るスキルです。
ローカルの Whisper で音声ファイルを文字に起こすスキルで、モデルのダウンロード後は完全にオフラインで動きます。
観点ごとにコードの品質と安全性を確認するレビュースキルです。
e2e-testing-patterns は重要な利用者の操作を検査する Playwright・Cypress の例です。
UI Design:レイアウト、タイポグラフィ、色、余白、アクセシビリティ、コンポーネント設計を支援します。
コードの品質に規律を定めるスキルです。
Mermaid のテキスト記法で、バージョン管理できるソフトウェア図を作ります。
データ月:2026-09 · ダウンロード数、スター数、インストール数は公開スキルレジストリ(ClawHub、SkillHub)から月単位で集計しています。詳しくはデータの方法論をご覧ください。