Julia 朱莉娅:两个x轴用于相同数据的绘图
对于某些函数,使用两个x轴绘制一个数据集既方便又常见。我手边的例子是一个函数,其形式为Julia 朱莉娅:两个x轴用于相同数据的绘图,julia,plotly,Julia,Plotly,对于某些函数,使用两个x轴绘制一个数据集既方便又常见。我手边的例子是一个函数,其形式为f(T)=a*exp(-H/(R*T)),它将以1/T在x轴上绘制,以log(f)在y轴上绘制。在这种形式下,它方便地显示为一条直线,但为了便于读取实际温度T,而不是1/T,通常将相应的T值放在同一绘图的第二个x轴上(当然,这是反向的,也不是线性间隔的)。我如何与Julia和Plotly一起实现这一点 下面是我试图绘制的绘图类型的示例。值得一提的是,在Gnuplot中,额外的第二个(上)x轴将通过1./x逆1.
f(T)=a*exp(-H/(R*T))
,它将以1/T
在x轴上绘制,以log(f)
在y轴上绘制。在这种形式下,它方便地显示为一条直线,但为了便于读取实际温度T
,而不是1/T
,通常将相应的T
值放在同一绘图的第二个x轴上(当然,这是反向的,也不是线性间隔的)。我如何与Julia和Plotly一起实现这一点
下面是我试图绘制的绘图类型的示例。值得一提的是,在Gnuplot中,额外的第二个(上)x轴将通过1./x逆1./x使用设置链接x2创建。
要添加第二个Y轴,在Plots.jl
包中有一个twinx()
方法。不幸的是,没有允许添加次X轴的twny()
方法
但是,您可以使用twinx()
code并简单地将其转置:
function twiny(sp::Plots.Subplot)
sp[:top_margin] = max(sp[:top_margin], 30Plots.px)
plot!(sp.plt, inset = (sp[:subplot_index], bbox(0,0,1,1)))
twinsp = sp.plt.subplots[end]
twinsp[:xaxis][:mirror] = true
twinsp[:background_color_inside] = RGBA{Float64}(0,0,0,0)
Plots.link_axes!(sp[:yaxis], twinsp[:yaxis])
twinsp
end
twiny(plt::Plots.Plot = current()) = twiny(plt[1])
现在就这样使用它:
using Plots
plot(1:10,rand(10), label = "randData", ylabel = "Y axis",color = :red, legend = :topleft, grid = :off, xlabel = "Numbers Rand")
p = twiny()
plot!(p,5:15,log.(5:15), label = "log(x)", legend = :topright, box = :on, grid = :off, xlabel = "Log values")
谢谢你的建议,但我认为这不是我的意思,我也没有设法修改它以满足我的需要。我编辑了我原来的帖子,并添加了一张示例图片以供澄清。其目的不是添加具有不同x轴的第二条曲线,而是以不同的单位/比例显示具有两个x轴的曲线(在这种情况下,温度和温度相反)。请注意,这还包括反转第二个x轴。不过,我应该补充一点,您的代码本身非常有价值。如果Plots中已经有twinx方法,我想知道为什么twiny也没有实现。你有没有计划尝试让你的小宝石成为官方图景的一部分?是的-可能值得做一个公关。关于你需要做什么(更新)应该很容易-图景中有添加自定义刻度的功能-当我知道如何做时,会发帖子;-)