# 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:

or :

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 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:

(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

Nice, but looks a bitâ€¦ phallic 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

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: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>
<rdf:RDF>
<cc:Work
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
<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

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

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..