私はプロット上にいくつかのグリッド線を持ちたいと思っていますが、実際には全長の線はあまりにも/散漫で、点線の明るい灰色の線でさえあります。 SVG出力を手作業で編集して、私が探していた効果を得ました。 matplotlibでこれを行うことはできますか?私はグリッド用のpyplot APIを見ていましたが、それに近づくことができる唯一のことは、xdataとydata Line2D kwargsです。プロット上のグリッド線の代わりに、matplotlibはグリッドの十字線を印刷できますか?
答えて
グリッド線は2点のみを使用して作成されているので、これは、基本的なAPIを介して行うことができません。グリッドラインには、マーカーが描画されるための目盛りごとに「データ」ポイントが必要です。これは以下の例に示されている:
import matplotlib.pyplot as plt
ax = plt.subplot(111)
ax.grid(clip_on=False, marker='o', markersize=10)
plt.savefig('crosses.png')
plt.show()
これがもたらす:グリッド線のため'o'
マーカーは、開始及び軸端部の端部にのみあるか
お知らせ2つの点のみを含む。
一連のArtists
を使用して十字マークを作成する方法を書くことができますが、基本的なプロット機能を活用して十字パターンを描くほうが簡単です。
これは私が次の例では何をすべきかです:これは、次の図になり
import matplotlib.pyplot as plt
import numpy as np
NPOINTS=100
def set_grid_cross(ax, in_back=True):
xticks = ax.get_xticks()
yticks = ax.get_yticks()
xgrid, ygrid = np.meshgrid(xticks, yticks)
kywds = dict()
if in_back:
kywds['zorder'] = 0
grid_lines = ax.plot(xgrid, ygrid, 'k+', **kywds)
xvals = np.arange(NPOINTS)
yvals = np.random.random(NPOINTS) * NPOINTS
ax1 = plt.subplot(121)
ax2 = plt.subplot(122)
ax1.plot(xvals, yvals, linewidth=4)
ax1.plot(xvals, xvals, linewidth=7)
set_grid_cross(ax1)
ax2.plot(xvals, yvals, linewidth=4)
ax2.plot(xvals, xvals, linewidth=7)
set_grid_cross(ax2, in_back=False)
plt.savefig('gridpoints.png')
plt.show()
:
あなたが見ることができるように、私はXに目盛りを取り、 yを使用してグリッド記号( '+')が必要な一連の点を定義します。私はmeshgrid
を使って2つの1D配列を取り、2つの2D配列を各格子点の二重ループに対応させます。私は'+'
というマークスタイルでこれをプロットしています。これは上に十字をプロットし、プロットに関連する行のリストを並べ替えるために追加のキーワードを追加しました。私はグリッドマークのをすべての背後に描画するように調整します。*****
この例では、デフォルトでグリッドが背面に配置され、右側のサブプロットではこのオプションが無効になります。各プロットで緑色の線をたどると、その違いがわかります。あなたは、グリッドを持っていることによって悩まさボーダーに交差している場合は、グリッドを定義する前に
、あなたはそうのように、set_grid_cross
にxとyの両方のための最初と最後の目盛りを削除することができます。
xticks = ax.get_xticks()[1:-1] #< notice the slicing
yticks = ax.get_yticks()[1:-1] #< notice the slicing
xgrid, ygrid = np.meshgrid(xticks, yticks)
を私は次の例では、この、私のポイントを作るために、より大きな、異なるマーカーを使用して:
*****これを指摘して@fraxelによって答えに感謝します。
ティックポイントの交点ごとに線分を描くことができます。その簡単な操作は、axhline
とaxvline
を使用して短い線分を描き、交差点ごとに十字線を作成して、両方の軸の目盛りの位置get_ticklocs()
をすべての組み合わせにループさせてループします。私はzorder=0
を設定しているので、十字線が最初に描画され、プロットデータの後ろに表示されます。色/アルファおよび十字線のサイズを簡単に制御できます。いくつかのちょっとした問題は...ティックの位置を取得する前にプロットしてください。xmin
とxmax
のパラメータも正規化が必要なようです。
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot((0,2,3,5,5,5,6,7,8,6,6,4,3,32,7,99), 'r-',linewidth=4)
x_ticks = ax.xaxis.get_ticklocs()
y_ticks = ax.yaxis.get_ticklocs()
for yy in y_ticks[1:-1]:
for xx in x_ticks[1:-1]:
plt.axhline(y=yy, xmin=xx/max(x_ticks) - 0.02,
xmax=xx/max(x_ticks) + 0.02, color='gray', alpha=0.5, zorder=0)
plt.axvline(x=xx, ymin=yy/max(y_ticks) - 0.02,
ymax=yy/max(y_ticks) + 0.02, color='gray', alpha=0.5, zorder=0)
plt.show()
素晴らしい!クロスのサイズ/長さを微調整する柔軟性がたくさんあります。正規化ビットについては正しいですが、比を正しく取得するためには、特に正方形以外の図形サイズの場合には作業が必要になります。私は目盛りがある軸に余分な線があることを知っているので、それらを取り除こうとします。 –
@a別のベン - ちょっと、x軸とy軸の十字架について気付かなかった!私はスライスでそれらを取り除くために更新しました。そして、ええ、軸の値ではなくプロットのサイズに依存する最小値と最大値は非常に奇妙です。 – fraxel
- 1. Matplotlibの色の3Dグリッド線
- 2. グリッド線の長さ(Rプロット)
- 3. 点線の代わりにmatplotlibの
- 4. Silverlightグリッドには片面にグリッド線がありますが、他のグリッド線はありません
- 5. Excelにエクスポート/グリッド線でHTMLテーブルを印刷
- 6. グリッドのないグリッド線(水平線)を防止する
- 7. JavaFXの枠線グリッド
- 8. TIFFに破線/点線でプロットを印刷
- 9. ハイライトメジャー値グリッド線
- 10. CListCtrlグリッド線幅
- 11. Chart.js:曲線の代わりに直線
- 12. HTMLは十字線の下に十字線を表示します
- 13. matplotlibのプロット破線の円
- 14. matplotlibのプロット破線の円
- 15. SCSSで名前付きのCSSグリッド線
- 16. python2.7:図のx軸のグリッド線の値をプロットする方法
- 17. matlabのグリッド線を太字にする方法はありますか?
- 18. ホバー上のテーブルの十字線
- 19. Python Matplotlibスタイルファイル:水平グリッド線のみを表示する
- 20. 領域の代わりに線をプロットする
- 21. 主要なグリッド線の間に小さなグリッド線を描くにはどうすればよいですか?
- 22. 軸線またはMatplotlib等高線プロットの起点を描く
- 23. コアプロット:グリッド線の背景色
- 24. Dynamics AX 7デフォルトのグリッド線
- 25. ListViewの垂直グリッド線
- 26. vtkXYPlotActorでグリッド線を描く
- 27. 設定グリッド線種
- 28. CSS3グリッド周りの枠線/空白
- 29. Matplotlib:線の端にマーカーをプロットする
- 30. Chart.js v2 - グリッド線を隠す
、有益で革新的!また、kwargsを使って色とサイズをより詳細に設定することができます。 –
軸にマーカーをプロットするという問題もあります。私はxgridをスライスすることができたら、ygridの配列 –