如何使用matpotlib绘制绘图区域外的数据点?

时间:2017-05-19 12:39:06

标签: python numpy matplotlib

我使用matplotlib绘制数据点。

基本上,我想绘制离散点。他们中的许多人被置于边界之上。但是,如附图所示,图形边界上的数据点仅显示为半圆而不是整圆。

有人可以建议如何将边界上的那些点绘制成完整的圆圈吗?

myBool == false

谢谢!

enter image description here

2 个答案:

答案 0 :(得分:5)

plt.plot kwarg clip_on设置为False,这些点将显示在轴外。

plt.plot(grid_point[0, i, j], grid_point[1, i, j], 'ro',  markersize=15, clip_on=False)

来自docs

  

Artist.set_clip_on(b)

     

设置艺术家是否使用剪辑。

     

当假的艺术家在轴外可见时会导致意想不到的结果。

     

ACCEPTS:[True |假]

这是一个最小的例子:

import matplotlib.pyplot as plt

fig, ax = plt.subplots(1)

ax.set_xlim(0, 1)
ax.set_ylim(0, 1)

ax.plot(0, 0, 'ro', markersize=30, clip_on=True, label='clip_on=True')
ax.plot(1, 1, 'bo', markersize=30, clip_on=False, label='clip_on=False')

ax.legend()    

plt.show()

enter image description here

答案 1 :(得分:3)

艺术家可以通过不允许轴剪辑它们来在轴外显示,例如plt.plot(..., clip_on=False)

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["figure.figsize"] = (5,4)

plt.figure()
X,Y = np.meshgrid(range(4),range(4))
for i in range(0, 4):
    for j in range(0, 4):
        plt.plot(X[i,j], Y[i,j], 'ro',  markersize=30, clip_on=False)
plt.margins(0.0)        
plt.show()

enter image description here

然而,扩展轴范围可能更好,这样艺术家实际上完全生活在轴内。这可以使用plt.margins()完成。

import matplotlib.pyplot as plt
import numpy as np

plt.figure()
X,Y = np.meshgrid(range(4),range(4))
for i in range(0, 4):
    for j in range(0, 4):
        plt.plot(X[i,j], Y[i,j], 'ro',  markersize=30)
plt.margins(0.1)  ## add 10% margin on all sides      
plt.show()

enter image description here