2014-01-14 12 views
6

同じy軸値を持つすべての点を一直線に接続するようにnumpy配列をプロットしようとしています。しかし、私はこれを達成することができない方法。python matplotlibで同じ値を持つ点を接続する

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

# Declare numpy array with nans 
x=np.array([np.nan,10005,10005,10006,10006,10006,10007,10007,10007, 10008,10007,10008,10008,10008, np.nan,10010,10010,10010, np.nan, np.nan, np.nan, np.nan]) 

# Plot the points 
plt.plot(x, marker="o", linestyle='-') 

# Display the plot in the window 
plt.show() 

これは、その結果: enter image description here

しかし、私はプロットがなりたい:

enter image description here

また、上部に余裕を追加する方法があればと境界点をはっきりと表示するためにプロットの一番下に表示されます。

+2

ナイーブ溶液は全て等しいyの値のリストのリストを作成し、別々の線としてそれらをプロットすることであろう。 –

+1

余白を制御するなど、Figureをより細かく制御したい場合は、figureオブジェクトとAxesオブジェクトを作成すると、図形(およびその軸)のすべての種類のものを簡単に設定できます。図のように、axes = plt.subplots() –

答えて

4

あなたのy値のユニークなリストをループします(私は物事をより明確にするためにラベルを変更しました)。 x値のセットも必要です。これらは暗黙的にプロットと同じですが、位置が必要です。

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

# Declare numpy array with nans 
y=np.array([np.nan,10005,10005,10006,10006,10006,10007,10007,10007, 10008,10007,10008,10008,10008, np.nan,10010,10010,10010, np.nan, np.nan, np.nan, np.nan]) 
x=np.arange(y.size) 

for yv in np.unique(y): 
    if yv != np.nan: 
     idx = y == yv 
     plt.plot(x[idx],y[idx],marker='o',linestyle='-',color='b') 
plt.margins(.1,.1) 
plt.show() 

あなたが自分で境界線を交差プロットからいくつかのスペースを与えることができますplt.marginsを使用します。

enter image description here

+1

素敵なアプローチ、私の素朴な解決策よりも良い –

+2

@IvoFlipseそれは素朴な解決策です:)。唯一の違いは、マスクを使用して明示的にビルドするのではなく、条件付きでリストを作成することです。 – Hooked

+0

ああ待って、私はそれが単一の値をインデックスしていたが、y == yvかどうかを確認するためにマスクを作成する行を逃した。まだ素敵な解決策:-) –