Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Cria visualizações de dados de qualidade profissional com Python no tema Evolution (fundo escuro, acento
.claude/skills/evolution-foundation-data-create-viz/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 118% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 149% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 169% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 196% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 190% | 0% |
Cria visualizações de dados de qualidade profissional usando Python. Gera gráficos a partir de dados com boas práticas de clareza, precisão e design no tema Evolution.
/data-create-viz <fonte de dados> [tipo de gráfico] [instruções adicionais]Determinar:
Se fonte de dados do workspace (Stripe, Omie, Licensing, Evo CRM):
Se dados forem colados ou enviados como arquivo:
Se dados vierem de uma análise anterior na conversa:
Se o usuário não especificou um tipo de gráfico, recomendar um com base nos dados e na pergunta:
| Relacionamento dos Dados | Gráfico Recomendado | |---|---| | Tendência ao longo do tempo | Gráfico de linha | | Comparação entre categorias | Gráfico de barras (horizontal se muitas categorias) | | Composição parte-todo | Barras empilhadas ou área (evitar pizza a menos que <6 categorias) | | Distribuição de valores | Histograma ou box plot | | Correlação entre duas variáveis | Scatter plot | | Comparação de duas variáveis ao longo do tempo | Linha de eixo duplo ou barras agrupadas | | Dados geográficos | Mapa coroplético | | Ranking | Gráfico de barras horizontal | | Fluxo ou processo | Diagrama Sankey | | Matriz de relacionamentos | Heatmap |
Explicar brevemente a recomendação se o usuário não especificou.
Escrever código Python usando uma destas bibliotecas com base na necessidade:
Tema Evolution Dark — Configuração Base:
pythonimport matplotlib.pyplot as plt import matplotlib.patches as mpatches import seaborn as sns import pandas as pd import numpy as np # ── Tema Evolution Dark ────────────────────────────────────────── EVO_BG = '#0A0A0A' EVO_SURFACE = '#1A1A1A' EVO_ACCENT = '#00FFA7' EVO_TEXT = '#F0F0F0' EVO_MUTED = '#666666' EVO_BORDER = '#2A2A2A' EVO_PALETTE = [ '#00FFA7', # Acento principal Evolution '#4C9FE8', # Azul '#FFB547', # Âmbar '#FF6B6B', # Vermelho '#A78BFA', # Roxo '#34D399', # Verde esmeralda '#FB923C', # Laranja ] # Configurar estilo global plt.rcParams.update({ 'figure.facecolor': EVO_BG, 'axes.facecolor': EVO_SURFACE, 'axes.edgecolor': EVO_BORDER, 'axes.labelcolor': EVO_MUTED, 'axes.titlecolor': EVO_TEXT, 'xtick.color': EVO_MUTED, 'ytick.color': EVO_MUTED, 'text.color': EVO_TEXT, 'grid.color': '#222222', 'grid.alpha': 0.8, 'legend.facecolor': '#1A1A1A', 'legend.edgecolor': EVO_BORDER, 'legend.labelcolor': EVO_TEXT, 'font.family': 'DejaVu Sans', # Fallback para Inter 'figure.dpi': 150, }) def apply_evo_style(ax): """Aplicar estilo Evolution a um eixo.""" ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False) ax.spines['left'].set_color(EVO_BORDER) ax.spines['bottom'].set_color(EVO_BORDER) ax.grid(True, alpha=0.3, color='#2A2A2A', linestyle='-', linewidth=0.5) ax.set_axisbelow(True)
Requisitos de código:
python# Criar figura com tamanho apropriado fig, ax = plt.subplots(figsize=(12, 6), facecolor=EVO_BG) # [código específico do gráfico] # Sempre incluir: ax.set_title('Título Claro e Descritivo', fontsize=14, fontweight='bold', color=EVO_TEXT, pad=16) ax.set_xlabel('Label do Eixo X', fontsize=11, color=EVO_MUTED) ax.set_ylabel('Label do Eixo Y', fontsize=11, color=EVO_MUTED) # Aplicar estilo Evolution apply_evo_style(ax) # Formatar números adequadamente # - Percentuais: '45,2%' não '0,452' # - Moeda BRL: 'R$ 1,2M' não '1200000' # - Moeda USD: '$1.2M' não '1200000' # - Números grandes: '2,3K' ou '1,5M' não '2300' ou '1500000' plt.tight_layout(pad=2.0) plt.savefig('nome_do_grafico.png', dpi=150, bbox_inches='tight', facecolor=EVO_BG) plt.show()
Cores:
Tipografia:
Layout:
Precisão:
pythonimport matplotlib.pyplot as plt import matplotlib.dates as mdates import pandas as pd fig, ax = plt.subplots(figsize=(12, 6), facecolor=EVO_BG) # Plotar linhas com estilo Evolution for i, (col, label) in enumerate(series): ax.plot(df['data'], df[col], color=EVO_PALETTE[i], linewidth=2.5, label=label, marker='o', markersize=4, markerfacecolor=EVO_BG, markeredgecolor=EVO_PALETTE[i], markeredgewidth=1.5) # Área sob a linha (sutil) ax.fill_between(df['data'], df[col], alpha=0.08, color=EVO_PALETTE[i]) # Destacar o último ponto last_val = df[col].iloc[-1] ax.annotate(f'R$ {last_val/1e3:.1f}K', xy=(df['data'].iloc[-1], last_val), xytext=(8, 0), textcoords='offset points', color=EVO_ACCENT, fontsize=10, fontweight='bold') ax.xaxis.set_major_formatter(mdates.DateFormatter('%b/%y')) plt.xticks(rotation=0) apply_evo_style(ax) ax.set_title('Tendência de MRR — Últimos 12 Meses', fontsize=14, fontweight='bold', color=EVO_TEXT, pad=16) ax.legend(loc='upper left') plt.tight_layout() plt.savefig('mrr_trend.png', dpi=150, bbox_inches='tight', facecolor=EVO_BG)
pythonfig, ax = plt.subplots(figsize=(10, 6), facecolor=EVO_BG) # Barras horizontais para muitas categorias categorias = df['plano'].values valores = df['total'].values # Ordenar por valor idx = np.argsort(valores) categorias, valores = categorias[idx], valores[idx] # Colorir a maior barra com acento Evolution cores = [EVO_ACCENT if v == valores.max() else '#2A4A3A' for v in valores] bars = ax.barh(categorias, valores, color=cores, edgecolor='none', height=0.6) # Adicionar labels de valor for bar, val in zip(bars, valores): ax.text(val + valores.max() * 0.01, bar.get_y() + bar.get_height()/2, f'{val:,.0f}', va='center', color=EVO_TEXT, fontsize=10) apply_evo_style(ax) ax.set_xlabel('Total', color=EVO_MUTED) ax.set_title('Instâncias por Versão', fontsize=14, fontweight='bold', color=EVO_TEXT, pad=16) ax.grid(True, axis='x', alpha=0.3) plt.tight_layout() plt.savefig('instancias_versao.png', dpi=150, bbox_inches='tight', facecolor=EVO_BG)
pythonimport seaborn as sns fig, ax = plt.subplots(figsize=(10, 8), facecolor=EVO_BG) # Heatmap com tema escuro cmap = sns.diverging_palette(150, 0, s=80, l=40, center='light', as_cmap=True) sns.heatmap(pivot_df, ax=ax, cmap='RdYlGn', annot=True, fmt='.0f', linewidths=1, linecolor=EVO_BG, cbar_kws={'shrink': 0.8}) ax.set_facecolor(EVO_SURFACE) ax.tick_params(colors=EVO_MUTED) ax.set_title('Volume por Dia e Hora', fontsize=14, fontweight='bold', color=EVO_TEXT, pad=16) plt.tight_layout() plt.savefig('heatmap_volume.png', dpi=150, bbox_inches='tight', facecolor=EVO_BG)
pythonfig, ax1 = plt.subplots(figsize=(12, 6), facecolor=EVO_BG) ax2 = ax1.twinx() # Barras para volume (eixo esquerdo) ax1.bar(df['mes'], df['instancias'], color='#2A4A3A', alpha=0.8, label='Novas Instâncias') ax1.set_ylabel('Novas Instâncias', color=EVO_MUTED) ax1.tick_params(axis='y', colors=EVO_MUTED) # Linha para taxa (eixo direito) ax2.plot(df['mes'], df['churn_pct'], color=EVO_ACCENT, linewidth=2.5, marker='o', markersize=5, markerfacecolor=EVO_BG, markeredgecolor=EVO_ACCENT, label='Churn (%)', zorder=5) ax2.set_ylabel('Churn (%)', color=EVO_ACCENT) ax2.tick_params(axis='y', colors=EVO_ACCENT) ax1.set_facecolor(EVO_SURFACE) apply_evo_style(ax1) # Legenda combinada handles = [ mpatches.Patch(color='#2A4A3A', label='Novas Instâncias'), plt.Line2D([0], [0], color=EVO_ACCENT, linewidth=2, label='Churn (%)'), ] ax1.legend(handles=handles, loc='upper left', facecolor='#1A1A1A', edgecolor=EVO_BORDER) ax1.set_title('Crescimento vs Churn', fontsize=14, fontweight='bold', color=EVO_TEXT, pad=16) plt.tight_layout() plt.savefig('crescimento_churn.png', dpi=150, bbox_inches='tight', facecolor=EVO_BG)
pythonfig, ax = plt.subplots(figsize=(10, 6), facecolor=EVO_BG) ax.hist(df['valor'], bins=30, color=EVO_ACCENT, alpha=0.8, edgecolor=EVO_BG, linewidth=0.5) # Linha de mediana e média mediana = df['valor'].median() media = df['valor'].mean() ax.axvline(mediana, color='#FFB547', linewidth=2, linestyle='--', label=f'Mediana: R$ {mediana:,.0f}') ax.axvline(media, color='#FF6B6B', linewidth=2, linestyle=':', label=f'Média: R$ {media:,.0f}') apply_evo_style(ax) ax.legend(facecolor='#1A1A1A', edgecolor=EVO_BORDER) ax.set_xlabel('Valor (R$)', color=EVO_MUTED) ax.set_ylabel('Frequência', color=EVO_MUTED) ax.set_title('Distribuição de MRR por Cliente', fontsize=14, fontweight='bold', color=EVO_TEXT, pad=16) plt.tight_layout() plt.savefig('distribuicao_mrr.png', dpi=150, bbox_inches='tight', facecolor=EVO_BG)
pythonimport plotly.graph_objects as go import plotly.express as px # Layout tema Evolution para Plotly evo_layout = dict( paper_bgcolor='#0A0A0A', plot_bgcolor='#1A1A1A', font=dict(color='#F0F0F0', family='Inter, sans-serif'), xaxis=dict(gridcolor='#2A2A2A', linecolor='#2A2A2A'), yaxis=dict(gridcolor='#2A2A2A', linecolor='#2A2A2A'), legend=dict(bgcolor='#1A1A1A', bordercolor='#2A2A2A'), colorway=EVO_PALETTE, ) fig = go.Figure() fig.add_trace(go.Scatter( x=df['data'], y=df['mrr'], mode='lines+markers', name='MRR', line=dict(color='#00FFA7', width=2.5), marker=dict(color='#0A0A0A', size=6, line=dict(color='#00FFA7', width=2)), fill='tozeroy', fillcolor='rgba(0, 255, 167, 0.08)', hovertemplate='<b>%{x}</b><br>MRR: R$ %{y:,.0f}<extra></extra>' )) fig.update_layout( title=dict(text='Tendência de MRR', font=dict(size=16, color='#F0F0F0')), **evo_layout ) fig.write_html('mrr_interativo.html') fig.show()
/data-create-viz Mostrar MRR mensal dos últimos 12 meses como gráfico de linha com a tendência destacada/data-create-viz Aqui estão nossos dados de instâncias por país [cola os dados]. Criar gráfico de barras horizontal ranking por total./data-create-viz Consultar os dados de churn do Stripe e criar um heatmap de taxa de churn por cohort (mês de cadastro vs. mês de churn)/data-create-viz Dados do Licensing — criar grid 2x2 mostrando: distribuição por versão, tendência de instâncias ativas, mapa de países, e crescimento semanaldata-build-dashboard em vez desta skill| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-02 | fail→pass | 14,640 | 11,109 | -24% | 1 | 1 | 0% | 2,691 | 5,867 | +118% | 0 | 0 | — |
case-09 | fail→pass | 14,873 | 13,909 | -6% | 1 | 1 | 0% | 2,859 | 7,112 | +149% | 0 | 0 | — |
case-01 | fail→fail | 15,080 | 16,407 | +9% | 1 | 1 | 0% | 2,865 | 7,810 | +173% | 0 | 0 | — |
case-03 | fail→pass | 15,615 | 14,532 | -7% | 1 | 1 | 0% | 2,747 | 7,382 | +169% | 0 | 0 | — |
case-04 | fail→pass | 11,799 | 10,867 | -8% | 1 | 1 | 0% | 2,180 | 6,457 | +196% | 0 | 0 | — |
case-05 | fail→pass | 13,071 | 14,250 | +9% | 1 | 1 | 0% | 2,427 | 7,040 | +190% | 0 | 0 | — |
case-06 | pass→pass | 12,943 | 14,364 | +11% | 1 | 1 | 0% | 2,478 | 7,320 | +195% | 0 | 0 | — |
case-07 | fail→pass | 17,030 | 14,631 | -14% | 1 | 1 | 0% | 3,310 | 7,306 | +121% | 0 | 0 | — |
case-08 | pass→pass | 14,958 | 13,105 | -12% | 1 | 1 | 0% | 2,741 | 7,100 | +159% | 0 | 0 | — |
case-10 | fail→pass | 10,118 | 11,288 | +12% | 1 | 1 | 0% | 2,121 | 6,855 | +223% | 0 | 0 | — |
case-11 | fail→pass | 13,745 | 9,857 | -28% | 1 | 1 | 0% | 2,548 | 6,605 | +159% | 0 | 0 | — |
case-12 | fail→pass | 11,216 | 8,563 | -24% | 1 | 1 | 0% | 1,949 | 6,180 | +217% | 0 | 0 | — |
case-13 | pass→pass | 11,775 | 9,174 | -22% | 1 | 1 | 0% | 2,301 | 6,257 | +172% | 0 | 0 | — |
case-14 | fail→pass | 11,814 | 10,946 | -7% | 1 | 1 | 0% | 2,122 | 6,601 | +211% | 0 | 0 | — |
case-15 | fail→fail | 20,398 | 11,159 | -45% | 1 | 1 | 0% | 3,719 | 6,595 | +77% | 0 | 0 | — |
case-16 | fail→pass | 13,643 | 12,387 | -9% | 1 | 1 | 0% | 2,555 | 6,895 | +170% | 0 | 0 | — |
case-17 | fail→pass | 12,926 | 15,844 | +23% | 1 | 1 | 0% | 2,690 | 7,839 | +191% | 0 | 0 | — |
case-18 | pass→pass | 12,537 | 11,281 | -10% | 1 | 1 | 0% | 2,335 | 6,665 | +185% | 0 | 0 | — |
case-19 | fail→fail | 15,869 | 16,205 | +2% | 1 | 1 | 0% | 3,000 | 7,676 | +156% | 0 | 0 | — |
case-20 | fail→fail | 27,774 | 27,058 | -3% | 1 | 1 | 0% | 6,179 | 10,636 | +72% | 0 | 0 | — |
case-21 | fail→fail | 18,554 | 13,504 | -27% | 1 | 1 | 0% | 3,190 | 6,772 | +112% | 0 | 0 | — |
case-22 | fail→fail | 23,676 | 16,525 | -30% | 1 | 1 | 0% | 2,749 | 7,810 | +184% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +55 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.