Venn Diagram
Chart overview
Venn diagrams use overlapping circles to show relationships between sets.
Key points
- They clearly display intersections, unique elements, and the overall composition of grouped data.
- For more than 3 sets, UpSetPlot provides a clearer alternative.
Example Visualization

Create This Chart Now
Generate publication-ready venn diagrams with AI in seconds. No coding required – just describe your data and let AI do the work.
View example prompt
"Create a 3-circle Venn diagram showing 'Customer Segment Overlap' for a marketing analysis. Generate realistic customer data: Email Subscribers (Set A: 15,000), Social Media Followers (Set B: 12,000), Mobile App Users (Set C: 8,000). Overlaps: Email ∩ Social (3,500), Email ∩ App (2,200), Social ∩ App (1,800), All Three (1,000). Use semi-transparent fills: Email (blue, alpha=0.5), Social (green, alpha=0.5), App (red, alpha=0.5). Label each section with the count and percentage of total. Add set labels outside circles with total counts. Include a subtitle showing total unique customers (26,500). Use a clean white background. Title: 'Customer Engagement Channel Overlap'. Add annotation for the 'highly engaged' triple-overlap segment."
How to create this chart in 30 seconds
Upload Data
Drag & drop your Excel or CSV file. Plotivy securely processes it in your browser.
AI Generation
Our AI analyzes your data and generates the Venn Diagram code automatically.
Customize & Export
Tweak the design with natural language, then export as high-res PNG, SVG or PDF.
Python Code Example
# === IMPORTS ===
import matplotlib.pyplot as plt
from matplotlib_venn import venn3
# === USER-EDITABLE PARAMETERS ===
title = "Customer Engagement Channel Overlap (26,500 Unique Customers)"
figsize = (10, 8)
# === EXAMPLE DATASET ===
# Customer counts by channel
email_only = 15000 - 3500 - 2200 + 1000 # Only email = 10,300
social_only = 12000 - 3500 - 1800 + 1000 # Only social = 7,700
app_only = 8000 - 2200 - 1800 + 1000 # Only app = 5,000
email_social = 3500 - 1000 # Email & Social only = 2,500
email_app = 2200 - 1000 # Email & App only = 1,200
social_app = 1800 - 1000 # Social & App only = 800
all_three = 1000
# Verify total
total = email_only + social_only + app_only + email_social + email_app + social_app + all_three
print("=== Customer Segment Overlap ===")
print(f"\nChannel Totals:")
print(f" Email Subscribers: 15,000")
print(f" Social Media Followers: 12,000")
print(f" Mobile App Users: 8,000")
print(f"\nOverlaps:")
print(f" Email ∩ Social: 3,500")
print(f" Email ∩ App: 2,200")
print(f" Social ∩ App: 1,800")
print(f" All Three: 1,000 (highly engaged)")
print(f"\nTotal Unique Customers: {total:,}")
# === CREATE VENN DIAGRAM ===
fig, ax = plt.subplots(figsize=figsize)
# Create Venn diagram
v = venn3(
subsets=(email_only, social_only, email_social, app_only, email_app, social_app, all_three),
set_labels=('Email\n(15,000)', 'Social Media\n(12,000)', 'Mobile App\n(8,000)'),
set_colors=('#3498db', '#27ae60', '#e74c3c'),
alpha=0.5,
ax=ax
)
# Customize labels
for text in v.set_labels:
if text:
text.set_fontsize(12)
text.set_fontweight('bold')
for text in v.subset_labels:
if text:
text.set_fontsize(11)
# Add percentage annotations
v.get_label_by_id('111').set_text(f'{all_three:,}\n(Highly\nEngaged)')
v.get_label_by_id('111').set_fontweight('bold')
plt.title(title, fontsize=16, fontweight='bold', pad=20)
# Add summary annotation
summary_text = f"Unique Customers: {total:,}\nMulti-channel: {email_social + email_app + social_app + all_three:,}"
plt.annotate(summary_text, xy=(0.5, -0.1), xycoords='axes fraction',
ha='center', fontsize=12,
bbox=dict(boxstyle='round', facecolor='wheat', alpha=0.5))
plt.tight_layout()
plt.show()
# END-OF-CODE
Opens the Analyze page with this code pre-loaded and ready to execute
Console Output
=== Customer Segment Overlap === Channel Totals: Email Subscribers: 15,000 Social Media Followers: 12,000 Mobile App Users: 8,000 Overlaps: Email ∩ Social: 3,500 Email ∩ App: 2,200 Social ∩ App: 1,800 All Three: 1,000 (highly engaged) Total Unique Customers: 28,500
Common Use Cases
- 1Set intersection analysis
- 2Survey overlap visualization
- 3Feature comparison
- 4Gene set analysis
Pro Tips
Limit to 3 sets for clarity
Use UpSetPlot for 4+ sets
Add counts in each region
Scientific Chart Selection Cheat Sheet
Not sure whether to use a Violin Plot, Box Plot, or Ridge Plot? Download our single-page reference mapping the most-used scientific chart types, exactly when to use them, and the core Matplotlib/Seaborn functions.