I fear this might be a stupid question . . . but, how does one remove the numeric labels from an axis in a plot
?
I searched the documentation
https://docs.juliaplots.org/latest/attributes/
but didn’t find an option. (It’s entirely possible that I’m missing it, though.)
In the following example, I’d like to remove the numeric labels “-4”, “-2”, “0”, etc. from the y axis, leaving the tick marks and grid lines intact.
using Plots
plot(100:100:300, hcat([1, 2, 4], [-1,-2,-4]))
For my actual plot, I’d like to do this because only the relative amplitudes of the curves matter.
runjaj
October 25, 2022, 11:13am
2
ryofurue:
plot(100:100:300, hcat([1, 2, 4], [-1,-2,-4]))
This is just a hack…
plot(100:100:300, hcat([1, 2, 4], [-1,-2,-4]), xtickfontcolor=:white)
Another way:
plot(1:3, [[1, 2, 4] [-1,-2,-4]], xformatter=_->"")
t-bltg
October 30, 2022, 1:49pm
4
2 Likes
@t-bltg , excellent. In which version of Plots.jl will this fix be available so that we can start using it?
@t-bltg , thanks, it works in v1.35.7 for the above examples with keyword xformatter = :none
.
However, I can’t get it to work inside a plot recipe together with ticks := :native
, which is key when zooming linked subplots.
t-bltg
November 2, 2022, 9:35am
8
Hum, can you post a MRE
?
Also, on which backend ?
@t-bltg , thanks.
Please find MWE below using the pyplot()
backend.
The problem is to have multiple linked subplots, have only one y-scale on the left, be able to zoom-in with ticks = :native
and keep the y-grid lines synchronized.
Notice how the y-grid lines are out of sync (the bottom figure is a zoom-in of the top one ):
MWE CODE
using Measures, Plots; pyplot()
mutable struct MyMatrix
M::Matrix{Float64}
end
@recipe function f(MM::MyMatrix)
seriestype := :path
link := :y
yflip := true
framestyle := :box
n = size(MM.M,2)
layout := (1, n-1)
for i in 2:n
@series begin
ylabel := nothing
subplot := i-1
(i==2) && (yaxis := "Y-axes [unit]")
(i==2) && (ticks := :native)
(i>2) && (yformatter := :none)
leftmargin := (i==2) ? 5mm : -15mm
MM.M[:,i], MM.M[:,1]
end
end
end
n = 1000
x = range(0,20,n)
MM = MyMatrix(Matrix{Float64}(undef,n,3))
MM.M[:,1] .= x
MM.M[:,2] .= sin.(x)
MM.M[:,3] .= 4*cos.(x)
plot(MM)
t-bltg
November 2, 2022, 10:38am
10
Thanks, the issues appears on the first image, the ticks are out of sync.
This is because we use get_shared_y_axes().join(...)
in the PyPlot
backend .
It looks like we have to set the ticks manually, as hinted in python - How to share x axes of two subplots after they have been created - Stack Overflow .
It won’t work with zoom in and zoom out, will it?
Note that if we keep the y-labels on each linked subplot and use ticks = :native
, then everything is in-sync, including during zoom-in. But then the plot looks ugly with all the y-labels repeated in all subplots…
EDIT:
Nevermind, using selective transparency is an effective workaround: ytickfontcolor = RGBA(0,0,0,0)
t-bltg
November 2, 2022, 10:59am
12
It looks like using sharex
or sharey
allows sync when zooming: ax != y_ax_link && ax."sharey"(y_ax_link)
, but it makes y ticks labels appear twice …
Would this be acceptable ?
1 Like
As indicated in my previous post (edited), good results can be obtained using: ytickfontcolor = RGBA(0,0,0,0)
, in addition to link = :y
and ticks = :native
. Thank you.
1 Like