结束使用 Spyder 在 matplotlib 中手动选择轮廓 IDE
Ending manual selection of contours in matplotlib using Spyder IDE
我正在尝试使用 matplotlib.pyplot.clabel
手动放置等高线标签,如下所示:
import matplotlib.pyplot as plt
import numpy as np
# Make example contours
N=20
X = np.linspace(0.0, 10.0, N)
Y = np.linspace(0.0, 25.0, N)
Z = np.ones((N,N))
i=0
j=0
for i in range(N):
for j in range(N):
Z[i][j] = i+j
j += 1
i += 1
Z = Z.transpose()
# Make subplots figure
fig, axes = plt.subplots(2, 1, sharex=True, figsize=(8,5))
im = axes[0].contour(X, Y, Z, colors = 'k')
CLS = plt.clabel(im, colors = 'k', fmt = '%2.1f', fontsize=12, manual=True)
im2 = axes[1].contourf(X, Y, Z)
fig.show()
此代码生成下图,当您左键单击不同的等高线时,它将等高线标签添加到它们:
控制台上 python 跟踪点击的消息是:
Select label locations manually using first mouse button.
End manual selection with second mouse button.
问题是右击并没有结束事件记录,我在运行时无法在脚本中通过这一点。我已经使用 Spyder 在 Windows 和 Mac 上进行了尝试,但未记录 第二个鼠标按钮 。
编辑 1:正如@ImportanceOfBeingErnest 指出的那样,第二个鼠标按钮 实际上是滚轮,而不是右键。我决定按原样保留这个问题,因为我认为这对 matplotlib 的每个用户来说都不清楚。
我想知道如何结束手动选择过程,以便程序继续运行并且我能够检索到这样的图形:
但当然有等高线标签。我已经在自动、Tkinter 和 Qt5 中用图形绘图仪尝试过这个过程,但没有成功。
不是您期望的答案,但我自己也遇到过与 clabel
类似的问题,并且以不同的方式使用 manual
关键字找到了解决方法。您所要做的就是提供一个元组的元组,每个元组都包含所需标签的坐标(坐标就像您在带有 x 和 y 刻度标签的图表上阅读一样)。然后该算法会将您的标签添加到最近的轮廓。有一些尝试和错误,但至少我发现它比鼠标选择更可靠。
ax.clabel(contourObject, colors='', fmt='', fontsize=,
manual=((x1, y1), (x2, y2), (x3, y3)), inline=True,
inline_spacing=)
我在 PyCharm/windows 10 上试过了。
单击滚动按钮结束录制,当我在 clabel 函数中添加 inline=False
时,我可以删除最后添加的标签。
你可能会在matplotlib中找到解决方案事件处理和选择
文档:link
正如@ImportanceOfBeingErnest所说,第二个鼠标按钮实际上是滚轮,而不是右键。如果您的鼠标具有所有三个按钮,那么这就是解决方案。
对于使用 Magic Mouse 的 Mac 用户,解决方案并不那么简单。我能够让它与第 3 方应用程序一起工作 BetterTouchTool。下载后,转到 系统偏好设置 >> 安全和隐私 。在 允许以下应用程序控制您的计算机。 部分下,启用 BetterTouchTool。
然后,打开应用程序并在 Select 触发器 下选择 1 Finger Middle Click。然后在右侧的 分配给 Selected 触发器的操作 部分下,选择 中键单击 。一旦完成,按下魔术按钮的中间就可以了:
我正在尝试使用 matplotlib.pyplot.clabel
手动放置等高线标签,如下所示:
import matplotlib.pyplot as plt
import numpy as np
# Make example contours
N=20
X = np.linspace(0.0, 10.0, N)
Y = np.linspace(0.0, 25.0, N)
Z = np.ones((N,N))
i=0
j=0
for i in range(N):
for j in range(N):
Z[i][j] = i+j
j += 1
i += 1
Z = Z.transpose()
# Make subplots figure
fig, axes = plt.subplots(2, 1, sharex=True, figsize=(8,5))
im = axes[0].contour(X, Y, Z, colors = 'k')
CLS = plt.clabel(im, colors = 'k', fmt = '%2.1f', fontsize=12, manual=True)
im2 = axes[1].contourf(X, Y, Z)
fig.show()
此代码生成下图,当您左键单击不同的等高线时,它将等高线标签添加到它们:
控制台上 python 跟踪点击的消息是:
Select label locations manually using first mouse button. End manual selection with second mouse button.
问题是右击并没有结束事件记录,我在运行时无法在脚本中通过这一点。我已经使用 Spyder 在 Windows 和 Mac 上进行了尝试,但未记录 第二个鼠标按钮 。
编辑 1:正如@ImportanceOfBeingErnest 指出的那样,第二个鼠标按钮 实际上是滚轮,而不是右键。我决定按原样保留这个问题,因为我认为这对 matplotlib 的每个用户来说都不清楚。
我想知道如何结束手动选择过程,以便程序继续运行并且我能够检索到这样的图形:
但当然有等高线标签。我已经在自动、Tkinter 和 Qt5 中用图形绘图仪尝试过这个过程,但没有成功。
不是您期望的答案,但我自己也遇到过与 clabel
类似的问题,并且以不同的方式使用 manual
关键字找到了解决方法。您所要做的就是提供一个元组的元组,每个元组都包含所需标签的坐标(坐标就像您在带有 x 和 y 刻度标签的图表上阅读一样)。然后该算法会将您的标签添加到最近的轮廓。有一些尝试和错误,但至少我发现它比鼠标选择更可靠。
ax.clabel(contourObject, colors='', fmt='', fontsize=,
manual=((x1, y1), (x2, y2), (x3, y3)), inline=True,
inline_spacing=)
我在 PyCharm/windows 10 上试过了。
单击滚动按钮结束录制,当我在 clabel 函数中添加 inline=False
时,我可以删除最后添加的标签。
你可能会在matplotlib中找到解决方案事件处理和选择 文档:link
正如@ImportanceOfBeingErnest所说,第二个鼠标按钮实际上是滚轮,而不是右键。如果您的鼠标具有所有三个按钮,那么这就是解决方案。
对于使用 Magic Mouse 的 Mac 用户,解决方案并不那么简单。我能够让它与第 3 方应用程序一起工作 BetterTouchTool。下载后,转到 系统偏好设置 >> 安全和隐私 。在 允许以下应用程序控制您的计算机。 部分下,启用 BetterTouchTool。
然后,打开应用程序并在 Select 触发器 下选择 1 Finger Middle Click。然后在右侧的 分配给 Selected 触发器的操作 部分下,选择 中键单击 。一旦完成,按下魔术按钮的中间就可以了: