在特定的Matplotlib图中,我希望线型基于屏幕上的点数动态变化(基本上,当数据点上的数字足够低时,从-
切换到-o
。
为此,首先我需要在屏幕上获取数据点的数量。我在下面编写了一个代码示例,使用函数get_view_interval
。
import matplotlib.pyplot as plt
def get_Npoints_on_screen(ax=None, line_index=0):
'''
Input
-----
ax: matplotlib axe
l: line number
'''
if ax is None:
ax=plt.gca()
line = ax.get_lines()[line_index]
xmin, xmax = ax.xaxis.get_view_interval()
ymin, ymax = ax.yaxis.get_view_interval()
xdata = line.get_xdata()
ydata = line.get_ydata()
return sum((xdata>=xmin) & (xdata<=xmax) & (ydata>=ymin) & (ydata<=ymax))
# Just a figure to play with
if __name__ == '__main__':
from numpy import linspace, pi, cos
x = linspace(0,4*pi,100)
plt.plot(x,cos(x),'ok')
print(get_Npoints_on_screen(),'points on screen')
plt.waitforbuttonpress()
plt.xlim((0,pi))
print(get_Npoints_on_screen(),'points on screen')
它有效,但我觉得它不是很优雅。在Matplotlib中有更直接的方法来获取屏幕上的可见点数吗?