[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FKA7X6Z0E9MSG7Y3AX0KTS":3,"skill-same:01M6FKA7X6Z0E9MSG7Y3AX0KTS":58},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":27,"publishedAt":31,"linkOnly":32,"markdownContent":33,"markdownBody":33,"frontMatter":34,"refName":35,"commitSha":36,"skillDirectory":37,"forksCount":38,"repositoryHtmlUrl":39,"repositoryHomepageUrl":40,"ownerHtmlUrl":41,"ownerBlogUrl":6,"ownerDescription":42,"updatedAt":43,"install":44,"resources":57},"01M6FKA7X6Z0E9MSG7Y3AX0KTS","data-visualization",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fynulihao\u002FAgentSkillOS\u002Fdata-visualization\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000013","分析与可视化","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":25,"taxonomyTypeDesc":26},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[28,29,30],"data visualization","visualization","data","2026-11-10 10:12:30",false,"# Data Visualization\n\n## Overview\n\nThis skill focuses on creating effective data visualizations that communicate insights clearly. It covers various visualization libraries, chart selection, and design principles for impactful data presentation.\n\n## Instructions\n\n### 1. Understand the Data\n\n- Analyze data structure and types\n- Identify key metrics and dimensions\n- Determine the story to tell\n- Consider the target audience\n\n### 2. Select Appropriate Visualization\n\n- Match chart type to data relationship\n- Consider data volume and complexity\n- Plan for interactivity needs\n- Account for accessibility\n\n### 3. Design for Clarity\n\n- Choose effective color schemes\n- Label axes and data clearly\n- Remove chart junk\n- Highlight key insights\n\n### 4. Implement and Iterate\n\n- Build visualization with chosen tool\n- Test with real data\n- Gather feedback\n- Refine based on usage\n\n## Best Practices\n\n1. **Right Chart for Data**: Match visualization to data type\n2. **Less is More**: Remove unnecessary elements\n3. **Consistent Styling**: Use coherent color schemes\n4. **Accessible Design**: Consider colorblind users\n5. **Clear Labels**: Descriptive titles and axis labels\n6. **Context Matters**: Include reference points\n7. **Interactive When Helpful**: Add tooltips and filters\n\n## Examples\n\n### Example 1: Python with Matplotlib\u002FSeaborn\n\n```python\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport pandas as pd\nimport numpy as np\n\n# Set style for professional look\nplt.style.use('seaborn-v0_8-whitegrid')\nsns.set_palette(\"husl\")\n\n# Create figure with subplots\nfig, axes = plt.subplots(2, 2, figsize=(14, 10))\n\n# Example 1: Line chart for time series\ndf_sales = pd.DataFrame({\n    'date': pd.date_range('2024-01-01', periods=12, freq='M'),\n    'revenue': [100, 120, 115, 140, 155, 170, 165, 180, 195, 210, 225, 250],\n    'target': [110, 115, 120, 130, 145, 160, 175, 185, 200, 215, 230, 245]\n})\n\nax1 = axes[0, 0]\nax1.plot(df_sales['date'], df_sales['revenue'], marker='o', linewidth=2, label='Actual')\nax1.plot(df_sales['date'], df_sales['target'], linestyle='--', linewidth=2, label='Target')\nax1.fill_between(df_sales['date'], df_sales['revenue'], df_sales['target'],\n                  alpha=0.3, where=(df_sales['revenue'] >= df_sales['target']), color='green')\nax1.fill_between(df_sales['date'], df_sales['revenue'], df_sales['target'],\n                  alpha=0.3, where=(df_sales['revenue'] \u003C df_sales['target']), color='red')\nax1.set_title('Monthly Revenue vs Target', fontsize=14, fontweight='bold')\nax1.set_xlabel('Month')\nax1.set_ylabel('Revenue ($K)')\nax1.legend()\nax1.tick_params(axis='x', rotation=45)\n\n# Example 2: Bar chart for comparison\ndf_products = pd.DataFrame({\n    'product': ['Product A', 'Product B', 'Product C', 'Product D', 'Product E'],\n    'sales': [45, 32, 28, 22, 18]\n})\n\nax2 = axes[0, 1]\ncolors = sns.color_palette(\"Blues_r\", len(df_products))\nbars = ax2.barh(df_products['product'], df_products['sales'], color=colors)\nax2.bar_label(bars, padding=3, fmt='$%.0fK')\nax2.set_title('Sales by Product', fontsize=14, fontweight='bold')\nax2.set_xlabel('Sales ($K)')\nax2.invert_yaxis()\n\n# Example 3: Scatter plot with regression\nnp.random.seed(42)\ndf_scatter = pd.DataFrame({\n    'ad_spend': np.random.uniform(10, 100, 50),\n    'conversions': lambda x: x['ad_spend'] * 2.5 + np.random.normal(0, 15, 50)\n}.__class__.__call__(pd.DataFrame({'ad_spend': np.random.uniform(10, 100, 50)})))\ndf_scatter['conversions'] = df_scatter['ad_spend'] * 2.5 + np.random.normal(0, 15, 50)\n\nax3 = axes[1, 0]\nsns.regplot(data=df_scatter, x='ad_spend', y='conversions', ax=ax3,\n            scatter_kws={'alpha': 0.6}, line_kws={'color': 'red'})\nax3.set_title('Ad Spend vs Conversions', fontsize=14, fontweight='bold')\nax3.set_xlabel('Ad Spend ($K)')\nax3.set_ylabel('Conversions')\n\n# Example 4: Pie\u002FDonut chart for composition\ndf_channels = pd.DataFrame({\n    'channel': ['Organic', 'Paid Search', 'Social', 'Email', 'Direct'],\n    'traffic': [35, 25, 20, 12, 8]\n})\n\nax4 = axes[1, 1]\nwedges, texts, autotexts = ax4.pie(\n    df_channels['traffic'],\n    labels=df_channels['channel'],\n    autopct='%1.1f%%',\n    pctdistance=0.75,\n    wedgeprops=dict(width=0.5)\n)\nax4.set_title('Traffic by Channel', fontsize=14, fontweight='bold')\n\nplt.tight_layout()\nplt.savefig('dashboard.png', dpi=150, bbox_inches='tight')\nplt.show()\n```\n\n### Example 2: Interactive Visualization with Plotly\n\n```python\nimport plotly.express as px\nimport plotly.graph_objects as go\nfrom plotly.subplots import make_subplots\nimport pandas as pd\n\n# Create interactive time series\ndf = pd.DataFrame({\n    'date': pd.date_range('2024-01-01', periods=365, freq='D'),\n    'value': (pd.Series(range(365)) * 0.1 +\n              np.sin(pd.Series(range(365)) * 0.1) * 20 +\n              np.random.normal(0, 5, 365)).cumsum()\n})\n\nfig = go.Figure()\n\nfig.add_trace(go.Scatter(\n    x=df['date'],\n    y=df['value'],\n    mode='lines',\n    name='Daily Value',\n    line=dict(color='#1f77b4', width=1.5),\n    hovertemplate='%{x|%B %d, %Y}\u003Cbr>Value: %{y:.2f}\u003Cextra>\u003C\u002Fextra>'\n))\n\n# Add moving average\ndf['ma_7'] = df['value'].rolling(7).mean()\nfig.add_trace(go.Scatter(\n    x=df['date'],\n    y=df['ma_7'],\n    mode='lines',\n    name='7-day MA',\n    line=dict(color='#ff7f0e', width=2, dash='dash')\n))\n\nfig.update_layout(\n    title='Daily Performance with Moving Average',\n    xaxis_title='Date',\n    yaxis_title='Value',\n    hovermode='x unified',\n    template='plotly_white',\n    xaxis=dict(\n        rangeselector=dict(\n            buttons=list([\n                dict(count=7, label=\"1w\", step=\"day\", stepmode=\"backward\"),\n                dict(count=1, label=\"1m\", step=\"month\", stepmode=\"backward\"),\n                dict(count=3, label=\"3m\", step=\"month\", stepmode=\"backward\"),\n                dict(step=\"all\")\n            ])\n        ),\n        rangeslider=dict(visible=True)\n    )\n)\n\nfig.write_html('interactive_chart.html')\nfig.show()\n```\n\n### Example 3: Chart Type Selection Guide\n\n```markdown\n## Chart Selection by Data Type\n\n### Comparison\n\n- **Bar Chart**: Compare values across categories\n- **Grouped Bar**: Compare multiple series across categories\n- **Bullet Chart**: Show performance against target\n\n### Distribution\n\n- **Histogram**: Show frequency distribution\n- **Box Plot**: Show distribution summary statistics\n- **Violin Plot**: Show distribution shape\n\n### Composition\n\n- **Pie\u002FDonut Chart**: Show parts of a whole (\u003C 6 categories)\n- **Stacked Bar**: Show composition across categories\n- **Treemap**: Show hierarchical composition\n\n### Relationship\n\n- **Scatter Plot**: Show correlation between two variables\n- **Bubble Chart**: Add third dimension via size\n- **Heatmap**: Show correlation matrix\n\n### Time Series\n\n- **Line Chart**: Show trends over time\n- **Area Chart**: Show cumulative trends\n- **Candlestick**: Show OHLC financial data\n\n### Geographic\n\n- **Choropleth**: Show values by region\n- **Point Map**: Show locations with values\n- **Flow Map**: Show movement between locations\n```\n\n### Example 4: Dashboard Layout Principles\n\n```python\n# Streamlit Dashboard Example\nimport streamlit as st\nimport pandas as pd\nimport plotly.express as px\n\nst.set_page_config(page_title=\"Sales Dashboard\", layout=\"wide\")\n\n# Header\nst.title(\"Sales Performance Dashboard\")\nst.markdown(\"---\")\n\n# KPI Row\ncol1, col2, col3, col4 = st.columns(4)\nwith col1:\n    st.metric(\"Total Revenue\", \"$1.2M\", \"+12%\")\nwith col2:\n    st.metric(\"Orders\", \"8,543\", \"+8%\")\nwith col3:\n    st.metric(\"Avg Order Value\", \"$140\", \"+3%\")\nwith col4:\n    st.metric(\"Conversion Rate\", \"3.2%\", \"-0.5%\")\n\nst.markdown(\"---\")\n\n# Filters\nwith st.sidebar:\n    st.header(\"Filters\")\n    date_range = st.date_input(\"Date Range\", [])\n    region = st.multiselect(\"Region\", [\"North\", \"South\", \"East\", \"West\"])\n    category = st.selectbox(\"Category\", [\"All\", \"Electronics\", \"Clothing\", \"Home\"])\n\n# Main Charts\nleft_col, right_col = st.columns([2, 1])\n\nwith left_col:\n    st.subheader(\"Revenue Trend\")\n    # Line chart here\n\nwith right_col:\n    st.subheader(\"Sales by Region\")\n    # Pie chart here\n\n# Detail Table\nst.subheader(\"Recent Orders\")\n# Data table here\n```\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fynulihao\u002FAgentSkillOS\u002Fdata-visualization",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":45,"prompt":55,"zipAvailable":56},[46,49,52],{"tool":47,"command":48},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill data-visualization",{"tool":50,"command":51},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill data-visualization",{"tool":53,"command":54},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill data-visualization","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fynulihao\u002FAgentSkillOS\u002Fdata-visualization\u002FSKILL.md",true,[],[59,71,81,90,96,103],{"skillNo":60,"name":61,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":62,"categories":63,"keywords":67,"publishedAt":31},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[64],{"categoryNo":65,"categoryName":66,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[68,69,70],"model","model hierarchy","model hierarchy skill",{"skillNo":72,"name":73,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":77,"publishedAt":31},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[76],{"categoryNo":65,"categoryName":66,"taxonomyType":20,"taxonomyTypeDesc":21},[78,79,80],"MCP","zoom","zoom mcp",{"skillNo":82,"name":83,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":31},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[87,88,89,79],"sdk","zoom apps sdk","apps",{"skillNo":91,"name":92,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":31},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[92],{"skillNo":97,"name":98,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":102,"publishedAt":31},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[101],{"categoryNo":65,"categoryName":66,"taxonomyType":20,"taxonomyTypeDesc":21},[98],{"skillNo":104,"name":105,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":108,"publishedAt":31},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[105]]