matplotlib 如何缩放点以获得更好的绘图

jv4diomz  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(107)

我有几个数据对,我需要显示在一个图上。例如,我有这个图与测试数据:

这是我用来生成这个图的代码:

import matplotlib.pyplot as plt
  
  data_pairs = [
      (13, 24),
      (15, 32),
      (12, 45),
      (23, 40),
      (8, 23),
  ]
  
  y_coordinates = [5, 10, 15, 20, 25]
  
  plt.figure(figsize=(10, 5))
  
  for i, (x1, x2) in enumerate(data_pairs):
      y = y_coordinates[i]
      plt.scatter(x1,y, color='blue', marker='o', s=50)
      plt.scatter(x2,y, color='blue', marker='o', s=50)
      plt.plot([x1, x2], [y, y], color='red', linestyle='-', linewidth=2)
  
  plt.xlabel('X-Axis')
  plt.ylabel('Y-Axis')
  
  plt.grid(True)
  plt.show()

测试数据一切正常,但我使用的真实的数据真的很大。这是真实的数据的一部分:

data_pairs = [
   (24193550, 24335121),
   (42850956, 42993424),
   (45606871, 45749886),
   (60595038, 60738084),
    (5026097, 5170030),
             ]

结果被揉在一起,没有线条显示出来:

我该怎么办?

hi3rlvi2

hi3rlvi21#

没有一个真正的方法来“修复”图。它显示了数据的准确表示。从这里开始的位置取决于您希望通过此图传达的信息。图目前显示的很好的是点对在x和y空间中如何相互关联。很难从中辨别出每对点之间的相对距离。但是由于数据,即一对中每个点之间的距离与x轴上每个点对之间的距离相比非常小,没有办法在一个图中显示这两个方面。
考虑制作多个不同的图,每个图突出显示数据的特定方面。

fig, axes = plt.subplots(nrows=len(data_pairs), figsize=(5, 8), tight_layout=True)

for (ax, y, x) in zip(axes, y_coordinates, data_pairs):

    ax.plot(x, [y] * 2, '-ro')
    ax.set_ylim(y-1, y+1)
    ax.set_yticks([y], [y])
    ax.spines[['top', 'right']].set_visible(False)
    dist = x[1] - x[0]
    ax.annotate(xy =((x[0] + dist/2), y+0.1), text=f'Distance: {dist}')

但是,每个x轴都会缩放,以使线条看起来具有相同的长度。

相关问题