在 matplotlib 中绘制指数图 - ytick 间距

Plotting exponential graphs in matplotlib - ytick spacing

我对 matplotlib 和一般绘图还很陌生,所以如果这个问题听起来微不足道,我很抱歉。

我正在尝试绘制具有以下 x 和 y 值的折线图。

x_values = [18, 19, 20, 21, 22, 23, 24]

y_values = [6, 14, 39, 124, 553, 1718, 5524]

问题是,由于 y_values 是指数级的,您无法在图表上真正看到较低的值。我试过玩弄 yticks,但比例保持不变。 有什么方法可以绘制它,以便您可以看到所有值吗?我希望在 yticks 之间有固定间距或类似的东西。

我当前的代码:

import numpy as np
import matplotlib.pyplot as plt

x_values = [18, 19, 20, 21, 22, 23, 24]
y_values = [6, 14, 39, 124, 553, 1718, 5524]

plt.plot(np.array(x_values), np.array(y_values))
plt.xticks(np.arange(18, 25, 1), ('18', '+19', '+20', '+21', '+22', '+23', '+24'))
plt.grid()
plt.show()

plt.yticks(np.concatenate((np.arange(0, 175, 25), [553], [1718], [5524]), axis=None))

这将是我的目标,但 y 轴比例更好。

也许您只是在寻找对数刻度?

plt.plot(x_values, y_values)
plt.yscale("log")
plt.yticks(y_values, y_values)
plt.show()

你会满意吗?它显示了原始图,旁边是较低值的视图?

import numpy as np
import matplotlib.pyplot as plt

x_values = [18, 19, 20, 21, 22, 23, 24]
y_values = [6, 14, 39, 124, 553, 1718, 5524]

plt1 = plt.subplot(121)
plt1.margins(0.05)
plt1.plot(np.array(x_values), np.array(y_values), 'k')
plt1.set_title("Original Graph")
plt1.grid()

plt2 = plt.subplot(122)
plt2.margins()
plt2.plot(np.array(x_values[:4]), np.array(y_values[:4]), 'r')
plt2.set_title("Zoom of Lower Values")
plt2.grid()
plt.show()