2016-09-01 48 views
-2

參考此鏈接Displaying 3 histograms on 1 axis in a legible way - matplotlib在python中的1軸上顯示3個直方圖,我試圖在茱莉亞做同樣的事情,但是不能識別dic函數。在1軸上顯示5個直方圖 - julia

這裏是茱莉亞的代碼。函數字典不被識別。

using PyCall 
@pyimport matplotlib.pyplot as plt 



a=vec(rand(1:1000,400,300)) 
b = vec(rand(200:700,400,300)) 
c = vec(rand(300:1200,400,300)) 

common_params = dict(bins=20, 
        range=(-5, 5), 
        normed="True") 

plt.subplots_adjust(hspace=.4) 
plt.subplot(311) 
plt.title('Default') 
plt.hist(a, **common_params) 
plt.hist(b, **common_params) 
plt.hist(c, **common_params) 
plt.subplot(312) 
plt.title('Skinny shift - 3 at a time') 
plt.hist((a, b, c), **common_params) 
plt.subplot(313) 
common_params['histtype'] = 'step' 
plt.title('With steps') 
plt.hist(a, **common_params) 
plt.hist(b, **common_params) 
plt.hist(c, **common_params) 

plt.savefig('3hist.png') 
plt.show() 

l試圖使用:情節和我也面臨一些問題。下面是使用plotly

using Plotly 

x0 = randn(500) 
x1 = randn(500)+1 


trace1 = [ 
    "x" => x0, 
    "type" => "histogram" 
] 
trace2 = [ 
    "x" => x1, 
    "type" => "histogram" 
] 
data = [trace1, trace2] 
layout = ["barmode" => "stack"] 
response = Plotly.plot(data, ["layout" => layout, "filename" => "stacked-histogram", "fileopt" => "overwrite"]) 
plot_url = response["url"] 

返回的錯誤代碼是:

WARNING: deprecated syntax "[a=>b, ...]" at /home/anelmad/Desktop/stage-inria/code/HTreeRBM.jl/my_tree/random_data/graph_try.jl:20. 
Use "Dict(a=>b, ...)" instead. 
ERROR: LoadError: MethodError: `convert` has no method matching convert(::Type{PlotlyJS.Plot{TT<:PlotlyJS.AbstractTrace}}, ::Array{Dict{ASCIIString,Any},1}, ::Dict{ASCIIString,Any}) 
This may have arisen from a call to the constructor PlotlyJS.Plot{TT<:PlotlyJS.AbstractTrace}(...), 
since type constructors fall back to convert methods. 
Closest candidates are: 
    PlotlyJS.Plot{T<:PlotlyJS.AbstractTrace}(::Array{T<:PlotlyJS.AbstractTrace,1}, ::Any) 
    PlotlyJS.Plot(::PlotlyJS.AbstractTrace, ::Any) 
    call{T}(::Type{T}, ::Any) 

回答

0

的「茱莉亞」的代碼看起來像普通的Python對我來說,這是不PyCall是如何工作的。因此,快譯通()不是朱莉婭功能,但你可以寫出如下獲得朱莉婭詞典:爲Plotly例如不符合你的代碼

common_params = Dict("bins" => 20, "range" => (-5, 5), "normed" => true) 

你的錯誤消息。代碼using Plotly引用與錯誤消息不同的包,指示您正在使用PlotlyJS(Plotly和PlotlyJS是不同的包,PlotlyJS.jl是用於julia v0.4和更新版本的推薦包)。

3

Julia擁有自己的matplotlib接口,名爲PyPlot。 (你沒有真正期待你只需鍵入@pyimport然後只寫Python代碼爲朱莉婭和神奇地擁有這一切的工作,做你:d?)

here關於如何使用PyPlot例子; hist情節特別需要一些特殊的語法來區分它與茱莉亞原生hist函數(check the code for its example)。

這裏是你的代碼轉換爲PyPlot盡我的能力(在朱莉婭v0.6.0作品)

import PyPlot 

a = vec(rand(1:1000, 400, 300)) 
b = vec(rand(200:700, 400, 300)) 
c = vec(rand(300:1200, 400, 300)) 

common_params = Dict(:bins => 20, 
         :range => (-100, 1300), 
         :normed => true) 

PyPlot.subplots_adjust(hspace=.4) 

PyPlot.subplot(311) 
PyPlot.title("Default") 
PyPlot.plt[:hist](a; common_params...) 
PyPlot.plt[:hist](b; common_params...) 
PyPlot.plt[:hist](c; common_params...) 

PyPlot.subplot(312) 
PyPlot.title("Skinny shift - 3 at a time") 
PyPlot.plt[:hist]((a, b, c); common_params...) 

PyPlot.subplot(313) 
common_params[:histtype] = "step" 
PyPlot.title("With steps") 
PyPlot.plt[:hist](a; common_params...) 
PyPlot.plt[:hist](b; common_params...) 
PyPlot.plt[:hist](c; common_params...) 

PyPlot.savefig("3hist.png") 
PyPlot.show() # PS, this is unnecessary in PyPlot. All commands show instantly 

我不知道爲什麼你選擇了一個範圍(-5,5);這在第三個副劇場上造成了一個問題。我已經把它改爲更合理的東西,只是爲了向你展示這個作品。

這裏是下面的結果:

enter image description here