Making a logo for Copulas.jl

Hey,

I am trying to find a pretty logo for Copulas.jl and would like some help to find a good idea & to realize it correctly. Two years ago i had an idea in this thread to simply apply the rank transformation to (a bad reproduction of) the Distributions.jl logo as follows:

Code to generate this
using Plots
using Plots.PlotMeasures
using StatsBase
using Random
using Copulas
Random.seed!(15)

noise(N) = randn((2,N))/6
N = 10000
c1 = [0.0, 0.0] .+ noise(N)
c2 = [1.0, 0.0] .+ noise(N)
c3 = [1/2, sqrt(3)/2] .+ noise(N)
colors = [repeat([:green],N)...,
          repeat([:red],N)...,
          repeat([:purple],N)...]
data = hcat(c1,c2,c3)

# Try to reproduce the Distributions.jl's logo: 
scatter(data[1,:],
    data[2,:],
    color=colors,
    msw=0,
    # ms=2,
    α=0.2,
    label=:none,
    size=[600,600],
    bottom_margin=0mm, 
    left_margin = 0mm, 
    right_margin = 0mm, 
    top_margin = 0mm,
    axis=nothing,
    ticks=nothing,
    border=:none)


# Now a logo for Copulas.jl : 

psd = pseudos(data)
scatter(psd[1,:],
    psd[2,:],
    color=colors,
    msw=0,
    # ms=2,
    α=0.2,
    label=:none,
    size=[600,600],
    bottom_margin=0mm, 
    left_margin = 0mm, 
    right_margin = 0mm, 
    top_margin = 0mm,
    axis=nothing,
    ticks=nothing,
    border=:none)

But this looks a bit messy (and I am not sure the colors are right). Thoughts & Comments ? Maybe some other reprensentation would be more efficient to convey what this logo should ?

1 Like

Maybe copy off of the Distributions.jl logo but use countour plots using 3 different copulas instead of simple scatter plots like they did?

Hum… Maybe, but I am not convinced:

v1

or :

v2

Generating code
using Plots, Copulas, Distributions, StatsPlots
using Plots.PlotMeasures

C1 = ClaytonCopula(2,7)
C2 = GumbelCopula(2,7)
C3 = FrankCopula(2,-7)

N=1000

# first one: 
cst = 1
c1 = [0,0]
c2 = [1,0]
c3 = [0,1]

# uncoment for second one: 
cst = 1.5
c3 = [1/2,sqrt(3)/2] # second one


data = hcat(
    rand(C1,N)/cst .+ c1,
    rand(C2,N)/cst .+ c2,
    rand(C3,N)/cst .+ c3)
colors = [repeat([:green],N)...,
          repeat([:red],N)...,
          repeat([:purple],N)...]


plt = scatter(data[1,:],
    data[2,:],
    color=colors,
    msw=0,
    # ms=2,
    α=0.2,
    label=:none,
    size=[400,400],
    bottom_margin=0mm, 
    left_margin = 0mm, 
    right_margin = 0mm, 
    top_margin = 0mm,
    axis=nothing,
    ticks=nothing,
    border=:none)

savefig(plt, "v2.png")

Could not find out how to plot contours ^^

Another version that simply changes marginals but keep the dependence structure of the Distributions.jl’s logo:

Code
using Plots
using Plots.PlotMeasures
using StatsBase
using Random
using Copulas
Random.seed!(15)

noise(N) = randn((2,N))/6
N = 10000
c1 = [0.0, 0.0] .+ noise(N)
c2 = [1.0, 0.0] .+ noise(N)
c3 = [1/2, sqrt(3)/2] .+ noise(N)
colors = [repeat([:green],N)...,
          repeat([:red],N)...,
          repeat([:purple],N)...]
data = hcat(c1,c2,c3)

# change the marginals: 
psd = pseudos(data)
new_data = quantile.(Normal(),psd)

# Try to reproduce the Distributions.jl's logo: 
plt = scatter(new_data[1,:],
    new_data[2,:],
    color=colors,
    msw=0,
    # ms=2,
    α=0.2,
    label=:none,
    size=[600,600],
    bottom_margin=0mm, 
    left_margin = 0mm, 
    right_margin = 0mm, 
    top_margin = 0mm,
    axis=nothing,
    ticks=nothing,
    border=:none)

savefig(plt,"v4.png")

Looks a bit like a plane :rofl: or a bat. Definitively something flying.

With a discrete marginal:

Code
using Plots
using Plots.PlotMeasures
using StatsBase
using Random
using Copulas
Random.seed!(15)

noise(N) = randn((2,N))/6
N = 10000
c1 = [0.0, 0.0] .+ noise(N)
c2 = [1.0, 0.0] .+ noise(N)
c3 = [1/2, sqrt(3)/2] .+ noise(N)
colors = [repeat([:green],N)...,
          repeat([:red],N)...,
          repeat([:purple],N)...]
data = hcat(c1,c2,c3)

# change the marginals: 
psd = pseudos(data)
new_data = similar(data)
new_data[1,:] = quantile.(Normal(),psd[1,:])
new_data[2,:] = quantile.(Binomial(10,0.8),psd[2,:])

# Try to reproduce the Distributions.jl's logo: 
plt = scatter(new_data[1,:],
    new_data[2,:],
    color=colors,
    msw=0,
    # ms=2,
    α=0.2,
    label=:none,
    size=[600,600],
    bottom_margin=0mm, 
    left_margin = 0mm, 
    right_margin = 0mm, 
    top_margin = 0mm,
    axis=nothing,
    ticks=nothing,
    border=:none)

savefig(plt,"v5.png")

I am definitely not an artist…

Logos have to look nice when are small. I would go for some interpretation of those, drawn in simple shapes. Like:

image

image

(I like drawing logs, rs, but I’m not suggesting actually these, as I don’t know what exactly could be representative of what the package does)

4 Likes

@lmiq I see your point and you are probably right.

Those two are nice btw. Could you make the first one with a slightly different shape, matching e.g. this one:

but with a bit less lines and the same kind of coloring that you did on the first one. SO basically the first one you had but it bit more “pointy” on the right hand side.

A better version, but scatterplot.

The hotspot is on the top right, while the bottiom-left has another less-hot spot. The shape is symetric w.r.t. the y=x line

How about:

image

Nice, but looks a bit… phallic :confused: Maybe the purple/blue frontier cvould be more parralel to the purple/white one ?

1 Like

Rs… You know that in latin languages “copula” does not sound very well either…

1 Like

Yes I do ! It actually has a nice interpretation: a copula makes a “tuple” from univaraite distributions (not restricted to d=2 for a “couple” though, which has the same latin root as copula)

1 Like

image

I have to leave now, but we can improve on this later, if you want.

1 Like

I’ll try to sketch something with pen & paper so that we get a better idea next time then.

1 Like

This is the SVG, in case you want to play with it (in Inkscape, for instance):

logo.svg
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
   width="56.725376mm"
   height="45.917709mm"
   viewBox="0 0 56.725376 45.917709"
   version="1.1"
   id="svg8"
   inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
   sodipodi:docname="logo.svg"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:dc="http://purl.org/dc/elements/1.1/">
  <defs
     id="defs2">
    <marker
       inkscape:stockid="DotM"
       orient="auto"
       refY="0.0"
       refX="0.0"
       id="marker4453"
       style="overflow:visible"
       inkscape:isstock="true">
      <path
         id="path1053"
         d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z "
         style="fill-rule:evenodd;stroke:#399746;stroke-width:1pt;stroke-opacity:1;fill:#399746;fill-opacity:1"
         transform="scale(0.4) translate(7.4, 1)" />
    </marker>
    <marker
       inkscape:isstock="true"
       style="overflow:visible"
       id="marker3734"
       refX="0.0"
       refY="0.0"
       orient="auto"
       inkscape:stockid="TriangleOutM">
      <path
         transform="scale(0.4)"
         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
         id="path3732" />
    </marker>
    <marker
       inkscape:stockid="Arrow1Send"
       orient="auto"
       refY="0.0"
       refX="0.0"
       id="Arrow1Send"
       style="overflow:visible;"
       inkscape:isstock="true">
      <path
         id="path1004"
         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
         transform="scale(0.2) rotate(180) translate(6,0)" />
    </marker>
    <marker
       inkscape:stockid="Arrow1Mend"
       orient="auto"
       refY="0.0"
       refX="0.0"
       id="marker2032"
       style="overflow:visible;"
       inkscape:isstock="true">
      <path
         id="path2030"
         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
         transform="scale(0.4) rotate(180) translate(10,0)" />
    </marker>
    <marker
       inkscape:stockid="Arrow1Mend"
       orient="auto"
       refY="0.0"
       refX="0.0"
       id="marker1962"
       style="overflow:visible;"
       inkscape:isstock="true">
      <path
         id="path998"
         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
         transform="scale(0.4) rotate(180) translate(10,0)" />
    </marker>
    <marker
       inkscape:isstock="true"
       style="overflow:visible;"
       id="marker1725"
       refX="0.0"
       refY="0.0"
       orient="auto"
       inkscape:stockid="Arrow2Lend">
      <path
         transform="scale(1.1) rotate(180) translate(1,0)"
         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
         id="path1723" />
    </marker>
    <marker
       inkscape:stockid="Arrow1Mend"
       orient="auto"
       refY="0.0"
       refX="0.0"
       id="Arrow1Mend"
       style="overflow:visible;"
       inkscape:isstock="true">
      <path
         id="path977"
         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
         style="fill-rule:evenodd;stroke:#1a1a1a;stroke-width:1pt;stroke-opacity:1;fill:#1a1a1a;fill-opacity:1"
         transform="scale(0.4) rotate(180) translate(10,0)" />
    </marker>
    <marker
       inkscape:stockid="DotM"
       orient="auto"
       refY="0.0"
       refX="0.0"
       id="DotM"
       style="overflow:visible"
       inkscape:isstock="true">
      <path
         id="path992"
         d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z "
         style="fill-rule:evenodd;stroke:#264653;stroke-width:1pt;stroke-opacity:1;fill:#264653;fill-opacity:1"
         transform="scale(0.4) translate(7.4, 1)" />
    </marker>
    <marker
       inkscape:isstock="true"
       style="overflow:visible"
       id="marker5401"
       refX="0"
       refY="0"
       orient="auto"
       inkscape:stockid="Arrow2Mend">
      <path
         transform="scale(-0.6)"
         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
         style="fill:#264653;fill-opacity:1;fill-rule:evenodd;stroke:#264653;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
         id="path5399"
         inkscape:connector-curvature="0" />
    </marker>
    <marker
       inkscape:isstock="true"
       style="overflow:visible"
       id="marker4973"
       refX="0"
       refY="0"
       orient="auto"
       inkscape:stockid="Arrow2Lend">
      <path
         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
         id="path4971"
         inkscape:connector-curvature="0" />
    </marker>
    <marker
       inkscape:stockid="Arrow1Lend"
       orient="auto"
       refY="0"
       refX="0"
       id="Arrow1Lend"
       style="overflow:visible"
       inkscape:isstock="true">
      <path
         id="path4532"
         d="M 0,0 5,-5 -12.5,0 5,5 Z"
         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
         transform="matrix(-0.8,0,0,-0.8,-10,0)"
         inkscape:connector-curvature="0" />
    </marker>
    <style
       id="style1344">.cls-1{fill:#1a1a1a}.cls-2{fill:#4d64ae}.cls-3{fill:#ca3c32}.cls-4{fill:#9259a3}.cls-5{fill:#399746}</style>
    <clipPath
       clipPathUnits="userSpaceOnUse"
       id="clipPath2138">
      <rect
         style="fill:none;fill-opacity:0.94509804;fill-rule:nonzero;stroke:#264653;stroke-width:0.66145831;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.94509804;paint-order:markers stroke fill"
         id="rect2140"
         width="56.885414"
         height="45.772915"
         x="-505.02551"
         y="-15.879046" />
    </clipPath>
    <clipPath
       clipPathUnits="userSpaceOnUse"
       id="clipPath940">
      <rect
         style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#fefefe;stroke-width:1.00541663;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
         id="rect942"
         width="55.834122"
         height="44.61631"
         x="-503.90009"
         y="-15.773171" />
    </clipPath>
    <clipPath
       clipPathUnits="userSpaceOnUse"
       id="clipPath970">
      <rect
         style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.17470133;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.6988052, 1.1747013;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
         id="rect972"
         width="56.344025"
         height="45.636112"
         x="-504.41"
         y="-16.028122" />
    </clipPath>
  </defs>
  <sodipodi:namedview
     id="base"
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1.0"
     inkscape:pageopacity="0.0"
     inkscape:pageshadow="2"
     inkscape:zoom="0.12987399"
     inkscape:cx="-573.63296"
     inkscape:cy="-354.18948"
     inkscape:document-units="mm"
     inkscape:current-layer="layer1"
     showgrid="false"
     inkscape:window-width="1880"
     inkscape:window-height="1048"
     inkscape:window-x="40"
     inkscape:window-y="0"
     inkscape:window-maximized="1"
     fit-margin-top="0"
     fit-margin-left="0"
     fit-margin-right="0"
     fit-margin-bottom="0"
     inkscape:pagecheckerboard="0"
     showguides="false"
     inkscape:guide-bbox="true">
    <sodipodi:guide
       position="-113.27619,-30.555472"
       orientation="0,-1"
       id="guide47440" />
  </sodipodi:namedview>
  <metadata
     id="metadata5">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <g
     inkscape:label="Layer 1"
     inkscape:groupmode="layer"
     id="layer1"
     transform="translate(504.66495,16.56467)">
    <rect
       style="fill:#ffffff;fill-opacity:0.0691974;stroke:#000000;stroke-width:0.4;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
       id="rect80938"
       width="36.652241"
       height="36.509716"
       x="-494.06482"
       y="-13.571437" />
    <path
       id="path81573"
       style="fill:#9558b2;fill-opacity:1;stroke:#000000;stroke-width:0.4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m -459.53954,-11.062015 c -2.74575,-2.90323 -41.62505,18.4092198 -30.69114,29.591061 10.54738,11.554504 33.43384,-26.6848812 30.69114,-29.591061 z"
       sodipodi:nodetypes="ccc" />
    <path
       id="path83080"
       style="fill:#4063d8;fill-opacity:1;stroke:#000000;stroke-width:0.4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m -474.1564,9.8429348 c -2.14065,1.2383102 -2.34394,3.0231002 -4.81187,5.6318602 -2.46794,2.60877 -6.88054,4.773617 -9.68613,1.53447 -3.07222,-2.98207 -0.72588,-7.3339102 1.96878,-9.7027002 2.69467,-2.36878 3.90073,-2.12622 5.22499,-4.22863 5.29328,-8.40365 18.38094,-14.2853598 20.15008,-12.43242 1.7498,1.87159 -4.28931,14.24768 -12.84585,19.19742 z"
       sodipodi:nodetypes="sscsscs" />
    <ellipse
       style="fill:#389826;fill-opacity:1;stroke:#000000;stroke-width:0.40001;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
       id="path83316"
       cx="-360.81519"
       cy="-326.95929"
       transform="matrix(0.71989086,-0.69408728,0.68676003,0.72688422,0,0)"
       rx="2.7172501"
       ry="2.7185347" />
    <ellipse
       style="fill:#389826;fill-opacity:1;stroke:#000000;stroke-width:0.40001;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
       id="circle83398"
       cx="-337.43234"
       cy="-326.84998"
       rx="6.6017785"
       ry="2.7991507"
       transform="matrix(0.71989086,-0.69408728,0.68676003,0.72688422,0,0)" />
    <ellipse
       style="fill:#cb3c33;fill-opacity:1;stroke:#000000;stroke-width:0.40001;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
       id="ellipse83400"
       cx="-337.43234"
       cy="-326.84998"
       rx="3.1440656"
       ry="1.4928533"
       transform="matrix(0.71989086,-0.69408728,0.68676003,0.72688422,0,0)" />
  </g>
</svg>

Sadly I do not have the skills to do that, but thanks a lot :slight_smile:

A quick hand sketch.

Basically (1) and (2) are drawing lines to give the “direction”, and then (3) tries to reproduce the contour plot idea. Discard (4), i actually prefer (3).

If we remove the drawing lines, and keep the black square around and the julia-colored regions I think this can be quite OK.

The top-right region has to be “squeezed out” : at the limit every region should be touching the corner, at least theoretically.

On your drawing, I would reduce the thickness of the lines separating the regions.

1 Like

Any chance of getting a formula for those curves?

Yes, but tomorrow :slight_smile:

1 Like

Have you looked at Github’s copulas logo?

On that same spirit:

2 Likes

This one is pretty indeed but the grid of linked circles looks like a mark of the organisation behind this python package and has nothing to do with copulas themselves afaict. However I like the text on the bottom maybe I should keep that in mind.

Yes, I have no idea how it relates to copulas, but the authors, also being experts on the subject, should know. They use the logo everywhere - see a better example on the left banner of their tutorials..