私はプロット上にいくつかのグリッド線を持ちたいと思っていますが、実際には全長の線はあまりにも/散漫で、点線の明るい灰色の線でさえあります。 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. Silverlightグリッドには片面にグリッド線がありますが、他のグリッド線はありません
- 2. TIFFに破線/点線でプロットを印刷
- 3. Chart.js:曲線の代わりに直線
- 4. 軸線またはMatplotlib等高線プロットの起点を描く
- 5. vtkXYPlotActorでグリッド線を描く
- 6. ListViewの垂直グリッド線
- 7. コアプロット:グリッド線の背景色
- 8. Chart.js v2 - グリッド線を隠す
- 9. matplotlibの矢印付き線図
- 10. wxgrid上の水平グリッド線を削除します
- 11. radGridからのエクスポートのグリッド線
- 12. 座標軸と重なるグリッド線は、他のグリッド線とは異なる幅を持っています
- 13. Matplotlibを使用してプロット上のグリッドのサイズを定義します
- 14. 線(________)の代わりに点線(....)の軌跡を描く
- 15. コンボボックスの代わりにページ区切り付きのExtJSグリッド
- 16. 変更ListViewのヘッダとグリッド線の色
- 17. extjs 4.0.0の境界線レイアウトのグリッド?
- 18. ASP.NETのGridViewの内部グリッド線
- 19. ハイチャート垂直線(十字線)ロジック
- 20. Silverlight:グリッドの周りに境界線を追加する
- 21. TextBoxのデフォルトの枠線の代わりにカスタムシェイプを使用できますか?
- 22. libgdxでグリッド線を描く方法
- 23. デカルト散布図の極グリッド線
- 24. jTableグリッド線の選択された行
- 25. GridLineなしでWPFグリッドを印刷
- 26. Javaでは住所の代わりに文字列を印刷するには?
- 27. JavaFXのグリッドパネルをきれいにしてグリッド線を維持
- 28. jQPlot - 垂直グリッド線を削除する
- 29. グリッド線が相互に重なり合っています
- 30. 特定の位置にグリッド線をプロットに追加するにはどうすればよいですか?
、有益で革新的!また、kwargsを使って色とサイズをより詳細に設定することができます。 –
軸にマーカーをプロットするという問題もあります。私はxgridをスライスすることができたら、ygridの配列 –