Matplotlib变频y轴刻度

时间:2020-04-05 17:27:19

标签: python-3.x matplotlib

有人知道如何更改matplotlib图形的y轴比例,以使ytick之间具有不同的间距和不同的步幅。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches

x_data = np.arange(0, 1000, 10)
y_data = np.random.rand(100)

fig, ax = plt.subplots(figsize=(7,2))
plt.plot(x_data,y_data, color='black', linewidth=1)
plt.scatter(x_data,y_data, marker='o', facecolors='none', edgecolors='black', linewidth=1, s=20)
rect = patches.Rectangle((450,0), 100, 14,facecolor='blue', zorder=3)
ax.add_patch(rect)
ax.set_ylim(0,20)
ax.minorticks_on()
ax.yaxis.grid(True, linestyle='-', which='major', linewidth='0.75', alpha=.9)
ax.yaxis.grid(True, linestyle='--', which='minor', linewidth='0.75', alpha=0.6)

plt.show()

这将创建一个这样的图形:

enter image description here

但是,我试图将y轴更改为如下所示(这样),以便我可以更好地可视化折线图的分布,但仍可以显示矩形的高度。

enter image description here

我试图使第一个刻度间距(0到0.1)与下一个刻度间距(0.1到1)相同,在1到5之间有较大的间距,然后减小5个刻度之后的间距。 / p>

2 个答案:

答案 0 :(得分:2)

不确定礼仪如何回答我自己的问题,但想在其他人感兴趣的情况下发帖。

原来我需要的只是一个x 1/2 函数,如此处的示例https://matplotlib.org/3.1.1/gallery/scales/scales.html#sphx-glr-gallery-scales-scales-py

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches

x_data = np.arange(0, 1000, 10)
y_data = np.random.rand(100)

fig, ax = plt.subplots(figsize=(7,2))
plt.plot(x_data,y_data, color='black', linewidth=1)
plt.scatter(x_data,y_data, marker='o', facecolors='none', edgecolors='black', linewidth=1, s=20)
rect = patches.Rectangle((450,0), 100, 14,facecolor='blue', zorder=3)
ax.add_patch(rect)
ax.set_ylim(0,20)
ax.minorticks_on()
ax.yaxis.grid(True, linestyle='-', which='major', linewidth='0.75', alpha=.9)
ax.yaxis.grid(True, linestyle='--', which='minor', linewidth='0.75', alpha=0.6)

def forward(x):
    return x**(1/2)

def inverse(x):
    return x**2

ax.set_yscale('function', functions=(forward, inverse))
ax.set_yticks([0,0.1,1,5,10,15,20])
ax.yaxis.set_minor_locator(plt.MultipleLocator(2.5))

plt.show()

哪个会产生:

enter image description here

答案 1 :(得分:1)

我认为您正在寻找的matplotlib文档的一部分是yscale或(如果您使用的是面向对象的API,则是set_yscale。)

如果默认的可用y刻度(例如'log','symlog','logit')不适合您,则可以创建自己的刻度。这是有关thatexample的文档。

相关问题