2024-10-05 11:45:30 发布
网友
尝试绘制一组点,其中两个点具有极端Y值。是否有一种方法可以在图形上显示这些值,而不会丢失其他点的值。例如:
[(1, 10), (2, 33), (3, 100000), (4, 17), (5, 45), (6, 8), (7, 950000)]
我正在画一个Y刻度为0-50的图表,然后在50-100000之间出现类似大小的间隙,以展示极限点
不确定matplotlib是否可以自动完成,但您可以尝试以下几种方法:
matplotlib
使用对数刻度y轴,即ax.set_yscale('log')。这将在一定程度上减少常规点和异常点之间的差异,但您仍然可以看到所有常规数据都位于图表的底部
ax.set_yscale('log')
手动将异常值的y值更改为非该极值。稍后,您可以通过使用plt.yticks(actual_data_array, what_to_display_array)
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))
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()
看起来是这样的:
不确定
matplotlib
是否可以自动完成,但您可以尝试以下几种方法:使用对数刻度y轴,即
ax.set_yscale('log')
。这将在一定程度上减少常规点和异常点之间的差异,但您仍然可以看到所有常规数据都位于图表的底部手动将异常值的y值更改为非该极值。稍后,您可以通过使用
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))
下面是我所说的第二种方法的一个例子:
看起来是这样的:
相关问题 更多 >
编程相关推荐