Diagrama de Venn / Euler

Sobre diagramas de Venn e Euler

Um diagrama de Venn usa círculos sobrepostos para mostrar todos os relacionamentos lógicos possíveis entre uma coleção de conjuntos — independentemente de cada interseção conter elementos ou não. Um diagrama de Euler é a forma mais geral: os círculos são desenhados apenas onde os relacionamentos realmente existem, portanto um conjunto totalmente contido em outro é mostrado como um círculo aninhado, e dois conjuntos disjuntos não se sobrepõem. John Venn introduziu a forma de sobreposição fixa em 1880; Leonhard Euler descreveu a forma geral de contenção de conjuntos na década de 1760.

Educadores os usam para ensinar teoria de conjuntos; analistas de dados os utilizam para mostrar sobreposição de audiência entre segmentos (lista de e-mail ∩ usuários mobile ∩ assinantes pagantes); pesquisadores em biologia, linguística e medicina usam diagramas de Euler para mapear hierarquias taxonômicas ou conceituais. O Schematex suporta os quatro padrões de uso comuns em uma única DSL — contagens declarativas, enumeração de elementos, rótulos de região e relações de subconjunto/disjunto/sobreposição de Euler — e pode misturá-los em um único diagrama. Veja o artigo da Wikipedia sobre diagramas de Venn e diagramas de Euler para mais contexto.

venn·§
↘ preview
100%
Customer Segments — Q3 2025 Venn/Euler diagram "Customer Segments — Q3 2025": 3 sets, 7 regions. Customer Segments — Q3 2025 Set Email subscribers Set Paid users Set Mobile app users Email subscribers Paid users Mobile app users 1840 920 2100 650 12400 3200 8700
UTF-8 · LF · 11 lines · 318 chars✓ parsed·9.3 ms·3.6 KB SVG

1. Seu primeiro diagrama de Venn

O menor diagrama útil: dois conjuntos, uma sobreposição, duas regiões exclusivas.

venn·§
↘ preview
100%
Support channels Venn/Euler diagram "Support channels": 2 sets, 3 regions. Support channels Set Email support Set Live chat Email support Live chat 320 1450 890
UTF-8 · LF · 6 lines · 140 chars✓ parsed·2.5 ms·2.3 KB SVG

Quatro regras cobrem 80% do uso:

  1. Comece com venn, opcionalmente seguido de um título entre aspas.
  2. Declare cada conjunto com set ID "Label" — o id é usado internamente, o rótulo aparece no diagrama.
  3. Atribua valores às regiões usando A & B : valor para interseções e A only : valor para regiões exclusivas.
  4. Configure a aparência com linhas config:; o modo do diagrama (venn vs euler) pode ser definido explicitamente ou deixado como auto.

Comentários devem começar com # em sua própria linha.


2. Conjuntos

Uma declaração de conjunto cria um círculo no diagrama.

set ID "Label" [color: "#hex"]
ParteObrigatórioNotas
IDSimDeve corresponder a [A-Za-z][A-Za-z0-9_-]*
"Label"SimString entre aspas exibida no círculo
[color: "#hex"]NãoSubstitui a cor de preenchimento deste conjunto

Os conjuntos devem ser declarados antes de serem referenciados em linhas de região ou relação.

venn·§
↘ preview
100%
Programming paradigms Venn/Euler diagram "Programming paradigms": 3 sets, 7 regions. Programming paradigms Set Object-Oriented Set Functional Set Logic Object-Oriented Functional Logic 180 45 90 12 620 340 95
UTF-8 · LF · 11 lines · 264 chars✓ parsed·3.0 ms·3.3 KB SVG

3. Regiões

Uma região atribui um valor a uma interseção ou área exclusiva. Os quatro modos da DSL podem ser misturados em um único diagrama.

3.1 Modo declarativo — contagens e percentuais

Atribua um número ou percentual a uma região nomeada. A chave da região é uma lista de ids de conjuntos separados por & (para interseções) ou ID only (para a parte desse conjunto não coberta por nenhum outro conjunto).

A & B : 320          # contagem inteira
A & B & C : 45       # interseção tripla
A only : 1450        # A menos todos os outros conjuntos
A & B : 18.5%        # valor em percentual
venn·§
↘ preview
100%
Market research Venn/Euler diagram "Market research": 3 sets, 7 regions. Market research Set Awareness Set Consideration Set Conversion Awareness Consideration Conversion 3400 890 210 150 18200 2100 540
UTF-8 · LF · 11 lines · 318 chars✓ parsed·2.6 ms·3.6 KB SVG

3.2 Rótulos de região (texto)

Use o prefixo da palavra-chave region e atribua uma string entre aspas em vez de um número. A string é renderizada dentro da região.

region A & B : "Nurture"
region B & C : "Convert"
region A & B & C : "Loyal customer"
venn·§
↘ preview
100%
Go-to-market funnel Venn/Euler diagram "Go-to-market funnel": 3 sets, 5 regions. Go-to-market funnel Set Awareness Set Consideration Set Purchase Awareness Consideration Purchase Nurture Convert Cold audience Loyal Direct buyers
UTF-8 · LF · 9 lines · 281 chars✓ parsed·9.5 ms·3.0 KB SVG

3.3 Modo de enumeração — listas de elementos

Liste os elementos reais de cada conjunto. O Schematex calcula todas as interseções automaticamente.

ID = { element1, element2, element3 }

Os elementos são palavras simples ou strings entre aspas separadas por vírgula. Os conjuntos de enumeração não precisam de uma declaração explícita set — a declaração é implícita.

venn·§
↘ preview
100%
Full-stack team skills Venn/Euler diagram "Full-stack team skills": 3 sets, 5 regions. Full-stack team skills Set Frontend Set Backend Set DevOps Frontend Backend DevOps React, CSS, Webpack Node.js TypeScript, Jest Docker, Kubernetes, Terraform PostgreSQL, Redis
UTF-8 · LF · 4 lines · 206 chars✓ parsed·1.7 ms·3.4 KB SVG

4. Relações de Euler

As relações de Euler expressam contenção estrutural ou separação — que um conjunto é subconjunto de outro, que dois conjuntos são completamente disjuntos ou que eles apenas se sobrepõem. Elas devem referenciar ids de conjuntos já declarados com set.

from subset to    # from está totalmente dentro de to (também: "in")
from in to        # alias para subset
from disjoint to  # from e to não se sobrepõem
from overlap to   # from e to se sobrepõem parcialmente (explícito — o padrão para conjuntos não relacionados)
venn·§
↘ preview
100%
Biology taxonomy Venn/Euler diagram "Biology taxonomy": 5 sets, 0 regions. Biology taxonomy Set Animals Set Vertebrates Set Mammals Set Birds Set Fish Animals Vertebrates Mammals Birds Fish
UTF-8 · LF · 13 lines · 299 chars✓ parsed·0.5 ms·3.1 KB SVG
Palavra-chaveAliasSignificado
subsetinfrom está totalmente contido em to
disjointfrom e to não se intersectam
overlapfrom e to se intersectam, mas nenhum contém o outro

5. Configuração

Linhas config: ajustam o comportamento do diagrama. Cada uma vai em sua própria linha.

Chave de configValoresPadrãoEfeito
diagramvenn, euler, autoautoForça Venn (todos os círculos fixos) ou Euler (aninhamento de subconjuntos). auto infere pela presença de relações de Euler.
proportionaltrue, falsefalseEscala a área do círculo proporcionalmente aos valores de contagem da região
showCountstrue, falseautoSempre / nunca mostra rótulos de contagem. auto os mostra quando contagens são fornecidas.
showPercenttrue, falsefalseMostra o valor de cada região como percentual do total geral
palettedefault, brand, monochromedefaultPaleta de cores para conjuntos (substituída por color: por conjunto)
blendModemultiply, screen, nonemultiplyComo as cores de preenchimento sobrepostas se misturam

A configuração também pode ser escrita inline na linha do cabeçalho: venn "Title" [proportional: true, showPercent: true].

venn "Segment overlap"
config: proportional = true
config: showPercent = true
config: blendMode = screen

Seleção de layout:

  • layout venn — forma alternativa de config: diagram = venn (analisado de forma idêntica).
  • layout euler — forma alternativa de config: diagram = euler.
  • layout auto — forma alternativa de config: diagram = auto.

6. Rótulos e comentários

  • Título: venn "Meu diagrama" — apenas na primeira linha.
  • Rótulo do conjunto: set A "Assinantes de e-mail" — string entre aspas na linha set.
  • Valor da região: inteiro, percentual, string entre aspas ou lista de elementos atribuída após o :.
  • Comentários: # no início de uma linha (após espaços em branco iniciais).

7. Palavras reservadas e escape

Reservadas no início da linha: venn (cabeçalho), set, config:, layout, region.

Operadores reservados em chaves de região: & (interseção), only (região exclusiva).

Palavras-chave de relação Euler: subset, in, disjoint, overlap — não podem ser usadas como ids de conjunto.

Regras de ID: deve corresponder a [A-Za-z][A-Za-z0-9_-]*. Rótulos com espaços vão no campo "Label" entre aspas.


8. Erros comuns

Você escreveuO parser dizCorreção
A & B : 320 antes de set A … e set B …VennParseError: unknown set id "A" in region keyDeclare os conjuntos com set antes de referenciá-los em linhas de região
dogs subset mammals antes de set dogs …VennParseError: unknown set "dogs" in relationDeclare os conjuntos primeiro, depois escreva as relações de Euler
set A Email subscribers (rótulo sem aspas com espaço)Erro de parser — espera-se que o rótulo seja uma string entre aspasColoque entre aspas: set A "Email subscribers"
A & B = 320 (igual em vez de dois-pontos)A linha não corresponde ao padrão de região; erro de parseUse dois-pontos: A & B : 320
Frontend = { React TypeScript } (sem vírgulas)React TypeScript tratado como um único elementoSepare por vírgulas: Frontend = { React, TypeScript }
config: mode = vennmode não é uma chave reconhecida (a chave é diagram)Use config: diagram = venn
Misturar conjuntos de enumeração com regiões explícitas A & B :A derivação automática de enumeração só é executada quando regions.length === 0Use um estilo por diagrama ou adicione todas as regiões explicitamente

9. Gramática (EBNF)

document       = header (blank | comment | config | layout-stmt | set-decl | enum-decl | euler-rel | region)*

header         = "venn" ( ":"? WS quoted-string )? ( WS "[" config-props "]" )? NEWLINE
quoted-string  = '"' any-char-but-quote* '"'

config         = "config" WS ":" WS config-key WS "=" WS config-value NEWLINE
config-key     = "diagram" | "proportional" | "palette" | "blendMode" | "showCounts" | "showPercent"

layout-stmt    = "layout" WS ( "venn" | "euler" | "auto" ) NEWLINE

set-decl       = "set" WS id WS quoted-string ( WS "[" set-props "]" )? NEWLINE
set-props      = "color:" quoted-hex | "fill:" quoted-hex

enum-decl      = id WS "=" WS "{" element-list "}" NEWLINE
element-list   = element ( "," element )*
element        = quoted-string | bare-word

euler-rel      = id WS euler-op WS id NEWLINE
euler-op       = "subset" | "in" | "disjoint" | "overlap"

region         = "region"? WS region-key WS ":" WS region-value NEWLINE
region-key     = id WS "only"
               | id ( WS "&" WS id )+
region-value   = integer | percent | quoted-string | "[" element-list "]"

percent        = number "%"
id             = [A-Za-z] [A-Za-z0-9_-]*
comment        = "#" any NEWLINE

Fonte autoritativa: src/diagrams/venn/parser.ts. Se isto divergir do parser, o parser prevalece — por favor abra uma issue.


10. Roadmap

Planejado — ainda não analisável. Não use estes na DSL gerada hoje; o parser os rejeitará ou ignorará.

  • Aninhamento de Euler triplo e N-ário — o renderizador atualmente suporta até 3 conjuntos no modo Venn; diagramas de Euler maiores com contenção complexa ainda não são totalmente dispostos.
  • Alias de cor fill: — a propriedade fill: em set é aceita pelo parser (como alias para color:), mas o renderizador atualmente usa apenas color:.
  • label: em regiões — sintaxe region A & B [label: "Core"] para rótulo separado do valor.
  • Euler proporcional a áreaproportional: true atualmente afeta apenas o modo Venn; o layout de contenção Euler ignora a flag.
  • Palavra-chave andA and B : 120 em linguagem natural como alias para A & B : 120.

Acompanhe nas issues do GitHub se você precisar de algum desses recursos mais cedo.


Exemplos relacionados

Cenários prontos para uso da galeria de exemplos:

venn·§ Venn (1880)
Customer Segments — Q3 2025 Venn/Euler diagram "Customer Segments — Q3 2025": 3 sets, 7 regions. Customer Segments — Q3 2025 Set Email subscribers Set Paid users Set Mobile app users Email subscribers Paid users Mobile app users 1840 920 2100 650 12400 3200 8700
Customer segment overlap
Three-set Venn showing email subscriber, paid-user, and mobile-app-user overlap with counts for every region — useful for lifecycle marketing planning.
saas
venn·§ Venn (1880)
Programming Paradigms Venn/Euler diagram "Programming Paradigms": 3 sets, 7 regions. Programming Paradigms Set Object-Oriented Set Functional Set Logic Object-Oriented Functional Logic 180 45 90 12 620 340 95
Programming paradigm overlap
Venn diagram showing the intersection of object-oriented, functional, and logic programming paradigms with language counts — a teaching aid for CS curricula.
education

Found this useful?

Schematex is free, fully open source, and zero-dependency. A star helps other developers discover it.