Skip to content

Instantly share code, notes, and snippets.

@briochemc
Forked from mbauman/covid19.jl
Last active April 2, 2020 06:37
Show Gist options
  • Save briochemc/60960829be3ebecdfb3135f8637f2788 to your computer and use it in GitHub Desktop.
Save briochemc/60960829be3ebecdfb3135f8637f2788 to your computer and use it in GitHub Desktop.
using HTTP, CSV, Plots, DataFrames, Dates
# Download the data
df = CSV.read(IOBuffer(String(HTTP.get("https://covid.ourworldindata.org/data/total_cases.csv").body)), normalizenames=true)
# Plotting function
function doit(df, countries, alignment)
cp = get_color_palette(:auto, plot_color(:white), length(countries))
plot(legend=false)
for (i,country) in enumerate(countries)
c = df[:, country]
d = map(x -> x.value, df.date .- df.date[findfirst(coalesce.(c,0) .>= alignment)])
plot!(d, c, color=i, yaxis=:log, m=:circle, ms=2, msw=false, lw=2, label="")
plot!([d[end]], [c[end]], color=cp[i], yaxis=:log, m=:circle, ms=3, label="")
# annotate country next to end point instead of legend
annotate!(d[end]+1, c[end], text("$(replace(string(country), "_"=>" "))", 8, :left, :bold, color=cp[i]))
end
xlabel!("Days since $(alignment)th case")
ylabel!("Cumulative number of cases")
# pretty lims
xlims!(-1, last(xlims())+4)
ylims!(alignment*.8, last(ylims()))
yticks=vec([1,2,5] * 10 .^ (1:4)')
# pretty ticks
yticks=yticks[alignment .≤ yticks .≤ maximum(df[end,countries])]
plot!(yticks=(yticks, string.(yticks)), xticks=0:7:last(xlims())+4)
end
function addtrend(df, dailygrowth, alignment)
d = 0:last(xlims())
c = alignment * (1 + dailygrowth) .^ (d)
plot!(d, c, ls=:dot, color=:gray, lw=2, label="+$(100dailygrowth)% daily")
plot!(legend=:bottomright)
end
# Do it! (plotting the data)
doit(df, [:China, :Italy, :France, :Spain, :Australia, :United_States, :United_Kingdom, :Singapore, :South_Korea], 100)
addtrend(df, 0.25, 100)
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
using HTTP, CSV, Plots, DataFrames
# Download the data
df = CSV.read(IOBuffer(String(HTTP.get("https://covid.ourworldindata.org/data/total_deaths.csv").body)), normalizenames=true)
# Plotting function
function doit(df, countries, alignment)
countries = countries[findall(map(x -> ismissing(x) ? false : x > alignment, Vector(df[end, countries])))]
cp = get_color_palette(:auto, plot_color(:white), length(countries))
plot(legend=false)
for (i, country) in enumerate(countries)
c = df[:, country]
(c[end] isa Missing || c[end] < alignment) && continue
d = map(x -> x.value, df.date .- df.date[findfirst(coalesce.(c,0) .>= alignment)])
plot!(d, c, color=cp[i], yaxis=:log, m=:circle, ms=2, msw=false, lw=2, label="")
plot!([d[end]], [c[end]], color=cp[i], yaxis=:log, m=:circle, ms=3, label="")
# annotate country next to end point instead of legend
annotate!(d[end]+1, c[end], text("$(replace(string(country), "_"=>" "))", 8, :left, :bold, color=cp[i]))
end
xlabel!("Days since $(alignment)th death")
ylabel!("Cumulative number of deaths")
# pretty lims
xlims!(-1, last(xlims())+4)
ylims!(alignment*.8, last(ylims()))
# pretty ticks
yticks=vec([1,2,5] * 10 .^ (0:4)')
yticks=yticks[alignment .≤ yticks .≤ maximum(df[end,countries])]
plot!(yticks=(yticks, string.(yticks)), xticks=0:7:last(xlims())+4)
end
function addtrend(df, dailygrowth, alignment)
d = 0:last(xlims())
c = alignment * (1 + dailygrowth) .^ (d)
plot!(d, c, ls=:dot, color=:gray, lw=2, label="+$(100dailygrowth)% daily")
plot!(legend=:bottomright)
end
# Do it! (plotting the data)
doit(df, names(df)[3:end], 10)
addtrend(df, 0.25, 10)
Display the source blob
Display the rendered blob
Raw
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="600" height="400" viewBox="0 0 2400 1600">
<defs>
<clipPath id="clip1800">
<rect x="0" y="0" width="2400" height="1600"/>
</clipPath>
</defs>
<path clip-path="url(#clip1800)" d="
M0 1600 L2400 1600 L2400 0 L0 0 Z
" fill="#ffffff" fill-rule="evenodd" fill-opacity="1"/>
<defs>
<clipPath id="clip1801">
<rect x="480" y="0" width="1681" height="1600"/>
</clipPath>
</defs>
<path clip-path="url(#clip1800)" d="
M255.898 1425.62 L2352.76 1425.62 L2352.76 47.2441 L255.898 47.2441 Z
" fill="#ffffff" fill-rule="evenodd" fill-opacity="1"/>
<defs>
<clipPath id="clip1802">
<rect x="255" y="47" width="2098" height="1379"/>
</clipPath>
</defs>
<polyline clip-path="url(#clip1802)" style="stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none" points="
289.571,1425.62 289.571,47.2441
"/>
<polyline clip-path="url(#clip1802)" style="stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none" points="
525.287,1425.62 525.287,47.2441
"/>
<polyline clip-path="url(#clip1802)" style="stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none" points="
761.002,1425.62 761.002,47.2441
"/>
<polyline clip-path="url(#clip1802)" style="stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none" points="
996.718,1425.62 996.718,47.2441
"/>
<polyline clip-path="url(#clip1802)" style="stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none" points="
1232.43,1425.62 1232.43,47.2441
"/>
<polyline clip-path="url(#clip1802)" style="stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none" points="
1468.15,1425.62 1468.15,47.2441
"/>
<polyline clip-path="url(#clip1802)" style="stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none" points="
1703.86,1425.62 1703.86,47.2441
"/>
<polyline clip-path="url(#clip1802)" style="stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none" points="
1939.58,1425.62 1939.58,47.2441
"/>
<polyline clip-path="url(#clip1802)" style="stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none" points="
2175.3,1425.62 2175.3,47.2441
"/>
<polyline clip-path="url(#clip1802)" style="stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none" points="
255.898,1376.36 2352.76,1376.36
"/>
<polyline clip-path="url(#clip1802)" style="stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none" points="
255.898,1223.33 2352.76,1223.33
"/>
<polyline clip-path="url(#clip1802)" style="stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none" points="
255.898,1021.04 2352.76,1021.04
"/>
<polyline clip-path="url(#clip1802)" style="stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none" points="
255.898,868.017 2352.76,868.017
"/>
<polyline clip-path="url(#clip1802)" style="stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none" points="
255.898,714.991 2352.76,714.991
"/>
<polyline clip-path="url(#clip1802)" style="stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none" points="
255.898,512.703 2352.76,512.703
"/>
<polyline clip-path="url(#clip1802)" style="stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none" points="
255.898,359.678 2352.76,359.678
"/>
<polyline clip-path="url(#clip1802)" style="stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none" points="
255.898,206.653 2352.76,206.653
"/>
<polyline clip-path="url(#clip1800)" style="stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none" points="
255.898,1425.62 2352.76,1425.62
"/>
<polyline clip-path="url(#clip1800)" style="stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none" points="
255.898,1425.62 255.898,47.2441
"/>
<polyline clip-path="url(#clip1800)" style="stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none" points="
289.571,1425.62 289.571,1409.08
"/>
<polyline clip-path="url(#clip1800)" style="stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none" points="
525.287,1425.62 525.287,1409.08
"/>
<polyline clip-path="url(#clip1800)" style="stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none" points="
761.002,1425.62 761.002,1409.08
"/>
<polyline clip-path="url(#clip1800)" style="stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none" points="
996.718,1425.62 996.718,1409.08
"/>
<polyline clip-path="url(#clip1800)" style="stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none" points="
1232.43,1425.62 1232.43,1409.08
"/>
<polyline clip-path="url(#clip1800)" style="stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none" points="
1468.15,1425.62 1468.15,1409.08
"/>
<polyline clip-path="url(#clip1800)" style="stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none" points="
1703.86,1425.62 1703.86,1409.08
"/>
<polyline clip-path="url(#clip1800)" style="stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none" points="
1939.58,1425.62 1939.58,1409.08
"/>
<polyline clip-path="url(#clip1800)" style="stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none" points="
2175.3,1425.62 2175.3,1409.08
"/>
<polyline clip-path="url(#clip1800)" style="stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none" points="
255.898,1376.36 281.06,1376.36
"/>
<polyline clip-path="url(#clip1800)" style="stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none" points="
255.898,1223.33 281.06,1223.33
"/>
<polyline clip-path="url(#clip1800)" style="stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none" points="
255.898,1021.04 281.06,1021.04
"/>
<polyline clip-path="url(#clip1800)" style="stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none" points="
255.898,868.017 281.06,868.017
"/>
<polyline clip-path="url(#clip1800)" style="stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none" points="
255.898,714.991 281.06,714.991
"/>
<polyline clip-path="url(#clip1800)" style="stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none" points="
255.898,512.703 281.06,512.703
"/>
<polyline clip-path="url(#clip1800)" style="stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none" points="
255.898,359.678 281.06,359.678
"/>
<polyline clip-path="url(#clip1800)" style="stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none" points="
255.898,206.653 281.06,206.653
"/>
<g clip-path="url(#clip1800)">
<text style="fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;" transform="rotate(0, 289.571, 1479.62)" x="289.571" y="1479.62">0</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;" transform="rotate(0, 525.287, 1479.62)" x="525.287" y="1479.62">7</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;" transform="rotate(0, 761.002, 1479.62)" x="761.002" y="1479.62">14</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;" transform="rotate(0, 996.718, 1479.62)" x="996.718" y="1479.62">21</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;" transform="rotate(0, 1232.43, 1479.62)" x="1232.43" y="1479.62">28</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;" transform="rotate(0, 1468.15, 1479.62)" x="1468.15" y="1479.62">35</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;" transform="rotate(0, 1703.86, 1479.62)" x="1703.86" y="1479.62">42</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;" transform="rotate(0, 1939.58, 1479.62)" x="1939.58" y="1479.62">49</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;" transform="rotate(0, 2175.3, 1479.62)" x="2175.3" y="1479.62">56</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;" transform="rotate(0, 231.898, 1393.86)" x="231.898" y="1393.86">10</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;" transform="rotate(0, 231.898, 1240.83)" x="231.898" y="1240.83">20</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;" transform="rotate(0, 231.898, 1038.54)" x="231.898" y="1038.54">50</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;" transform="rotate(0, 231.898, 885.517)" x="231.898" y="885.517">100</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;" transform="rotate(0, 231.898, 732.491)" x="231.898" y="732.491">200</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;" transform="rotate(0, 231.898, 530.203)" x="231.898" y="530.203">500</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;" transform="rotate(0, 231.898, 377.178)" x="231.898" y="377.178">1000</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;" transform="rotate(0, 231.898, 224.153)" x="231.898" y="224.153">2000</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:66px; text-anchor:middle;" transform="rotate(0, 1304.33, 1559.48)" x="1304.33" y="1559.48">Days since 10th death</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:66px; text-anchor:middle;" transform="rotate(-90, 89.2861, 736.431)" x="89.2861" y="736.431">Cumulative number of deaths</text>
</g>
<polyline clip-path="url(#clip1802)" style="stroke:#009af9; stroke-width:8; stroke-opacity:1; fill:none" points="
222.224,1489.13 255.898,1489.13 289.571,1259.21 323.245,1174.07 356.919,1064.85 390.592,996.022 424.266,917.28 457.94,855.153 491.613,806.724 525.287,750.871
558.96,701.089 592.634,657.92 626.308,622.553 659.981,584.614 693.655,548.582 727.329,516.713 761.002,486.112 794.676,459.241 828.35,431.283 862.023,405.654
895.697,380.741 929.371,355.956 963.044,335.844 996.718,290.5 1030.39,288.412 1064.07,266.659 1097.74,246.992 1131.41,233.374 1165.09,221.49 1198.76,205.991
1232.43,193.685 1266.11,181.732 1299.78,171.238 1333.45,162.301 1367.13,149.156 1400.8,143.197 1434.48,138.932 1468.15,136.589 1501.82,133.081 1535.5,129.394
1569.17,126.688 1602.84,123.484 1636.52,121.149 1670.19,118.319 1703.86,116.037 1737.54,113.852 1771.21,111.831 1804.89,109.9 1838.56,108.268 1872.23,107.069
1905.91,105.528 1939.58,104.761 1973.25,104.275 2006.93,103.305 2040.6,102.615 2074.27,101.652 2107.95,100.762
"/>
<circle clip-path="url(#clip1802)" cx="289.571" cy="1259.21" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="323.245" cy="1174.07" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="356.919" cy="1064.85" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="390.592" cy="996.022" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="424.266" cy="917.28" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="457.94" cy="855.153" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="491.613" cy="806.724" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="525.287" cy="750.871" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="558.96" cy="701.089" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="592.634" cy="657.92" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="626.308" cy="622.553" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="659.981" cy="584.614" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="693.655" cy="548.582" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="727.329" cy="516.713" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="761.002" cy="486.112" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="794.676" cy="459.241" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="828.35" cy="431.283" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="862.023" cy="405.654" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="895.697" cy="380.741" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="929.371" cy="355.956" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="963.044" cy="335.844" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="996.718" cy="290.5" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1030.39" cy="288.412" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1064.07" cy="266.659" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1097.74" cy="246.992" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1131.41" cy="233.374" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1165.09" cy="221.49" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1198.76" cy="205.991" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1232.43" cy="193.685" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1266.11" cy="181.732" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1299.78" cy="171.238" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1333.45" cy="162.301" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1367.13" cy="149.156" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1400.8" cy="143.197" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1434.48" cy="138.932" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1468.15" cy="136.589" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1501.82" cy="133.081" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1535.5" cy="129.394" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1569.17" cy="126.688" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1602.84" cy="123.484" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1636.52" cy="121.149" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1670.19" cy="118.319" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1703.86" cy="116.037" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1737.54" cy="113.852" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1771.21" cy="111.831" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1804.89" cy="109.9" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1838.56" cy="108.268" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1872.23" cy="107.069" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1905.91" cy="105.528" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1939.58" cy="104.761" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="1973.25" cy="104.275" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="2006.93" cy="103.305" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="2040.6" cy="102.615" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="2074.27" cy="101.652" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="2107.95" cy="100.762" r="7" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="2107.95" cy="100.762" r="10" fill="#009af9" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="3.2"/>
<polyline clip-path="url(#clip1802)" style="stroke:#e26f46; stroke-width:8; stroke-opacity:1; fill:none" points="
-417.575,1884.69 -383.902,1884.69 -350.228,1884.69 -316.554,1884.69 -282.881,1884.69 -249.207,1884.69 -215.534,1884.69 -181.86,1884.69 -148.186,1884.69 -114.513,1884.69
-80.8389,1884.69 -47.1653,1731.67 -13.4916,1731.67 20.182,1731.67 53.8557,1731.67 87.5293,1731.67 121.203,1642.16 154.877,1578.64 188.55,1578.64 222.224,1489.13
255.898,1399.62 289.571,1376.36 323.245,1234.65 356.919,1133.82 390.592,1112.77 424.266,1030.05 457.94,977.142 491.613,920.057 525.287,888.838 558.96,815.249
592.634,781.466
"/>
<circle clip-path="url(#clip1802)" cx="255.898" cy="1399.62" r="7" fill="#e26f46" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="289.571" cy="1376.36" r="7" fill="#e26f46" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="323.245" cy="1234.65" r="7" fill="#e26f46" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="356.919" cy="1133.82" r="7" fill="#e26f46" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="390.592" cy="1112.77" r="7" fill="#e26f46" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="424.266" cy="1030.05" r="7" fill="#e26f46" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="457.94" cy="977.142" r="7" fill="#e26f46" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="491.613" cy="920.057" r="7" fill="#e26f46" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="525.287" cy="888.838" r="7" fill="#e26f46" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="558.96" cy="815.249" r="7" fill="#e26f46" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="592.634" cy="781.466" r="7" fill="#e26f46" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="592.634" cy="781.466" r="10" fill="#e26f46" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="3.2"/>
<polyline clip-path="url(#clip1802)" style="stroke:#3da44d; stroke-width:8; stroke-opacity:1; fill:none" points="
87.5293,1731.67 121.203,1731.67 154.877,1642.16 188.55,1489.13 222.224,1489.13 255.898,1425.62 289.571,1336.1 323.245,1318.43
"/>
<circle clip-path="url(#clip1802)" cx="255.898" cy="1425.62" r="7" fill="#3da44d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="289.571" cy="1336.1" r="7" fill="#3da44d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="323.245" cy="1318.43" r="7" fill="#3da44d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="323.245" cy="1318.43" r="10" fill="#3da44d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="3.2"/>
<polyline clip-path="url(#clip1802)" style="stroke:#c271d2; stroke-width:8; stroke-opacity:1; fill:none" points="
121.203,1731.67 154.877,1731.67 188.55,1578.64 222.224,1529.38 255.898,1425.62 289.571,1336.1 323.245,1286.84 356.919,1202.29 390.592,1165.41 424.266,1106.18
457.94,1054.34 491.613,1004.05 525.287,959.749 558.96,925.718 592.634,886.425 626.308,853.08 659.981,820.527 693.655,785.987 727.329,721.716 761.002,677.518
794.676,632.202 828.35,588.937 862.023,546.514 895.697,506.606 929.371,469.528 963.044,394.779 996.718,394.779
"/>
<circle clip-path="url(#clip1802)" cx="255.898" cy="1425.62" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="289.571" cy="1336.1" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="323.245" cy="1286.84" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="356.919" cy="1202.29" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="390.592" cy="1165.41" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="424.266" cy="1106.18" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="457.94" cy="1054.34" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="491.613" cy="1004.05" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="525.287" cy="959.749" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="558.96" cy="925.718" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="592.634" cy="886.425" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="626.308" cy="853.08" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="659.981" cy="820.527" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="693.655" cy="785.987" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="727.329" cy="721.716" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="761.002" cy="677.518" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="794.676" cy="632.202" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="828.35" cy="588.937" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="862.023" cy="546.514" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="895.697" cy="506.606" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="929.371" cy="469.528" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="963.044" cy="394.779" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="996.718" cy="394.779" r="7" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="996.718" cy="394.779" r="10" fill="#c271d2" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="3.2"/>
<polyline clip-path="url(#clip1802)" style="stroke:#ac8d18; stroke-width:8; stroke-opacity:1; fill:none" points="
188.55,1731.67 222.224,1731.67 255.898,1489.13 289.571,1355.31 323.245,1336.1 356.919,1259.21 390.592,1212.56 424.266,1141.3 457.94,1099.78 491.613,1012.38
525.287,917.28 558.96,853.08 592.634,781.466 626.308,718.328 659.981,680.33 693.655,581.577 727.329,529.676 761.002,461.331 794.676,401.613 828.35,356.173
862.023,307.258 895.697,279.023 929.371,228.812 963.044,157.125
"/>
<circle clip-path="url(#clip1802)" cx="289.571" cy="1355.31" r="7" fill="#ac8d18" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="323.245" cy="1336.1" r="7" fill="#ac8d18" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="356.919" cy="1259.21" r="7" fill="#ac8d18" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="390.592" cy="1212.56" r="7" fill="#ac8d18" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="424.266" cy="1141.3" r="7" fill="#ac8d18" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="457.94" cy="1099.78" r="7" fill="#ac8d18" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="491.613" cy="1012.38" r="7" fill="#ac8d18" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="525.287" cy="917.28" r="7" fill="#ac8d18" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="558.96" cy="853.08" r="7" fill="#ac8d18" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="592.634" cy="781.466" r="7" fill="#ac8d18" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="626.308" cy="718.328" r="7" fill="#ac8d18" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="659.981" cy="680.33" r="7" fill="#ac8d18" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="693.655" cy="581.577" r="7" fill="#ac8d18" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="727.329" cy="529.676" r="7" fill="#ac8d18" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="761.002" cy="461.331" r="7" fill="#ac8d18" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="794.676" cy="401.613" r="7" fill="#ac8d18" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="828.35" cy="356.173" r="7" fill="#ac8d18" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="862.023" cy="307.258" r="7" fill="#ac8d18" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="895.697" cy="279.023" r="7" fill="#ac8d18" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="929.371" cy="228.812" r="7" fill="#ac8d18" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="963.044" cy="157.125" r="7" fill="#ac8d18" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="963.044" cy="157.125" r="10" fill="#ac8d18" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="3.2"/>
<polyline clip-path="url(#clip1802)" style="stroke:#00a9ad; stroke-width:8; stroke-opacity:1; fill:none" points="
-585.944,1884.69 -552.27,1884.69 -518.596,1884.69 -484.923,1884.69 -451.249,1884.69 -417.575,1884.69 -383.902,1884.69 -350.228,1884.69 -316.554,1884.69 -282.881,1884.69
-249.207,1884.69 -215.534,1884.69 -181.86,1884.69 -148.186,1642.16 -114.513,1578.64 -80.8389,1529.38 -47.1653,1529.38 -13.4916,1489.13 20.182,1489.13 53.8557,1489.13
87.5293,1489.13 121.203,1489.13 154.877,1489.13 188.55,1489.13 222.224,1455.1 255.898,1399.62 289.571,1336.1 323.245,1286.84 356.919,1234.65 390.592,1212.56
424.266,1202.29 457.94,1183.08 491.613,1149.05
"/>
<circle clip-path="url(#clip1802)" cx="255.898" cy="1399.62" r="7" fill="#00a9ad" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="289.571" cy="1336.1" r="7" fill="#00a9ad" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="323.245" cy="1286.84" r="7" fill="#00a9ad" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="356.919" cy="1234.65" r="7" fill="#00a9ad" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="390.592" cy="1212.56" r="7" fill="#00a9ad" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="424.266" cy="1202.29" r="7" fill="#00a9ad" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="457.94" cy="1183.08" r="7" fill="#00a9ad" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="491.613" cy="1149.05" r="7" fill="#00a9ad" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="491.613" cy="1149.05" r="10" fill="#00a9ad" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="3.2"/>
<polyline clip-path="url(#clip1802)" style="stroke:#ed5d92; stroke-width:8; stroke-opacity:1; fill:none" points="
53.8557,1884.69 87.5293,1884.69 121.203,1642.16 154.877,1642.16 188.55,1578.64 222.224,1529.38 255.898,1529.38 289.571,1376.36 323.245,1336.1 356.919,1223.33
390.592,1183.08
"/>
<circle clip-path="url(#clip1802)" cx="289.571" cy="1376.36" r="7" fill="#ed5d92" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="323.245" cy="1336.1" r="7" fill="#ed5d92" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="356.919" cy="1223.33" r="7" fill="#ed5d92" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="390.592" cy="1183.08" r="7" fill="#ed5d92" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="390.592" cy="1183.08" r="10" fill="#ed5d92" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="3.2"/>
<polyline clip-path="url(#clip1802)" style="stroke:#c68125; stroke-width:8; stroke-opacity:1; fill:none" points="
-1158.4,1884.69 -1124.72,1884.69 -1091.05,1884.69 -1057.37,1884.69 -1023.7,1884.69 -990.028,1884.69 -956.354,1884.69 -922.68,1884.69 -889.007,1884.69 -855.333,1884.69
-821.659,1884.69 -787.986,1884.69 -754.312,1884.69 -720.638,1884.69 -686.965,1884.69 -653.291,1884.69 -619.617,1884.69 -585.944,1884.69 -552.27,1884.69 -518.596,1884.69
-484.923,1884.69 -451.249,1884.69 -417.575,1884.69 -383.902,1884.69 -350.228,1884.69 -316.554,1884.69 -282.881,1884.69 -249.207,1884.69 -215.534,1884.69 -181.86,1884.69
-148.186,1884.69 -114.513,1884.69 -80.8389,1884.69 -47.1653,1884.69 -13.4916,1884.69 20.182,1884.69 53.8557,1884.69 87.5293,1884.69 121.203,1884.69 154.877,1731.67
188.55,1731.67 222.224,1731.67 255.898,1489.13 289.571,1336.1 323.245,1336.1
"/>
<circle clip-path="url(#clip1802)" cx="289.571" cy="1336.1" r="7" fill="#c68125" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="323.245" cy="1336.1" r="7" fill="#c68125" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="323.245" cy="1336.1" r="10" fill="#c68125" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="3.2"/>
<polyline clip-path="url(#clip1802)" style="stroke:#00a98d; stroke-width:8; stroke-opacity:1; fill:none" points="
121.203,1884.69 154.877,1884.69 188.55,1731.67 222.224,1529.38 255.898,1455.1 289.571,1376.36 323.245,1336.1 356.919,1318.43 390.592,1318.43 424.266,1259.21
457.94,1246.59 491.613,1202.29 525.287,1149.05 558.96,1119.57 592.634,1099.78 626.308,1059.53 659.981,1049.26 693.655,1021.04 727.329,1016.67 761.002,1004.05
794.676,980.791 828.35,959.749 862.023,959.749 895.697,940.54 929.371,931.528 963.044,931.528 996.718,914.537
"/>
<circle clip-path="url(#clip1802)" cx="289.571" cy="1376.36" r="7" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="323.245" cy="1336.1" r="7" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="356.919" cy="1318.43" r="7" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="390.592" cy="1318.43" r="7" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="424.266" cy="1259.21" r="7" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="457.94" cy="1246.59" r="7" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="491.613" cy="1202.29" r="7" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="525.287" cy="1149.05" r="7" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="558.96" cy="1119.57" r="7" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="592.634" cy="1099.78" r="7" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="626.308" cy="1059.53" r="7" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="659.981" cy="1049.26" r="7" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="693.655" cy="1021.04" r="7" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="727.329" cy="1016.67" r="7" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="761.002" cy="1004.05" r="7" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="794.676" cy="980.791" r="7" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="828.35" cy="959.749" r="7" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="862.023" cy="959.749" r="7" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="895.697" cy="940.54" r="7" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="929.371" cy="931.528" r="7" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="963.044" cy="931.528" r="7" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="996.718" cy="914.537" r="7" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="996.718" cy="914.537" r="10" fill="#00a98d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="3.2"/>
<polyline clip-path="url(#clip1802)" style="stroke:#8e971d; stroke-width:8; stroke-opacity:1; fill:none" points="
154.877,1884.69 188.55,1642.16 222.224,1529.38 255.898,1529.38 289.571,1376.36 323.245,1149.05 356.919,1093.57 390.592,1030.05 424.266,906.508 457.94,827.766
491.613,800.134 525.287,634.49 558.96,618.952
"/>
<circle clip-path="url(#clip1802)" cx="289.571" cy="1376.36" r="7" fill="#8e971d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="323.245" cy="1149.05" r="7" fill="#8e971d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="356.919" cy="1093.57" r="7" fill="#8e971d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="390.592" cy="1030.05" r="7" fill="#8e971d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="424.266" cy="906.508" r="7" fill="#8e971d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="457.94" cy="827.766" r="7" fill="#8e971d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="491.613" cy="800.134" r="7" fill="#8e971d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="525.287" cy="634.49" r="7" fill="#8e971d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="558.96" cy="618.952" r="7" fill="#8e971d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="558.96" cy="618.952" r="10" fill="#8e971d" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="3.2"/>
<polyline clip-path="url(#clip1802)" style="stroke:#00a8cb; stroke-width:8; stroke-opacity:1; fill:none" points="
-13.4916,1884.69 20.182,1884.69 53.8557,1731.67 87.5293,1731.67 121.203,1731.67 154.877,1642.16 188.55,1578.64 222.224,1489.13 255.898,1489.13 289.571,1355.31
323.245,1318.43 356.919,1302.07
"/>
<circle clip-path="url(#clip1802)" cx="289.571" cy="1355.31" r="7" fill="#00a8cb" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="323.245" cy="1318.43" r="7" fill="#00a8cb" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="356.919" cy="1302.07" r="7" fill="#00a8cb" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="356.919" cy="1302.07" r="10" fill="#00a8cb" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="3.2"/>
<polyline clip-path="url(#clip1802)" style="stroke:#9b7fe8; stroke-width:8; stroke-opacity:1; fill:none" points="
53.8557,1884.69 87.5293,1731.67 121.203,1731.67 154.877,1642.16 188.55,1489.13 222.224,1489.13 255.898,1425.62 289.571,1376.36 323.245,1212.56 356.919,1099.78
390.592,1000
"/>
<circle clip-path="url(#clip1802)" cx="255.898" cy="1425.62" r="7" fill="#9b7fe8" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="289.571" cy="1376.36" r="7" fill="#9b7fe8" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="323.245" cy="1212.56" r="7" fill="#9b7fe8" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="356.919" cy="1099.78" r="7" fill="#9b7fe8" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="390.592" cy="1000" r="7" fill="#9b7fe8" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="390.592" cy="1000" r="10" fill="#9b7fe8" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="3.2"/>
<polyline clip-path="url(#clip1802)" style="stroke:#608cf6; stroke-width:8; stroke-opacity:1; fill:none" points="
188.55,1731.67 222.224,1489.13 255.898,1399.62 289.571,1376.36 323.245,1355.31 356.919,1355.31 390.592,1355.31 424.266,1234.65 457.94,1174.07 491.613,1141.3
525.287,1093.57 558.96,1064.85 592.634,1064.85 626.308,1064.85 659.981,988.275
"/>
<circle clip-path="url(#clip1802)" cx="255.898" cy="1399.62" r="7" fill="#608cf6" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="289.571" cy="1376.36" r="7" fill="#608cf6" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="323.245" cy="1355.31" r="7" fill="#608cf6" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="356.919" cy="1355.31" r="7" fill="#608cf6" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="390.592" cy="1355.31" r="7" fill="#608cf6" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="424.266" cy="1234.65" r="7" fill="#608cf6" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="457.94" cy="1174.07" r="7" fill="#608cf6" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="491.613" cy="1141.3" r="7" fill="#608cf6" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="525.287" cy="1093.57" r="7" fill="#608cf6" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="558.96" cy="1064.85" r="7" fill="#608cf6" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="592.634" cy="1064.85" r="7" fill="#608cf6" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="626.308" cy="1064.85" r="7" fill="#608cf6" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="659.981" cy="988.275" r="7" fill="#608cf6" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="0"/>
<circle clip-path="url(#clip1802)" cx="659.981" cy="988.275" r="10" fill="#608cf6" fill-rule="evenodd" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="3.2"/>
<polyline clip-path="url(#clip1802)" style="stroke:#808080; stroke-width:8; stroke-opacity:1; fill:none" stroke-dasharray="4, 8" points="
289.571,1376.36 323.245,1327.09 356.919,1277.83 390.592,1228.57 424.266,1179.3 457.94,1130.04 491.613,1080.78 525.287,1031.51 558.96,982.251 592.634,932.987
626.308,883.724 659.981,834.461 693.655,785.198 727.329,735.935 761.002,686.672 794.676,637.409 828.35,588.146 862.023,538.882 895.697,489.619 929.371,440.356
963.044,391.093 996.718,341.83 1030.39,292.567 1064.07,243.304 1097.74,194.041 1131.41,144.777 1165.09,95.5143 1198.76,46.2512 1232.43,-3.01196 1266.11,-52.2751
1299.78,-101.538 1333.45,-150.801 1367.13,-200.064 1400.8,-249.328 1434.48,-298.591 1468.15,-347.854 1501.82,-397.117 1535.5,-446.38 1569.17,-495.643 1602.84,-544.906
1636.52,-594.169 1670.19,-643.433 1703.86,-692.696 1737.54,-741.959 1771.21,-791.222 1804.89,-840.485 1838.56,-889.748 1872.23,-939.011 1905.91,-988.274 1939.58,-1037.54
1973.25,-1086.8 2006.93,-1136.06 2040.6,-1185.33 2074.27,-1234.59 2107.95,-1283.85 2141.62,-1333.12 2175.3,-1382.38 2208.97,-1431.64 2242.64,-1480.91 2276.32,-1530.17
2309.99,-1579.43 2343.66,-1628.7
"/>
<path clip-path="url(#clip1800)" d="
M1763.84 1281.62 L2280.76 1281.62 L2280.76 1160.66 L1763.84 1160.66 Z
" fill="#ffffff" fill-rule="evenodd" fill-opacity="1"/>
<polyline clip-path="url(#clip1800)" style="stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none" points="
1763.84,1281.62 2280.76,1281.62 2280.76,1160.66 1763.84,1160.66 1763.84,1281.62
"/>
<polyline clip-path="url(#clip1800)" style="stroke:#808080; stroke-width:8; stroke-opacity:1; fill:none" stroke-dasharray="4, 8" points="
1787.84,1221.14 1931.84,1221.14
"/>
<g clip-path="url(#clip1800)">
<text style="fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:start;" transform="rotate(0, 1955.84, 1238.64)" x="1955.84" y="1238.64">+25.0% daily</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#009af9; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:start;" transform="rotate(0, 2141.62, 118.262)" x="2141.62" y="118.262">China</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#e26f46; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:start;" transform="rotate(0, 626.308, 798.966)" x="626.308" y="798.966">France</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#3da44d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:start;" transform="rotate(0, 356.919, 1335.93)" x="356.919" y="1335.93">Germany</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#c271d2; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:start;" transform="rotate(0, 1030.39, 412.279)" x="1030.39" y="412.279">Iran</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#ac8d18; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:start;" transform="rotate(0, 996.718, 174.625)" x="996.718" y="174.625">Italy</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#00a9ad; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:start;" transform="rotate(0, 525.287, 1166.55)" x="525.287" y="1166.55">Japan</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#ed5d92; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:start;" transform="rotate(0, 424.266, 1200.58)" x="424.266" y="1200.58">Netherlands</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#c68125; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:start;" transform="rotate(0, 356.919, 1353.6)" x="356.919" y="1353.6">Philippines</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#00a98d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:start;" transform="rotate(0, 1030.39, 932.037)" x="1030.39" y="932.037">South Korea</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#8e971d; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:start;" transform="rotate(0, 592.634, 636.452)" x="592.634" y="636.452">Spain</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#00a8cb; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:start;" transform="rotate(0, 390.592, 1319.57)" x="390.592" y="1319.57">Switzerland</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#9b7fe8; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:start;" transform="rotate(0, 424.266, 1017.5)" x="424.266" y="1017.5">United Kingdom</text>
</g>
<g clip-path="url(#clip1800)">
<text style="fill:#608cf6; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:start;" transform="rotate(0, 693.655, 1005.78)" x="693.655" y="1005.78">United States</text>
</g>
</svg>
using HTTP, CSV, Plots, DataFrames, Dates
file_url = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv"
# Download the data
df = CSV.read(IOBuffer(String(HTTP.get(file_url).body)), normalizenames=true, header=2, transpose=true, datarow=5)
const allcountries = unique(replace.(string.(names(df)), r"_\d*$"=>""))[2:end]
# Plotting function
function doit(df, countries, lockdowndict=Dict(); Δdays=1)
cp = get_color_palette(:auto, plot_color(:white), length(countries))
plot(xaxis=:log, yaxis=:log)
for country in allcountries
country == "Cruise_Ship" && continue
country == "Diamond_Princess" && continue
i = findfirst(Symbol(country) .== countries)
if i isa Nothing
color, m, ms, α, mα, lw, fs = RGBA{Float64}(0,0,0,0.1), 0, 0, 0.1, 0, 1, 4
elseif country == "Australia"
color, m, ms, α, mα, lw, fs = cp[i], :star, 4, 1, 0, 4, 12
else
color, m, ms, α, mα, lw, fs = cp[i], :circle, 2, 0.5, 0, 2, 8
end
cases = Float64.(sum(eachcol(select(df, occursin.(string(country), string.(names(df)))))))
Δcases = cases[1+Δdays:end] - cases[1:end-Δdays]
cases = cases[1+Δdays:end]
ikeep = findall((cases .> 0) .& (Δcases .> 0))
cases = cases[ikeep]
Δcases = Δcases[ikeep]
(any(Δcases .≤ 0) || length(ikeep) == 0) && continue
plot!(cases, Δcases, color=color, m=m, ms=ms, msw=0, lw=lw, α=α, mα=mα, label="")
plot!([cases[end]], [Δcases[end]], color=color, m=m, α=1, ms=ms+1, msw=0, label="")
# annotate country next to end point instead of legend
cases[end] > 30 && Δcases[end] > 10 && annotate!(cases[end] * 1.1, Δcases[end], text("$(replace(string(country), "_"=>" "))", fs, :left, :bold, color=color))
end
# axis labels
xlabel!("Total confirmed cases")
ylabel!("Δcases over $Δdays days")
# pretty lims
ticks=vec([1,3] * 10 .^ (0:5)')
plot!(xlims=(30,last(xlims())))
plot!(ylims=(10,last(ylims())))
xticks = ticks[first(xlims()) .≤ ticks .≤ last(xlims())]
yticks = ticks[first(ylims()) .≤ ticks .≤ last(ylims())]
# pretty ticks
plot!(xticks=(xticks, addprefix.(string.(xticks))), yticks=(yticks, addprefix.(string.(yticks))))
Δx, cstart = collect(xlims()), 300
growth(Δx, cstart, 1, Δdays, :solid)
growth(Δx, cstart, 3, Δdays, :dash, "")
growth(Δx, cstart, 7, Δdays, :dashdot, "")
growth(Δx, cstart, 21, Δdays, :dot, "")
plot!(legend=:topleft, legendtitle="Doubling time")
end
Δc_vs_c(c, τ, Δdays) = (1 - 0.5^(Δdays/τ)) .* c
function growth(Δx, cstart, τ, Δdays, ls, str=" in $Δdays days")
α = log(2) / τ
c = cstart * exp.(α*Δdays*[0,1])
plot!(Δx, Δc_vs_c(Δx, τ, Δdays), ls=ls, color=:gray, lw=1, label="$τ days")
plot!(c, Δc_vs_c(c, τ, Δdays), m=[:circle, :dtriangle], ms=2, ls=:solid, color=:black, lw=1, label="")
str = "×$(round(c[end]/c[1], digits=1))$str"
if length(str) > 10
annotate!(c[end] * 0.8, Δc_vs_c(c, τ, Δdays)[end], text(str, 8, :right, color=:black))
else
annotate!(c[end] * 1.1, Δc_vs_c(c, τ, Δdays)[end], text(str, 8, :left, color=:black))
end
end
function addprefix(s)
s = replace(s, r"(.*)000000000$"=>s"\1G")
s = replace(s, r"(.*)000000$"=>s"\1M")
s = replace(s, r"(.*)000$"=>s"\1k")
return s
end
function addtrend(xlims, trend, Δdays)
plot!(collect(xlims), trend * Δdays * collect(xlims), ls=:dot, color=:gray, lw=2, label="+$(100trend)%", legend=:topleft)
end
function adddoublingtime(Δx, τ, Δdays)
plot!(Δx, Δx * 1 ./ τ' * Δdays, ls=:dot, color=:gray, lw=2, label=string.(τ, " days"), legend=:topleft)
end
lockdowndict = Dict(
:Australia => nothing,
:Italy => Date("9 March 2020", dateformat"d U Y"),
:France => Date("16 March 2020", dateformat"d U Y"),
:China => Date("23 January 2020", dateformat"d U Y"),
)
# Do it! (plotting the data)
#countries = [:China, :Canada, :Turkey, :India, :Iraq, :Bahrain, :Iran, :Germany, :Switzerland, :Netherlands, :Belgium, :Italy, :France, :Spain, :Australia, :US, :United_Kingdom, :Singapore, :Korea_South, :Japan, :Norway, :Finland, :Sweden]
countries = [:China, :Canada, :Italy, :France, :Spain, :Australia, :US, :United_Kingdom, :Singapore, :Korea_South, :Japan]
doit(df, countries, lockdowndict; Δdays=3)
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
using HTTP, CSV, Plots, DataFrames, Dates
file_url = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv"
# Download the data
df = CSV.read(IOBuffer(String(HTTP.get(file_url).body)), normalizenames=true, header=2, transpose=true, datarow=5)
const allcountries = unique(replace.(string.(names(df)), r"_\d*$"=>""))[2:end]
# Plotting function
function doit(df, countries, alignment, lockdowndict=Dict())
cp = get_color_palette(:auto, plot_color(:white), length(countries))
plot(legend=false, yaxis=:log)
dates = Date.(df.Country_Region, dateformat"mm/dd/yy") .+ Year(2000)
days = [d.value for d in (dates .- dates[1])]
n = length(days)
for country in allcountries
country == "Cruise_Ship" && continue
i = findfirst(Symbol(country) .== countries)
if i isa Nothing
color, m, ms, α, ma, lw, fs = RGBA{Float64}(0,0,0,0.1), 0, 0, 0.1, 0, 1, 4
elseif country == "Australia"
color, m, ms, α, ma, lw, fs = cp[i], :star, 4, 1, 0, 4, 12
else
color, m, ms, α, ma, lw, fs = cp[i], :circle, 2, 0.5, 0, 2, 8
end
cases = Float64.(sum(eachcol(select(df, occursin.(string(country), string.(names(df)))))))
# alignment by interpolating
if cases[1] > alignment
baseline = -cases[1] / (cases[2] - cases[1])
elseif cases[end] < alignment
continue
else
ialign = findlast(cases .< alignment)
baseline = ialign + (alignment - cases[ialign]) / (cases[ialign+1] - cases[ialign]) - 1
end
# don't plot 0 values
cases[cases .== 0] .= NaN
plot!(days .- baseline, cases, color=color, m=m, ms=ms, msw=0, lw=lw, alpha=α, ma=ma, label="")
plot!([days[end] - baseline], [cases[end]], color=color, m=m, alpha=1, ms=ms+1, msw=0, label="")
# annotate country next to end point instead of legend
annotate!(days[end] - baseline + 0.5, cases[end], text("$(replace(string(country), "_"=>" "))", fs, :left, :bold, color=color))
end
# axis labels
xlabel!("Days since $(alignment)th case")
ylabel!("Cumulative number of cases")
# pretty lims
xlims!(0, last(xlims())+4)
ylims!(alignment, last(ylims()))
yticks=vec([1,2,5] * 10 .^ (1:4)')
# pretty ticks
yticks=yticks[first(ylims()) .≤ yticks .≤ last(ylims())]
plot!(yticks=(yticks, string.(yticks)), xticks=0:7:last(xlims())+4)
end
lockdowndict = Dict(
:Australia => nothing,
:Italy => Date("9 March 2020", dateformat"d U Y"),
:France => Date("16 March 2020", dateformat"d U Y"),
:China => Date("23 January 2020", dateformat"d U Y"),
)
function addtrend(dailygrowth, alignment)
d = 0:last(xlims())
c = alignment * (1 + dailygrowth) .^ (d)
plot!(d, c, ls=:dot, color=:gray, lw=2, label="+$(100dailygrowth)% daily")
plot!(legend=:bottomright)
end
# Do it! (plotting the data)
countries = [:China, :Turkey, :India, :Iraq, :Bahrain, :Iran, :Germany, :Switzerland, :Netherlands, :Belgium, :Italy, :France, :Spain, :Australia, :US, :United_Kingdom, :Singapore, :Korea_South, :Japan, :Norway, :Finland, :Sweden]
doit(df, countries, 100, lockdowndict)
addtrend(0.25, 100)
@briochemc
Copy link
Author

briochemc commented Mar 18, 2020

First output "Will Australia be like current Italy in ~3 weeks?"

covid19.jl output

Second output: All death cases above 10

covid19_deaths.jl output

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment