2016-09-05 16 views
0

私は3つの方向の引数を取ることができる行列Hを持っています。私は固有値(関数と考える)を引数の一つの集合として&の隣に - まだ同じグラフに - 別の引数の集合を持つ関数にプロットしたいと思います。 これは、バンド構造をプロットする際に非常に頻繁に使用されます。 それは次のようになります。異なる引数をつけて同じグラフにfuctionをプロットする

enter image description here

これは単にガンマに0を変えていないと2PI(格子定数= 1)Xに、本当に1つのプロットで隣同士にmutlipleplotsを行います。

編集:

私は測定データを持っていない - >これがすべて計算されます。私は7つの引数に依存するnp.matrix(Hamiltonian - 8x8)を持っていますが、私がここで変更するのは方向のものだけです。 グラム=ガンマ、X、...位置である(。私はそれらの方向を知っている) は、各プロットは、このように生成されます。

fig4=plt.figure() 
LG=fig4.add_subplot(111) 
for val in np.linspace(-np.pi/a, 0, 1000): 
    LG.scatter([val]*8, H(val, val , val, -15.2, -s*10.25, 19.60, -5.30)) 
plt.grid() 
plt.title(r"$L-\Gamma$") 
plt.xlabel(r"$k$ in high symmetry points") 
plt.xticks([-C*0.5, 0.], ["L", "$\Gamma$"]) 
plt.ylabel("energy/eV") 
plt.show() 

医師は簡単にそれを理解するように、私は、物理学が含まれています。ここに多くない場合:

私は関数plot1とplot2を持っています& plot2を、同じy軸でx軸が異なるグラフに水平に追加したいとします。画像のように(g-Xからは1つの関数、XからW、別の関数など)

Edit2:TobyD &の答えは、引数なしの引数の横にいくつかの引数をつけてプロットすることができました。 私の問題は原理的に解決可能だと思いますが、関数ではなく行列であり、固有値を計算したいので、複数の方向性のある引数を持っているので、複雑です。私は水平に一緒にカットするだけのプロットを作成することができます(ただし、ペイントとは異なりますが、x軸の説明が1つあります)。

Edit3:ありがとうございましたpathoren & TobyD一番簡単なのは、引数x + something、x-somethingを変更することでした。以下

final answer

+0

これまでに行ったことといくつかのサンプルデータを追加してください。 1軸上にすべてをプロットして点線のaxhspan行を0に追加する必要があります。 –

+0

[ギャラリー](http://matplotlib.org/gallery.html#)に移動し、あなたがしたいことに近いところにある画像を見てから、そのコードを見てどのようにしたのかを見てください。 [plot_fivethirtyeight](http://matplotlib.org/gallery.html#style_sheets)のように – wwii

答えて

1

私はあなたが正しく後にしているものを理解してるなら、私は見てみましょう。

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.gridspec as gridspec 

fig = plt.figure() 
gs = gridspec.GridSpec(1,n, width_ratios = [width_1,...,width_n]) 
axes = [plt.subplot(subplot) for subplot in gs] 
fig.subplots_adjust(wspace=0) 

nは異なる引数の数はあなたがプロットさせたい設定しwidth_nがあなたの正常化に基づいて、選択したどんな単位でそれぞれの幅である場合は:

はこのような何かを試してみてください。

subplots_adjustは、サブプロット間の間隔を0に設定します。GridSpecは、それぞれのサイズをきめ細かく制御します。 shareyフラグは、gridspecで動作しませんので、手動でyチックを試す必要があります。

次に、軸の要素内の各引数セットの関数を任意の範囲でプロットすることができます。基本的には、軸の各要素を、互いに連結したいグラフの1つとして扱います。 @pathorenと同じ例を使用

def f(x, a, b, c): 
    return a*x**2 + b*x + c 

fig = plt.figure() 
gs = gridspec.GridSpec(1, 3, width_ratios = [3, 2, 1]) 
axes = [plt.subplot(subplot) for subplot in gs] 
fig.subplots_adjust(wspace=0) 

x = np.linspace(0, 10, 100) 
y = np.linspace(2, 5 ,100) 
z = np.linspace(0, 2*np.pi, 100) 

f1 = f(x, 1, 2, 3) 
f2 = f(y, 3, -2, 0) 
f3 = f(z, -1, 2, 1) 

axes[0].plot(x, f1, label='f1') 
axes[0].set_xticks([0, 10]) 
axes[0].set_xticklabels(["L", "X"]) 
axes[0].yaxis.tick_left()  

axes[1].plot(y, f2, label='f2') 
axes[1].set_xticks([5]) 
axes[1].set_xticklabels(["G"]) 
axes[1].yaxis.set_tick_params(size=0) 
plt.setp(axes[1].get_yticklabels(), visible=False) 

axes[2].plot(z, f3, label='f3') 
axes[2].set_xticks([2*np.pi]) 
axes[2].set_xticklabels(["Y"]) 
axes[2].yaxis.tick_right()  
axes[2].set_xlim([z[0],z[-1]]) 
plt.setp(axes[2].get_yticklabels(), visible=False) 

plt.show() 

注xticksがわずかに異なっているようにサブプロットを変更するための機能属性こと。 axes[2].set_xlimを使用すると、最後のグラフがうまくカットされます。

Example Graph

+0

はい、私はそのような意味 - x値が重複することができます。さらに、x軸の各パーツのスコープを自分で設定したいと考えています。すなわち、K = 10~L = 20が5単位であり、L = 20~M = 50が3単位である。 (K、L、Mは実際に3Dオブジェクトの座標であり、長さは接続ベクトルのノルムであると判断されるべきであり、一方向の長さではありません) – Carsten

+0

@Carsten私はanwserを更新しました。幅 – TobyD

-1

機能f 3つのパラメータa, b, cをとるスクリプトです。 x値は、対応する関数値f1, f2, f3を有するx1, x2, x3の3つの異なる領域に分割される。いくつかのブレークポイント(x_ticksで定義されています)には線が描かれており、xtickはそれらの点についてのみ示されています。 xlabelsは、x_ticklabelsによって設定され、x_ticks-ポジションでのみ設定されます。

import numpy as np 
import matplotlib.pyplot as plt 

def f(x, a, b, c): 
    return a*x**2 + b*x + c 

x1 = np.linspace(0, 10, 100) 
f1 = f(x1, 1, 2, 3) 
x2 = np.linspace(10, 20, 100) 
f2 = f(x2, 3, -2, 0) 
x3 = np.linspace(20, 50, 100) 
f3 = f(x3, -1, 2, 1) 

fig, ax = plt.subplots(1, 1) 

ax.plot(x1, f1, label='f1') 
ax.plot(x2, f2, label='f2') 
ax.plot(x3, f3, label='f3') 
x_ticks = [10, 20, 50] 
x_ticklabels = ['K', 'L', 'M'] 
ax.vlines(x_ticks, ax.get_ylim()[0], ax.get_ylim()[1]) 
ax.set_xticks(x_ticks) 
ax.set_xticklabels(x_ticklabels) 
ax.set_yticks([]) 

plt.show() 

enter image description here

+0

今、私はこれらの3つの関数を1つのグラフに入れていますが、隣り合っていて、y軸は同じですがx軸自由に選ぶことができます。 0 Carsten

+0

答えを更新しました。これはあなたのために働きますか? – pathoren

関連する問題