{
  "schemaVersion": "1.0",
  "item": {
    "slug": "data-viz",
    "name": "Data Viz",
    "source": "tencent",
    "type": "skill",
    "category": "数据分析",
    "sourceUrl": "https://clawhub.ai/ianalloway/data-viz",
    "canonicalUrl": "https://clawhub.ai/ianalloway/data-viz",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/data-viz",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=data-viz",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/data-viz"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/data-viz",
    "agentPageUrl": "https://openagent3.xyz/skills/data-viz/agent",
    "manifestUrl": "https://openagent3.xyz/skills/data-viz/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/data-viz/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Data Visualization",
        "body": "Create terminal-based charts and visualizations from CSV, JSON, or piped data."
      },
      {
        "title": "Quick Visualizations with YouPlot",
        "body": "YouPlot (uplot) creates Unicode charts in the terminal."
      },
      {
        "title": "Bar Chart",
        "body": "echo -e \"Apple,30\\nBanana,45\\nCherry,20\\nDate,35\" | uplot bar -d, -t \"Fruit Sales\""
      },
      {
        "title": "Line Chart",
        "body": "seq 1 20 | awk '{print $1, sin($1/3)*10+10}' | uplot line -t \"Sine Wave\""
      },
      {
        "title": "Histogram",
        "body": "awk 'BEGIN{for(i=0;i<1000;i++)print rand()}' | uplot hist -t \"Random Distribution\" -n 20"
      },
      {
        "title": "Scatter Plot",
        "body": "awk 'BEGIN{for(i=0;i<100;i++)print rand()*100, rand()*100}' | uplot scatter -t \"Random Points\""
      },
      {
        "title": "From CSV Files",
        "body": "# Bar chart from CSV\ncat sales.csv | uplot bar -d, -H -t \"Monthly Sales\"\n\n# Line chart with headers\ncat timeseries.csv | uplot line -d, -H -t \"Stock Price\""
      },
      {
        "title": "From JSON (with jq)",
        "body": "# Extract data from JSON and plot\ncurl -s \"https://api.example.com/data\" | jq -r '.items[] | \"\\(.name),\\(.value)\"' | uplot bar -d,"
      },
      {
        "title": "Termgraph (Python Alternative)",
        "body": "Simple horizontal bar charts:\n\necho -e \"2020 50\\n2021 75\\n2022 90\\n2023 120\" | termgraph\n\nWith colors:\n\necho -e \"Sales 150\\nCosts 80\\nProfit 70\" | termgraph --color green"
      },
      {
        "title": "Gnuplot (Advanced)",
        "body": "For publication-quality charts:\n\n# Quick line plot\ngnuplot -e \"set terminal dumb; plot sin(x)\"\n\n# From data file\ngnuplot -e \"set terminal dumb; plot 'data.txt' with lines\""
      },
      {
        "title": "Sparklines",
        "body": "Inline mini-charts:\n\n# Using spark (if installed)\necho \"1 5 22 13 5\" | spark\n# Output: ▁▂█▅▂\n\n# Pure bash sparkline\ndata=\"1 5 22 13 5\"; min=$(echo $data | tr ' ' '\\n' | sort -n | head -1); max=$(echo $data | tr ' ' '\\n' | sort -n | tail -1); for n in $data; do printf \"\\u258$((7-7*($n-$min)/($max-$min)))\"; done; echo"
      },
      {
        "title": "ASCII Tables",
        "body": "Format data as tables:\n\n# Using column\necho -e \"Name,Score,Grade\\nAlice,95,A\\nBob,82,B\\nCarol,78,C\" | column -t -s,\n\n# Using csvlook (csvkit)\ncat data.csv | csvlook"
      },
      {
        "title": "Stock Price Chart",
        "body": "# Fetch and plot stock data (using Alpha Vantage free API)\ncurl -s \"https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=AAPL&apikey=demo\" | \\\n  jq -r '.[\"Time Series (Daily)\"] | to_entries | .[:20] | reverse | .[] | \"\\(.key) \\(.value[\"4. close\"])\"' | \\\n  uplot line -t \"AAPL Stock Price\""
      },
      {
        "title": "System Metrics",
        "body": "# CPU usage over time\nfor i in {1..20}; do\n  top -bn1 | grep \"Cpu(s)\" | awk '{print 100-$8}'\n  sleep 1\ndone | uplot line -t \"CPU Usage %\""
      },
      {
        "title": "API Response Times",
        "body": "# Measure and plot response times\nfor i in {1..10}; do\n  curl -s -o /dev/null -w \"%{time_total}\\n\" https://example.com\ndone | uplot line -t \"Response Time (s)\""
      },
      {
        "title": "Tips",
        "body": "Use -d, for comma-delimited data, -d'\\t' for tabs\nUse -H when your data has headers\nPipe through head or tail to limit data points\nCombine with jq for JSON data extraction\nUse watch for live updating charts: watch -n1 'command | uplot bar'"
      }
    ],
    "body": "Data Visualization\n\nCreate terminal-based charts and visualizations from CSV, JSON, or piped data.\n\nQuick Visualizations with YouPlot\n\nYouPlot (uplot) creates Unicode charts in the terminal.\n\nBar Chart\necho -e \"Apple,30\\nBanana,45\\nCherry,20\\nDate,35\" | uplot bar -d, -t \"Fruit Sales\"\n\nLine Chart\nseq 1 20 | awk '{print $1, sin($1/3)*10+10}' | uplot line -t \"Sine Wave\"\n\nHistogram\nawk 'BEGIN{for(i=0;i<1000;i++)print rand()}' | uplot hist -t \"Random Distribution\" -n 20\n\nScatter Plot\nawk 'BEGIN{for(i=0;i<100;i++)print rand()*100, rand()*100}' | uplot scatter -t \"Random Points\"\n\nFrom CSV Files\n# Bar chart from CSV\ncat sales.csv | uplot bar -d, -H -t \"Monthly Sales\"\n\n# Line chart with headers\ncat timeseries.csv | uplot line -d, -H -t \"Stock Price\"\n\nFrom JSON (with jq)\n# Extract data from JSON and plot\ncurl -s \"https://api.example.com/data\" | jq -r '.items[] | \"\\(.name),\\(.value)\"' | uplot bar -d,\n\nTermgraph (Python Alternative)\n\nSimple horizontal bar charts:\n\necho -e \"2020 50\\n2021 75\\n2022 90\\n2023 120\" | termgraph\n\n\nWith colors:\n\necho -e \"Sales 150\\nCosts 80\\nProfit 70\" | termgraph --color green\n\nGnuplot (Advanced)\n\nFor publication-quality charts:\n\n# Quick line plot\ngnuplot -e \"set terminal dumb; plot sin(x)\"\n\n# From data file\ngnuplot -e \"set terminal dumb; plot 'data.txt' with lines\"\n\nSparklines\n\nInline mini-charts:\n\n# Using spark (if installed)\necho \"1 5 22 13 5\" | spark\n# Output: ▁▂█▅▂\n\n# Pure bash sparkline\ndata=\"1 5 22 13 5\"; min=$(echo $data | tr ' ' '\\n' | sort -n | head -1); max=$(echo $data | tr ' ' '\\n' | sort -n | tail -1); for n in $data; do printf \"\\u258$((7-7*($n-$min)/($max-$min)))\"; done; echo\n\nASCII Tables\n\nFormat data as tables:\n\n# Using column\necho -e \"Name,Score,Grade\\nAlice,95,A\\nBob,82,B\\nCarol,78,C\" | column -t -s,\n\n# Using csvlook (csvkit)\ncat data.csv | csvlook\n\nReal-World Examples\nStock Price Chart\n# Fetch and plot stock data (using Alpha Vantage free API)\ncurl -s \"https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=AAPL&apikey=demo\" | \\\n  jq -r '.[\"Time Series (Daily)\"] | to_entries | .[:20] | reverse | .[] | \"\\(.key) \\(.value[\"4. close\"])\"' | \\\n  uplot line -t \"AAPL Stock Price\"\n\nSystem Metrics\n# CPU usage over time\nfor i in {1..20}; do\n  top -bn1 | grep \"Cpu(s)\" | awk '{print 100-$8}'\n  sleep 1\ndone | uplot line -t \"CPU Usage %\"\n\nAPI Response Times\n# Measure and plot response times\nfor i in {1..10}; do\n  curl -s -o /dev/null -w \"%{time_total}\\n\" https://example.com\ndone | uplot line -t \"Response Time (s)\"\n\nTips\nUse -d, for comma-delimited data, -d'\\t' for tabs\nUse -H when your data has headers\nPipe through head or tail to limit data points\nCombine with jq for JSON data extraction\nUse watch for live updating charts: watch -n1 'command | uplot bar'"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/ianalloway/data-viz",
    "publisherUrl": "https://clawhub.ai/ianalloway/data-viz",
    "owner": "ianalloway",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/data-viz",
    "downloadUrl": "https://openagent3.xyz/downloads/data-viz",
    "agentUrl": "https://openagent3.xyz/skills/data-viz/agent",
    "manifestUrl": "https://openagent3.xyz/skills/data-viz/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/data-viz/agent.md"
  }
}