Julia 带有Gadfly.jl的R样式轴刻度
我不喜欢Gadfly在绘图时选择轴限制的方式,例如,我制作的一个绘图只有画布中心四分之一的数据。MWE可以是:Julia 带有Gadfly.jl的R样式轴刻度,julia,gadfly,Julia,Gadfly,我不喜欢Gadfly在绘图时选择轴限制的方式,例如,我制作的一个绘图只有画布中心四分之一的数据。MWE可以是: plot(x=[2.9,8.01],y=[-0.01,0.81]) 牛虻然后为y轴选择了[0,10]和[-0.5,1]的x轴范围,这两个范围对我来说都太宽了。这里的值显然是虚构的,但基本上是真实数据的边界框 我更希望不要有那么多空白,比如R默认的4%模式(即par(xaxs='R',yaxs='R'))。我可以在牛虻身上得到类似的东西: plot(x=[2.9,8.01],y=[-0
plot(x=[2.9,8.01],y=[-0.01,0.81])
牛虻然后为y轴选择了[0,10]和[-0.5,1]的x轴范围,这两个范围对我来说都太宽了。这里的值显然是虚构的,但基本上是真实数据的边界框
我更希望不要有那么多空白,比如R默认的4%模式(即par(xaxs='R',yaxs='R')
)。我可以在牛虻身上得到类似的东西:
plot(x=[2.9,8.01],y=[-0.01,0.81]
Guide.xticks(ticks=[3:8]),
Guide.yticks(ticks=[0:0.2:0.8]))
i、 e
牛虻身上已经有这样的东西了吗?考虑到我很难找到指南。[xy]ticks
我希望我需要为此编写一些代码
感谢指导员 作为一种变通方法,我修改了工作的版本,在给定的最小/最大值内生成滴答声。在(我天真的)Julia中看起来是这样的: 将给出与我从R得到的结果相同的结果 如果可以自动拉出范围,那就太好了,但在现有的牛虻代码中,我看不出如何做到这一点
# find a "nice" number approximately equal to x.
# round the number if round=true, take the ceiling if round=false
function nicenum{T<:FloatingPoint}(x::T, round::Bool)
ex::T = 10^floor(log10(x))
f::T = x/ex
convert(T, if round
if f < 1.5; 1.
elseif f < 3.; 2.
elseif f < 7.; 5.
else; 10.
end
else
if f <= 1.; 1.
elseif f <= 2.; 2.
elseif f <= 5.; 5.
else; 10.
end
end)*ex
end
function pretty_inner{T<:FloatingPoint}(min::T, max::T, ntick::Int)
if max < min
error("min must be less than max")
end
if min == max
return min:one(T):min
end
delta = nicenum((max-min)/(ntick-1),false)
gmin = ceil(min/delta)*delta
gmax = floor(max/delta)*delta
# shift max a bit in case of rounding errors
gmin:delta:(gmax+delta*eps(T))
end
plot(x=[2.9,8.01],y=[-0.01,0.81],
Guide.xticks(ticks=[pretty_inner(2.9,8.01,7)]),
Guide.yticks(ticks=[pretty_inner(-0.01,0.81,7)]))