#julia #plotly
#джулия #plotly
Вопрос:
Для определенных функций удобно и обычно строить один набор данных с двумя осями x. Мой пример — это функция формы f(T)=A*exp(-H/(R*T))
, которая должна быть нанесена 1/T
на ось x и log(f)
на ось y. В этой форме он удобно отображается в виде прямой линии, но для удобства считывания фактической температуры T
вместо 1/T
этого обычно помещают соответствующие T
значения на вторую ось x на том же графике (который затем, конечно, переворачивается, а также не линейно разнесен). Как мне добиться этого с помощью Julia и Plotly?
Вот пример типа графика, который я пытаюсь создать. Как бы то ни было, в Gnuplot будет создана дополнительная вторая (верхняя) ось x set link x2 via 1./x inverse 1./x
.
Ответ №1:
Для добавления второй оси Y twinx()
в пакете есть метод Plots.jl
. К сожалению, не существует twiny()
метода, который мог бы позволить добавить дополнительную ось X.
Однако вы можете взять twinx()
код и просто перенести его:
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")
Комментарии:
1. Спасибо за предложение, но я думаю, что это не совсем то, что я имел в виду, и мне не удалось изменить его таким образом, чтобы удовлетворить мои потребности. Я отредактировал свой исходный пост и добавил пример рисунка для пояснения. Цель состоит не в том, чтобы добавить вторую кривую с другой осью x, а в том, чтобы показать кривую с двумя осями x в разных единицах измерения / масштабирования (в данном случае обратная температура и температура). Обратите внимание, что это также включает в себя изменение второй оси x.
2. Я должен добавить, однако, что ваш код весьма ценен сам по себе. Если в графиках уже есть метод twinx, мне интересно, почему twiny также не был реализован. Какие-либо планы с вашей стороны попытаться сделать свой маленький драгоценный камень частью официальных графиков?
3. Да, возможно, стоит сделать пиар. Что касается того, что вам нужно сделать (обновлено), это должно быть легко — в графиках есть функции для добавления пользовательских тиков — когда у меня будет идея, как это сделать, я сделаю сообщение 😉