2016-03-17 3 views
1

Я совершенно не знаком с Julia. Я использую пакет PyPlot в Julia и просто пытаюсь установить начало оси x и y на 0 и 0 соответственно. На данный момент он просто выбирает, где происхождение будет основываться на значениях точек, которые я рисую.Установить начало оси с использованием графика PyPlot в Julia

plot(x1,y1,".") 
xlabel("X1") 
ylabel("Y1") 
title("First Line") 
grid("on") 

Я пробовал следующее, но он не работает. change matplotlib axis settings

+1

Было бы полезно, если бы вы дали команду matplotlib вместе с эквивалентом Julia, который вы действительно пробовали, следуя описанию синтаксиса в документации PyCall.jl. –

+0

Я начинаю здесь на 100% и понятия не имею, о чем вы говорите. То, что я сделал, приведено выше. Помогите! – lara

+0

Я начал использовать PyPlot.axis ([xmin, xmax, ymin, ymax]) для этого: PyPlot.plot (spacerdata [: Width], spacerdata [: Curvature], ".") PyPlot.xlabel ("Ширина ") PyPlot.ylabel (« Кривизна ») PyPlot.title (« Сюжет ») PyPlot.grid (« on ») PyPlot.axis ([0,2,0,4]) – lara

ответ

2

Использование PyPlot в Julia отличается от matplotlib в Python. Вы ищете эквивалент Юлии, устанавливающий пределы для оси. Я нашел this useful github repo, который может пригодиться вам.

Вот как вы можете добавлять собственные пределы оси у:

using PyPlot 

x1 = rand(50, 1) .* 30 .+ 50 
y1 = rand(50, 1) .* 30 .+ 100 

plot(x1, y1) 

# get the current axis argument of the plot 
ax = gca() 

# add new limits from 0 - 100 
ax[:set_ylim]([0,100]) 
+0

К сожалению, это не похоже, работают.Я получаю следующую ошибку: LoadError: UndefVarError: не определено – lara

+0

Вы правы! Я забыл назначить ось сюжета топору. См. Отредактированный ответ выше. Надеюсь, это получит то, что вы хотите. – niczky12

+1

Вы можете забыть о 'ax' и просто использовать' ylim (1, 100) '. Но это не отвечает на исходный вопрос. –

1

Синтаксис для использования PyPlot в Джулии немного отличается от Python. Это результат того, что (в настоящее время) вы не можете использовать obj.f() для доступа к методу (функции) f() внутри объекта obj в Julia, который PyPlot использует сильно.

Чтобы обойти это, obj.f() в Python заменяется на obj[:f]() в Julia; обратите внимание на :.

Так ax.spines в Python становится

ax[:spines] 

в Джулию.

Как отмечено другим плакатом, вы должны сначала сделать ax = gca(), чтобы сохранить текущий объект оси в переменной ax.

Если вы делаете это на Джулии РЕПЛ или в записной книжке Jupyter, вы увидите

julia> ax = gca() 
PyObject <matplotlib.axes._subplots.AxesSubplot object at 0x31f854550> 

julia> ax[:spines] 
Dict{Any,Any} with 4 entries: 
    "left" => PyObject <matplotlib.spines.Spine object at 0x31f854c10> 
    "bottom" => PyObject <matplotlib.spines.Spine object at 0x31f854f50> 
    "right" => PyObject <matplotlib.spines.Spine object at 0x31f854dd0> 
    "top" => PyObject <matplotlib.spines.Spine object at 0x31f86e110> 

показывает, что ax[:spines] является словарем. (Я ранее не знал об этом. Это преимущество наличия интерактивного сеанса - вы можете просто спросить у Джулии, что вам нужно знать. Это называется «интроспекция».)

После ответа Python, связанного с оригинальный вопрос, то вам необходимо заменить ax.spines['left'].set_position('zero') в Python следующим в Джулии:

ax[:spines]["left"][:set_position]("zero") 

Опять же, set_position метод внутри объекта ax[:spines]["left"] называется. Также обратите внимание, что строки в Julia должны иметь ", а не '.

Смежные вопросы