Hello,
I need to put on the same graph three lines with different y-axis). I know how to do it with two y-axises (one is right and the other is left).
How to do it with 3 lines, so the left y-axis has to be double.
thank you in advance.
Best
Hello,
I need to put on the same graph three lines with different y-axis). I know how to do it with two y-axises (one is right and the other is left).
How to do it with 3 lines, so the left y-axis has to be double.
thank you in advance.
Best
I think the best advice I can give is “don’t”, two axes is already slightly less than one too many.
That said, have you considered
plot(...)
twinx(...)
twinx(...; ymirror=true)
?
thank you,
But here, 2dn and 3rd y-axises overlapped, unfortunately, it’s not doubled
Okay, there is probably no simpler alternative than using insets with manual bboxes for that. And the reason is most people would consider that poor visualization. Compared to
plot(
plot(...),
plot(...),
plot(...);
layout=(3,1)
)
the triple-axis plot is just harder to read.
But if you’re using it internally where you can learn to read it once and will then use the same layout many times I guess there is no issue with it if you get it to work.
Have you tried using PyPlot.jl to implement Multiple Yaxis With Spines ?
In Makie you can use the ytickalign
keyword for the Axis to move the position of the yticks.
using GLMakie
a = sin.(1:0.01:6); b = sin.(1:0.01:6) .+ randn.();
c = cos.(1:0.01:6) .+ 20
fig = Figure(resolution=(1200,700))
ax1 = fig[1,1] = Axis(fig, ytickalign=-5, yticklabelcolor=:blue)
ax2 = fig[1,1] = Axis(fig, yaxisposition=:right)
ax3 = fig[1,1] = Axis(fig, ytickalign=0, yticklabelcolor=:red)
plot!(ax1, a, color=:blue)
plot!(ax2, b)
plot!(ax3, c, color=:red)
hidexdecorations!(ax1)
hidexdecorations!(ax2)
linkxaxes!(ax1,ax2)
linkxaxes!(ax1,ax3)
This would produce this plot
thanks
thank you
I have the same problem but unfortunately GLMakie did not work for me. The data in addition to the Jupyter Notebook file can be found here: https://datashare.mpcdf.mpg.de/s/uPOltmpkDjlZl4F
I am doing the following:
using Plots
using CSV
using DataFrames
using Colors
df_1 = DataFrame(CSV.File("Energy.csv"))
df_2 = DataFrame(CSV.File("Population.csv"))
df_3 = DataFrame(CSV.File("Ppm.csv"))
a=18
plot(df_2.Year,df_2[:,4],
xlims=(1800,2021),
label = "Population",
ylabel = "World Population",
color=RGB(0.337, 0.631, 0.749),
linewidth=3,
legend = :topleft,
grid = :off,
size = (1600,800),
left_margin = 10Plots.mm,
right_margin = 50Plots.mm,
xtickfontsize=a,
ytickfontsize=a,
xguidefontsize=a,
yguidefontsize=a,
legendfontsize=a)
p = twinx()
plot(p,df_3.Year,df_3[:,4],
xlims=(1800,2021),
label = "Global CO₂ atmospheric concentration",
ylabel = "Global CO₂ concentration in ppm",
color =RGB(0.439, 0.368, 0.470),
linewidth=3,
legend = :topright,
grid = :off,
size = (1600, 800),
left_margin = 10Plots.mm,
right_margin = 50Plots.mm,
xtickfontsize=a,
ytickfontsize=a,
xguidefontsize=a,
yguidefontsize=a,
legendfontsize=a)
p = twinx()
plot!(p,df_1.Year,df_1.sum,
xlims=(1800,2021),
label = "Energy Consumption",
ylabel = "World Primary Energy Consumption",
color =RGB(0.949, 0.352, 0.219),
linewidth=3,
legend = :left,
grid = :off,
size = (1600, 800),
left_margin = 10Plots.mm,
right_margin = 50Plots.mm,
xtickfontsize=a,
ytickfontsize=a,
xguidefontsize=a,
yguidefontsize=a,
legendfontsize=a)
The result is the following:
What I would like to change:
Please help me to make the plot pretty again
I came up with a satisfying solution myself, after finally finding a solution to move the y-axis label here In Plots.jl, how does one control the space between ylabel and yaxis? - #15 by Andre_Mello. The only thing which I could not solve are the position of the legends. Here is the picture:
And here the corresponding code:
a=18
plot(df_2.Year,df_2[:,4],
xlims=(1800,2021),
label = "Population",
ylabel = "World Population",
color=RGB(0.337, 0.631, 0.749),
linewidth=3,
legend = :topleft,
grid = :off,
size = (1600,800),
left_margin = 10Plots.mm,
right_margin = 50Plots.mm,
foreground_color_guide = RGB(0.337, 0.631, 0.749),
ytickfontcolor = RGB(0.337, 0.631, 0.749),
xtickfontsize=a,
ytickfontsize=a,
xguidefontsize=a,
yguidefontsize=a,
legendfontsize=a)
p = twinx()
plot(p,df_3.Year,df_3[:,4],
xlims=(1800,2021),
label = "Global CO₂ atmospheric concentration",
ylabel = "\n\n\n\n\n"*"Global CO₂ concentration in ppm",
color =RGB(0.439, 0.368, 0.470),
linewidth=3,
legend = :topright,
grid = :off,
size = (1600, 800),
left_margin = 10Plots.mm,
right_margin = 50Plots.mm,
yticks = [280,315,345,380,410],
foreground_color_guide = RGB(0.439, 0.368, 0.470),
ytickfontcolor = RGB(0.439, 0.368, 0.470),
xtickfontsize=a,
ytickfontsize=a,
xguidefontsize=a,
yguidefontsize=a,
legendfontsize=a)
p = twinx()
plot!(p,df_1.Year,df_1.sum,
xlims=(1800,2021),
label = "Energy Consumption",
ylabel = "World Primary Energy Consumption",
color =RGB(0.949, 0.352, 0.219),
linewidth=3,
legend = :left,
grid = :off,
size = (1600, 800),
left_margin = 10Plots.mm,
right_margin = 50Plots.mm,
foreground_color_guide = RGB(0.949, 0.352, 0.219),
ytickfontcolor = RGB(0.949, 0.352, 0.219),
xtickfontsize=a,
ytickfontsize=a,
xguidefontsize=a,
yguidefontsize=a,
legendfontsize=a)