将高精度数据绘制为轴刻度或将其转换为不同的值?

Plotting high precision data as axis ticks or transforming it to different values?

我正在尝试使用高精度值作为 x 轴刻度在 matplotlib 中将一些数据绘制为直方图。数据介于 0 和 0.4 之间,但大多数值非常接近,例如:

0.05678, 0.05879, 0.125678, 0.129067

我使用 np.around() 来减少值(它使它们从 0 到 0.4 应该如此),但它对所有数据都不太适用。 这是一个工作得有点正确的例子 ->

还有一个没有 ->

你可以看到0.4之后有点是不对的。 这是我在 Jupyter Notebook:

中使用的代码
plt.hist(x=[advb_ratios,adj_ratios,verb_ratios],color = ['r','y','b'], bins =10, label = ['adverbs','adjectives', 'verbs'])
plt.xticks(np.around(ranks,1))
plt.xlabel('Argument Rank')
plt.ylabel('Frequency')
plt.legend()
plt.show()

两个直方图相同,只是我绘制的 x 不同,所有使用的 x 值都在 0 and 1.

之间

所以我的问题是:

  1. 有没有办法解决这个问题并按原样反映我的数据?
  2. 是否最好为我的 rank 值提供不同的标签,以便将它们彼此分开更多,例如 - 1,2,3,4 否则我将失去数据的精度和一些有用的信息?
  3. 在这种情况下一般的做法是什么?不同的图形会有帮助吗?什么?

我不明白你的问题,你的数据在 0 到 0.4 之间这一事实应该不会影响它的显示方式。我不明白为什么除了调用 plt.hist().

还需要做任何其他事情

此外,您可以将一个数组传递给 bins 参数来指示您想要的 bins,这样您就可以执行类似的操作来强制 bins 的大小始终相同

# Fake data
x1 = np.random.normal(loc=0, scale=0.1, size=(1000,))
x2 = np.random.normal(loc=0.2, scale=0.1, size=(1000,))
x3 = np.random.normal(loc=0.4, scale=0.1, size=(1000,))

plt.hist([x1,x2,x3], bins=np.linspace(0,0.4,10))