试图画出一组点,其中几个点有极端的Y值。有没有一种方法可以在图表上展示这些值,而不会丢失其他点的值。举例来说:[(1, 10), (2, 33), (3, 100000), (4, 17), (5, 45), (6, 8), (7, 950000)]我想象一个图表与Y刻度0-50,然后类似大小的差距之间的50-100000展示极端点。
[(1, 10), (2, 33), (3, 100000), (4, 17), (5, 45), (6, 8), (7, 950000)]
bvjxkvbb1#
不确定matplotlib是否可以自动完成,但有几件事你可以尝试:
matplotlib
ax.set_yscale('log')
plt.yticks(actual_data_array, what_to_display_array)
plt.savefig
matplotlib.image.imread
plt.imshow(np.concatenate((image_data[:100], image_data[-100:]), 0))
下面是我刚才提到的第二种方法的一个例子:
import numpy as np import matplotlib.pyplot as plt a = np.array(((1, 10), (2, 33), (3, 100000), (4, 17), (5, 45), (6, 8), (7, 950000)), 'f') # scale the array so that matplotlib can plot it "uniformly" a[a[:,1]>99999,1] = a[a[:,1]>99999,1] / 20000 + 55 plt.plot(*a.T) # do the displaying trick plt.yticks(np.r_[np.linspace(0, 50, 5), np.linspace(100000/20000+55, 950000/20000+55, 5)], np.r_[np.linspace(0, 50, 5, dtype='i'), np.linspace(100000, 950000, 5, dtype='i')]) plt.grid()
它看起来像这样:
1条答案
按热度按时间bvjxkvbb1#
不确定
matplotlib
是否可以自动完成,但有几件事你可以尝试:ax.set_yscale('log')
。这将在一定程度上减少常规点和离群点之间的差异,但您仍然会看到所有常规数据位于图表的底部。plt.yticks(actual_data_array, what_to_display_array)
手动设置y轴的显示内容来显示这些点具有某些值plt.savefig
保存图,matplotlib.image.imread
读取图,最后使用plt.imshow(np.concatenate((image_data[:100], image_data[-100:]), 0))
处理图下面是我刚才提到的第二种方法的一个例子:
它看起来像这样: