首页 > 解决方案 > 使用 Matplotlib 复制 Log10 缩放

问题描述

我正在尝试重新创建一个 y 轴样式如下的图:

在此处输入图像描述

但似乎无法弄清楚如何让轴中断和标签按照我想要的方式排列。我目前在我的代码中这样做:

# plot lines
for key, group in grouped:
    plt.plot(group.x * 950, np.log10(group.y), label=key)

# plot points
exp_group = exp_data.groupby('Experiment')
for key, group in exp_group:
    plt.plot(group.x, np.log10(group.y), label=key, marker='o')

plt.yticks(np.arange(-3, 3), label=10.0**np.arange(-3,3))
plt.show()

在此处输入图像描述

标签: pythonmatplotlib

解决方案


一个解决方案是使用plt.yticks

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 1000)
y = np.exp(x) - x**3 + x**2 - x**(1/2)

plt.figure()
plt.semilogy(x, y)
locs, labels = plt.yticks()
print(locs)
print(labels)
lst_10 = [1, 10, 100, 1000, 10000]
plt.yticks(lst_10, lst_10)
plt.title('Different label on y-axis')

plt.figure()
plt.semilogy(x, y)
plt.title('Default label')
plt.show()

该函数plt.yticks有两个参数,位置和标签。我想要位置 1、10、100、1000、10000 中的标签;我希望标签(位置 1)有一个标签1,标签(位置 10)有一个标签10,依此类推。我也曾经plt.semilogy得到那个半对数轴。


推荐阅读