2011-12-07 11 views
98

matplotlibを使って図の線をプロットしました。今はライン上の個々の点のスタイル、特にマーカーを設定したいと思います。これはどうすればいいですか?matplotlib:行の個々の点のマーカを設定する

編集: 答えた私の質問を明確にするために、私はライン上の個々のマーカーのスタイルを設定することができます。

+2

弧長マーカー間隔のための関連ソリューション:http://stackoverflow.com/questions/17406758/plotting-a-curve-with-equidistant-arc-length-markers –

答えて

178

plotには、キーワードargs linestyleおよび/またはを指定してください。

例えば、破線及び青色の円マーカーを使用して:

plt.plot(range(10), linestyle='--', marker='o', color='b') 

同じもののショートカット呼び出し:

plt.plot(range(10), '--bo') 

example1

ここ可能のリストでありますラインとマーカースタイル:

================ =============================== 
character   description 
================ =============================== 
    -    solid line style 
    --    dashed line style 
    -.    dash-dot line style 
    :    dotted line style 
    .    point marker 
    ,    pixel marker 
    o    circle marker 
    v    triangle_down marker 
^    triangle_up marker 
    <    triangle_left marker 
    >    triangle_right marker 
    1    tri_down marker 
    2    tri_up marker 
    3    tri_left marker 
    4    tri_right marker 
    s    square marker 
    p    pentagon marker 
    *    star marker 
    h    hexagon1 marker 
    H    hexagon2 marker 
    +    plus marker 
    x    x marker 
    D    diamond marker 
    d    thin_diamond marker 
    |    vline marker 
    _    hline marker 
================ =============================== 

編集:コメントで要求されるように、点の任意のサブセットをマーキングの例に:

import numpy as np 
import matplotlib.pyplot as plt 

xs = np.linspace(-np.pi, np.pi, 30) 
ys = np.sin(xs) 
markers_on = [12, 17, 18, 19] 
plt.plot(xs, ys, '-gD', markevery=markers_on) 
plt.show() 

example2

markevery kwargを使用して、この最後の例は、以降で可能です1.4 +、this feature branchのマージにより。古いバージョンのmatplotlibを使用している場合でも、ラインプロットに散布図を重ねることで結果を得ることができます。詳細は、edit historyを参照してください。今後の参考のために

+2

私は知っていますその部分。私がやりたいことは、特定の点だけをマークすることです。あなたの例を考えれば、私はどのようにマーカーを2番目と3番目のポイントにだけ置くのですか? 申し訳ありませんが、私の質問がこの面で十分に明確でない場合。 – dbmikus

+4

スタイル ' - 'でplotを一度呼び出すと、スタイルの 'o'でポイントのサブセットで再びplotを呼び出すことができます。 – wim

+0

私はプロットするために提供した値を反復して、マーカーを使用して切断されたドットのサブプロットを作成するだけですか?そして、彼らは前の行の上に置かれますか?それとももっとクリーンな方法がありますか?私はそのようにしても問題ないですが、私はそれを最も受け入れやすい方法でコーディングしたいと思います。 – dbmikus

11

からplot()によって返さLine2Dアーティストはまた、あなたが唯一の特定のポイントにマーカーを設定することができますset_markevery()方法を持っている - https://matplotlib.org/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D.set_markevery

+2

真実ですが、任意の点ではありません - 開始点でなければなりません:停止:サブセットのステップソートと考えています。 – wim

+0

私の印象では、上記の両方の質問に答えています。その理由は、2つの異なる問題に取り組んでいるからです。 「マーカー」という用語は、通常、曲線のスタイルを指します。そのため、通常のルール(たとえば10件ごと)が暗示されます。 「任意」の部分集合をいくつか選び出したい場合は、元の曲線のマーカーではなく、別の曲線として考えてください。マーカを持つのはまったく別の曲線です。したがって、ポイントを手動で選択する必要があります。この件名は面白く、深くなり、関連するコードを公開した後、今後の記事にコメントします。 –

+1

@wim 1.4を使って任意の点にマークを付けるPRがあります。https://github.com/matplotlib/matplotlib/pull/2662 – tacaswell

9

を参照してください映像ショーすべてのマーカー名前と説明を私は願って、ありそれはあなたを助けるでしょう。

import matplotlib.pylab as plt 
markers=['.',',','o','v','^','<','>','1','2','3','4','8','s','p','P','*','h','H','+','x','X','D','d','|','_'] 
descriptions=['point', 'pixel', 'circle', 'triangle_down', 'triangle_up','triangle_left', 'triangle_right', 'tri_down', 'tri_up', 'tri_left','tri_right', 'octagon', 'square', 'pentagon', 'plus (filled)','star', 'hexagon1', 'hexagon2', 'plus', 'x', 'x (filled)','diamond', 'thin_diamond', 'vline', 'hline'] 
x=[] 
y=[] 
for i in range(5): 
    for j in range(5): 
     x.append(i) 
     y.append(j) 
plt.figure() 
for i,j,m,l in zip(x,y,markers,descriptions): 
    plt.scatter(i,j,marker=m) 
    plt.text(i-0.15,j+0.15,s=m+' : '+l) 
plt.axis([-0.1,4.8,-0.1,4.5]) 
plt.tight_layout() 
plt.axis('off') 
plt.show() 

example1 Click here to see picture

関連する問題