有人知道如何更改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()
这将创建一个这样的图形:
但是,我试图将y轴更改为如下所示(这样),以便我可以更好地可视化折线图的分布,但仍可以显示矩形的高度。
我试图使第一个刻度间距(0到0.1)与下一个刻度间距(0.1到1)相同,在1到5之间有较大的间距,然后减小5个刻度之后的间距。 / p>
答案 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()
哪个会产生:
答案 1 :(得分:1)
我认为您正在寻找的matplotlib文档的一部分是yscale或(如果您使用的是面向对象的API,则是set_yscale。)
如果默认的可用y刻度(例如'log','symlog','logit')不适合您,则可以创建自己的刻度。这是有关that和example的文档。