如何在右侧绘制Ytick并保留经典左侧

2024-05-23 16:32:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我想绘制一些数据并在右侧添加一个ytick,但当我这样做时,左侧的tick消失了,我想保留它。有人能帮我吗?我看过其他关于这方面的帖子,但它们都使用了ax.命令,我对此并不熟悉,我只使用了plt.函数

我使用了以下命令:

plt.yticks([seuil1,seuil2],["20%","20%"])
plt.tick_params(axis='y',labelleft=False,labelright=True)

不带yticks的绘图: Plot without yticks

使用yticks右侧打印: Plot with yticks right side

如你所见,左侧消失了


Tags: 数据函数命令绘制pltparamsax帖子
2条回答

除了@Alex answer

如果不需要滴答声,请尝试:

import matplotlib.pyplot as plt
import numpy as np
# Create a figure and ax
fig, ax = plt.subplots()

# Get data
x = np.linspace(0, 10, 101)
y = 1 / x

# Plot the data
ax.plot(x, y, label=r"$f(x)=\frac{1}{x}$")

vals = [2, 6]
labs = ['A', 'B']
for val, lab in zip(vals, labs):
    ax.text(1.02, val, lab, transform=ax.get_yaxis_transform())

plt.show()

如果确实需要记号,而不是制作双轴,则还可以创建次轴:

import matplotlib.pyplot as plt
import numpy as np
# Create a figure and ax
fig, ax = plt.subplots()

# Get data
x = np.linspace(0, 10, 101)
y = 1 / x

# Plot the data
ax.plot(x, y, label=r"$f(x)=\frac{1}{x}$")

vals = [2, 6]
labs = ['A', 'B']

secax = ax.secondary_yaxis(1.0)
secax.set_yticks(vals)
secax.set_yticklabels(labs)

plt.show()

关于使用pltax之间的区别,这是使用matplotlib的两种不同风格;它们分别是pyplot和面向对象的样式

使用pyplot样式matplotlib创建和管理图形和轴,可以使用plt.函数对其进行操作

使用面向对象的样式,您可以显式地创建图形和轴(fig, ax = plt.subplots()),然后调用figax上的方法来操作它们。这就是我在示例中采用的方法

看看matplotlib usage guide和它们的tutorials,了解如何创建和定制绘图


在这里,您希望使用^{}创建另一个共享x轴的轴,从而允许您在右侧y轴上定位其他Ytick。我已经在每一行上面评论了这一行正在做的事情

# Create a figure and ax
fig, ax = plt.subplots()

# Get data
x = np.linspace(0, 10, 101)
y = 1 / x

# Plot the data
ax.plot(x, y, label=r"$f(x)=\frac{1}{x}$")
# Place legend
ax.legend(loc="upper right")

# Create a second y-axis
y2 = ax.twinx()
# Copy the y limits from the left axis
y2.set_ylim(ax.get_ylim())
# Set the right y-yick positions
y2.set_yticks([2, 6])
# Set the right y-tick labels
y2.set_yticklabels(["A", "B"])

产生:

Graph of y = 1/x with right tick labels

相关问题 更多 >