Search code examples
gnuplot

gnuplot how to put legend/Key in third column with multiplot


How do I put legend/Key outside of my plots in the third column (here) ?

The name of my labels are stored in the Countries's name list. So the 4 curves in each graph correspond to a country.

You can find the data here : https://www.ecdc.europa.eu/en/publications-data/data-national-14-day-notification-rate-covid-19

Data look likes this :

France,FRA,Europe,67012883,cases,1,2020-07,0.00895350226910846,12,"Epidemic intelligence, national weekly data"
France,FRA,Europe,67012883,cases,0,2020-08,0.00149225037818474,12,"Epidemic intelligence, national weekly data"
France,FRA,Europe,67012883,cases,118,2020-09,0.1760855446258,130,"Epidemic intelligence, national weekly data"
France,FRA,Europe,67012883,cases,996,2020-10,1.66236692129781,1126,"Epidemic intelligence, national weekly data"

my script :

#system("wgets https://opendata.ecdc.europa.eu/covid19/nationalcasedeath/csv -P $PWD -O data1.csv")
Countries = "France Italy Belgium Luxembourg"
categories = "cases death"

reset
set term wxt font ',11' size 1200,800
set datafile separator ","
set grid
set key outside right top

timefmt = "%Y-%W"
set xtics time format timefmt rotate by -45
SECPERWEEK = 3600.*24.*7.
Y_W(col) = timecolumn(col,timefmt) + SECPERWEEK * (strcol(col)[6:7] - 1)

set multiplot layout 3,3
do for [category in categories]{
    set title sprintf("Nbre %s",category)
    plot for [country in Countries] sprintf("<grep %s.*%s data1.csv",country,category) u (Y_W(7)):6 notitle w l lw 2
}

#PUT legend
set multiplot next

#t sprintf("Nbre %s %s",category,country)

do for [category in categories]{
    set title sprintf("%s %s","%",category)
    plot for [country in Countries] sprintf("<grep %s.*%s data1.csv",country,category) u (Y_W(7)):8 notitle w l lw 2
}
set multiplot next
#sprintf("%s %s %s","%",category,country)

do for [category in categories]{
    set title sprintf("Cumul %s",category)
    plot for [country in Countries] sprintf("<grep %s.*%s data1.csv",country,category) u (Y_W(7)):9 notitle w l lw 2
}
set multiplot next
#t sprintf("Cumul %s %s",category,country)

unset multiplot

enter image description here


Solution

  • One possible suggestion: use screen coordinates for the key and show the title only for one graph. Something like this:

    Code: (edit: simply unset key after the first plot)

    ### only one key for multiplot
    reset session
    
    Countries = "France Italy Belgium Luxembourg"
    
    set key at screen 0.9, 0.9
    set multiplot layout 3,3 columnsfirst
        do for [i=1:6] {
            plot for [j=1:words(Countries)] j*x**i ti word(Countries,j)
            unset key
        }
    unset multiplot
    ### end of code
    

    Result:

    enter image description here

    Addition:

    When plotting the key several times on top of each other, e.g. in a wxt terminal, it might look like bold (probably depends on the terminal). See example below. Top row: 6 keys on top of each other, Bottom row: only one key. So it might be better to turn off key after the first plot.

    enter image description here