Font-awesome: Icon request: Venn diagrams

Created on 17 Oct 2013  Â·  35Comments  Â·  Source: FortAwesome/Font-Awesome

Venn diagrams are excellent for explaining things that have to do with sets. I recently needed it when explaining what "AND, OR, NOT" meant in a query language.

I'm certainly no artist, but here's a quick illustration:

venn

in progress new icon web application icons

Most helpful comment

Expanding on @Theriault's beautiful example, I've performed something similar for cirlces, though it requires a little more transformations to accommodate the oblong intersections. There's also opportunity for someone to improve it to be even more exact.

Font Awesome

https://jsfiddle.net/vol7ron/jevn851x/

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
<script defer src="https://use.fontawesome.com/releases/v5.7.2/js/all.js" integrity="sha384-0pzryjIRos8mFBWMzSSZApWtPl/5++eIfzYmTgBBmXYdhvxPc+XcFEk+zJwDgWbP" crossorigin="anonymous"></script>
<style>
.stretch-y {
  transform: scale(1, 1.5);
}
.stretch-rotate {
  transform: rotate(45deg) scale(1,1.5);
}
</style>

<!-- Square -->
<div class="fa-3x">

  <!-- intersection: A ∩ B -->
  <div class="fa-layers fa-fw">
    <span class="far fa-square" data-fa-transform="shrink-6 left-2 up-2"></span>
    <span class="far fa-square" data-fa-transform="shrink-6 right-2 down-2"></span>  
    <span class="fas fa-square" data-fa-transform="shrink-10"></span>
  </div>

  <!-- symmetric difference: A â–³ B -->
  <div class="fa-layers fa-fw">
    <span class="fas fa-square" data-fa-transform="shrink-6 left-2 up-2"></span>
    <span class="fas fa-square" data-fa-transform="shrink-6 right-2 down-2"></span>  
    <span class="fas fa-square fa-inverse" data-fa-transform="shrink-11"></span>
    <span class="far fa-square" data-fa-transform="shrink-10"></span>
  </div>

  <!-- union: A ∪ B -->
  <div class="fa-layers fa-fw">
    <span class="fas fa-square" data-fa-transform="shrink-6 left-2 up-2"></span>
    <span class="fas fa-square" data-fa-transform="shrink-6 right-2 down-2"></span>
    <span class="fas fa-square" data-fa-transform="shrink-10"></span>
  </div>

  <!-- difference: A ∖ B -->
  <div class="fa-layers fa-fw">
    <span class="fas fa-square" data-fa-transform="shrink-6 left-2 up-2"></span>
    <span class="far fa-square" data-fa-transform="shrink-6 right-2 down-2"></span>  
    <span class="fas fa-square fa-inverse" data-fa-transform="shrink-12"></span>
    <span class="far fa-square" data-fa-transform="shrink-10"></span>
  </div>
</div>


<!-- Horizontal Circles -->
<div class="fa-3x">

  <!-- intersection: A ∩ B -->
  <div class="fa-layers fa-fw">
    <span class="far fa-circle" data-fa-transform="shrink-6 left-2"></span>
    <span class="far fa-circle" data-fa-transform="shrink-6 right-2"></span>  
    <span class="fas fa-circle stretch-y" data-fa-transform="shrink-10"></span>
  </div>

  <!-- symmetric difference: A â–³ B -->
  <div class="fa-layers fa-fw">
    <span class="fas fa-circle" data-fa-transform="shrink-6 left-2"></span>
    <span class="fas fa-circle" data-fa-transform="shrink-6 right-2"></span>  
    <span class="fas fa-circle fa-inverse stretch-y" data-fa-transform="shrink-11"></span>
    <span class="far fa-circle stretch-y" data-fa-transform="shrink-10"></span>
  </div>

  <!-- union: A ∪ B -->
  <div class="fa-layers fa-fw">
    <span class="fas fa-circle" data-fa-transform="shrink-6 left-2"></span>
    <span class="fas fa-circle" data-fa-transform="shrink-6 right-2"></span>
    <span class="fas fa-circle fa-inverse stretch-y" data-fa-transform="shrink-10"></span>
    <span class="fas fa-circle stretch-y" data-fa-transform="shrink-11"></span>
  </div>

  <!-- difference: A ∖ B -->
  <div class="fa-layers fa-fw">
    <span class="fas fa-circle" data-fa-transform="shrink-6 left-2"></span>
    <span class="far fa-circle" data-fa-transform="shrink-6 right-2"></span>  
    <span class="fas fa-circle fa-inverse stretch-y" data-fa-transform="shrink-11"></span>
    <span class="far fa-circle stretch-y" data-fa-transform="shrink-10"></span>
  </div>
</div>


<div class="fa-3x">

  <!-- intersection: A ∩ B -->
  <div class="fa-layers fa-fw">
    <span class="far fa-circle" data-fa-transform="shrink-6 left-2 up-2"></span>
    <span class="far fa-circle" data-fa-transform="shrink-6 right-2 down-2"></span>  
    <span class="fas fa-circle stretch-rotate" data-fa-transform="shrink-10 rotate-45"></span>
  </div>

  <!-- symmetric difference: A â–³ B -->
  <div class="fa-layers fa-fw">
    <span class="fas fa-circle" data-fa-transform="shrink-6 left-2 up-2"></span>
    <span class="fas fa-circle" data-fa-transform="shrink-6 right-2 down-2"></span>  
    <span class="fas fa-circle fa-inverse stretch-rotate" data-fa-transform="shrink-11"></span>
    <span class="far fa-circle stretch-rotate" data-fa-transform="shrink-10"></span>
  </div>

  <!-- union: A ∪ B -->
  <div class="fa-layers fa-fw">
    <span class="fas fa-circle" data-fa-transform="shrink-6 left-2 up-2"></span>
    <span class="fas fa-circle" data-fa-transform="shrink-6 right-2 down-2"></span>
    <span class="fas fa-circle fa-inverse stretch-rotate" data-fa-transform="shrink-10"></span>
    <span class="fas fa-circle stretch-rotate" data-fa-transform="shrink-11"></span>
  </div>

  <!-- difference: A ∖ B -->
  <div class="fa-layers fa-fw">
    <span class="fas fa-circle" data-fa-transform="shrink-6 left-2 up-2"></span>
    <span class="far fa-circle" data-fa-transform="shrink-6 right-2 down-2"></span>  
    <span class="fas fa-circle fa-inverse stretch-rotate" data-fa-transform="shrink-11"></span>
    <span class="far fa-circle stretch-rotate" data-fa-transform="shrink-10"></span>
  </div>
</div>

The thing to mention is this requires JavaScript and much more effort than having an already generated image/font, which is still desired for Font Awesome to provide.

All 35 comments

+1

Yes please, I'd love a 3 circle venn outline too. Really useful! Thanks :)

+1

+1

Also +1 for unfolddigitals suggestion of 3 circle outline (in triangular formation). My use case would be to signify geographical regions.

Please :)

Sugestions for names:

fa-set-intersection
fa-set-difference

+1

I could use something like this as well.

+1

+1

+1

+1

+1
even though a venn diagram with three circles would be awesome

+1

Particularly the intersection but ideally all three.

+1
These would be extremely useful for query builder interfaces

I didn't mention it, but a venn diagram is also a universal symbol for _comparison_ or _compare and contrast_. Is font awesome moving slow on adoption, or have they made any of our requests?

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

OMG, this request was made in Oct 2013!!! C'mon, FA, it's about time to comment on it!

+1

+1

+1

Hi All,
Just a note in the meantime.
You can create simple Venn diagrams (not quite as the ones shown) using a combination of fa-circles, fa-layers and fa-transform.
The great thing about doing it this way, is you can change how big each of the circles are and where they are using the right- and shrink- attributes.
Hope this helps someone! :)

I'm a newby to GitHub, but hopefully my code below comes through (and you can see past the inline styling).
image

Workaround until these land, you can create square based ones using transforms/layers. This issue is duplicated by https://github.com/FortAwesome/Font-Awesome/issues/11196 which also includes symmetric difference.

sets

<div class="fa-3x">

<!-- intersection: A ∩ B -->
<div class="fa-layers fa-fw">
  <span class="far fa-square" data-fa-transform="shrink-6 left-2 up-2"></span>
  <span class="far fa-square" data-fa-transform="shrink-6 right-2 down-2"></span>  
  <span class="fas fa-square" data-fa-transform="shrink-10"></span>
</div>

<!-- symmetric difference: A â–³ B -->
<div class="fa-layers fa-fw">
  <span class="fas fa-square" data-fa-transform="shrink-6 left-2 up-2"></span>
  <span class="fas fa-square" data-fa-transform="shrink-6 right-2 down-2"></span>  
  <span class="fas fa-square fa-inverse" data-fa-transform="shrink-11"></span>
  <span class="far fa-square" data-fa-transform="shrink-10"></span>
</div>

<!-- union: A ∪ B -->
<div class="fa-layers fa-fw">
  <span class="fas fa-square" data-fa-transform="shrink-6 left-2 up-2"></span>
  <span class="fas fa-square" data-fa-transform="shrink-6 right-2 down-2"></span>
  <span class="fas fa-square" data-fa-transform="shrink-10"></span>
</div>

<!-- difference: A ∖ B -->
<div class="fa-layers fa-fw">
  <span class="fas fa-square" data-fa-transform="shrink-6 left-2 up-2"></span>
  <span class="far fa-square" data-fa-transform="shrink-6 right-2 down-2"></span>  
  <span class="fas fa-square fa-inverse" data-fa-transform="shrink-12"></span>
  <span class="far fa-square" data-fa-transform="shrink-10"></span>
</div>
</div>

@Theriault thanks!

Expanding on @Theriault's beautiful example, I've performed something similar for cirlces, though it requires a little more transformations to accommodate the oblong intersections. There's also opportunity for someone to improve it to be even more exact.

Font Awesome

https://jsfiddle.net/vol7ron/jevn851x/

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
<script defer src="https://use.fontawesome.com/releases/v5.7.2/js/all.js" integrity="sha384-0pzryjIRos8mFBWMzSSZApWtPl/5++eIfzYmTgBBmXYdhvxPc+XcFEk+zJwDgWbP" crossorigin="anonymous"></script>
<style>
.stretch-y {
  transform: scale(1, 1.5);
}
.stretch-rotate {
  transform: rotate(45deg) scale(1,1.5);
}
</style>

<!-- Square -->
<div class="fa-3x">

  <!-- intersection: A ∩ B -->
  <div class="fa-layers fa-fw">
    <span class="far fa-square" data-fa-transform="shrink-6 left-2 up-2"></span>
    <span class="far fa-square" data-fa-transform="shrink-6 right-2 down-2"></span>  
    <span class="fas fa-square" data-fa-transform="shrink-10"></span>
  </div>

  <!-- symmetric difference: A â–³ B -->
  <div class="fa-layers fa-fw">
    <span class="fas fa-square" data-fa-transform="shrink-6 left-2 up-2"></span>
    <span class="fas fa-square" data-fa-transform="shrink-6 right-2 down-2"></span>  
    <span class="fas fa-square fa-inverse" data-fa-transform="shrink-11"></span>
    <span class="far fa-square" data-fa-transform="shrink-10"></span>
  </div>

  <!-- union: A ∪ B -->
  <div class="fa-layers fa-fw">
    <span class="fas fa-square" data-fa-transform="shrink-6 left-2 up-2"></span>
    <span class="fas fa-square" data-fa-transform="shrink-6 right-2 down-2"></span>
    <span class="fas fa-square" data-fa-transform="shrink-10"></span>
  </div>

  <!-- difference: A ∖ B -->
  <div class="fa-layers fa-fw">
    <span class="fas fa-square" data-fa-transform="shrink-6 left-2 up-2"></span>
    <span class="far fa-square" data-fa-transform="shrink-6 right-2 down-2"></span>  
    <span class="fas fa-square fa-inverse" data-fa-transform="shrink-12"></span>
    <span class="far fa-square" data-fa-transform="shrink-10"></span>
  </div>
</div>


<!-- Horizontal Circles -->
<div class="fa-3x">

  <!-- intersection: A ∩ B -->
  <div class="fa-layers fa-fw">
    <span class="far fa-circle" data-fa-transform="shrink-6 left-2"></span>
    <span class="far fa-circle" data-fa-transform="shrink-6 right-2"></span>  
    <span class="fas fa-circle stretch-y" data-fa-transform="shrink-10"></span>
  </div>

  <!-- symmetric difference: A â–³ B -->
  <div class="fa-layers fa-fw">
    <span class="fas fa-circle" data-fa-transform="shrink-6 left-2"></span>
    <span class="fas fa-circle" data-fa-transform="shrink-6 right-2"></span>  
    <span class="fas fa-circle fa-inverse stretch-y" data-fa-transform="shrink-11"></span>
    <span class="far fa-circle stretch-y" data-fa-transform="shrink-10"></span>
  </div>

  <!-- union: A ∪ B -->
  <div class="fa-layers fa-fw">
    <span class="fas fa-circle" data-fa-transform="shrink-6 left-2"></span>
    <span class="fas fa-circle" data-fa-transform="shrink-6 right-2"></span>
    <span class="fas fa-circle fa-inverse stretch-y" data-fa-transform="shrink-10"></span>
    <span class="fas fa-circle stretch-y" data-fa-transform="shrink-11"></span>
  </div>

  <!-- difference: A ∖ B -->
  <div class="fa-layers fa-fw">
    <span class="fas fa-circle" data-fa-transform="shrink-6 left-2"></span>
    <span class="far fa-circle" data-fa-transform="shrink-6 right-2"></span>  
    <span class="fas fa-circle fa-inverse stretch-y" data-fa-transform="shrink-11"></span>
    <span class="far fa-circle stretch-y" data-fa-transform="shrink-10"></span>
  </div>
</div>


<div class="fa-3x">

  <!-- intersection: A ∩ B -->
  <div class="fa-layers fa-fw">
    <span class="far fa-circle" data-fa-transform="shrink-6 left-2 up-2"></span>
    <span class="far fa-circle" data-fa-transform="shrink-6 right-2 down-2"></span>  
    <span class="fas fa-circle stretch-rotate" data-fa-transform="shrink-10 rotate-45"></span>
  </div>

  <!-- symmetric difference: A â–³ B -->
  <div class="fa-layers fa-fw">
    <span class="fas fa-circle" data-fa-transform="shrink-6 left-2 up-2"></span>
    <span class="fas fa-circle" data-fa-transform="shrink-6 right-2 down-2"></span>  
    <span class="fas fa-circle fa-inverse stretch-rotate" data-fa-transform="shrink-11"></span>
    <span class="far fa-circle stretch-rotate" data-fa-transform="shrink-10"></span>
  </div>

  <!-- union: A ∪ B -->
  <div class="fa-layers fa-fw">
    <span class="fas fa-circle" data-fa-transform="shrink-6 left-2 up-2"></span>
    <span class="fas fa-circle" data-fa-transform="shrink-6 right-2 down-2"></span>
    <span class="fas fa-circle fa-inverse stretch-rotate" data-fa-transform="shrink-10"></span>
    <span class="fas fa-circle stretch-rotate" data-fa-transform="shrink-11"></span>
  </div>

  <!-- difference: A ∖ B -->
  <div class="fa-layers fa-fw">
    <span class="fas fa-circle" data-fa-transform="shrink-6 left-2 up-2"></span>
    <span class="far fa-circle" data-fa-transform="shrink-6 right-2 down-2"></span>  
    <span class="fas fa-circle fa-inverse stretch-rotate" data-fa-transform="shrink-11"></span>
    <span class="far fa-circle stretch-rotate" data-fa-transform="shrink-10"></span>
  </div>
</div>

The thing to mention is this requires JavaScript and much more effort than having an already generated image/font, which is still desired for Font Awesome to provide.

+1

This is now available as part of the version 6 alpha release: https://fontawesome.com/download

Was this page helpful?
0 / 5 - 0 ratings

Related issues

vivekagr picture vivekagr  Â·  194Comments

open2 picture open2  Â·  178Comments

GabrielDelepine picture GabrielDelepine  Â·  202Comments

jrf0110 picture jrf0110  Â·  170Comments

bhubbard picture bhubbard  Â·  169Comments