Nor*_*add 6 python label matplotlib
亲爱的大家,我想在放大图形后重新计算在刻度标签中写入的 xy 值,使得原点始终位于 (0,0) ,并且显然 x 和 上的值的相对距离y 轴保持不变。
我认为我需要在放大后跟踪我的图形的限制,而不是简单地从实际的 xy 刻度值中减去当前的 xmin 和 ymin 。我想这可以通过事件处理API 来实现, 正如我在这里学到的: Source1
这也是我开始 MWE 的地方:
import matplotlib.pyplot as plt
#
# Some toy data
x_seq = [x / 100.0 for x in xrange(1, 100)]
y_seq = [x**2 for x in x_seq]
#
# Scatter plot
fig, ax = plt.subplots(1, 1)
ax.scatter(x_seq, y_seq)
#
# Declare and register callbacks
def on_xlims_change(axes):
a=axes.get_xlim()
print "updated xlims: ", axes.get_xlim()
return a
def on_ylims_change(axes):
a=axes.get_ylim()
print "updated ylims: ", axes.get_ylim()
return a
ax.callbacks.connect('xlim_changed', on_xlims_change)
ax.callbacks.connect('ylim_changed', on_ylims_change)
#
# Show
plt.show()
Run Code Online (Sandbox Code Playgroud)
但我真的不知道我该怎么走?我是否必须在 on_xlims_change 函数内进行计算并更改那里的 x 和 y 刻度标签?再说一次,我想我真的只需要更改标签中给出的值,对吗?或者更改坐标的实际值以便自动刻度标签仍然有效会更容易吗?
这可能并不像听起来那么容易。更改限制时,您将更改限制,从而使回调无限运行,从而导致窗口崩溃。
因此,我会选择另一种解决方案,使用第二个轴。假设您有两个轴:
ax2是要绘制的轴。但它没有框架,也没有刻度标签。这是您可以用来更改限制的轴。ax是空的。它最初具有与 相同的限制ax2。它将显示刻度标签。一旦放大ax2回调函数就可以根据您的喜好更改限制ax。这就是屏幕上显示的内容。
import matplotlib.pyplot as plt
# Some toy data
x_seq = [x / 100.0 for x in range(1, 100)]
y_seq = [x**2 for x in x_seq]
# ax is empty
fig, ax = plt.subplots()
ax.set_navigate(False)
# ax2 will hold the plot, but has invisible labels
ax2 = fig.add_subplot(111,zorder=2)
ax2.scatter(x_seq, y_seq)
ax2.axis("off")
ax.set_xlim(ax2.get_xlim())
ax.set_ylim(ax2.get_ylim())
#
# Declare and register callbacks
def on_lims_change(axes):
# change limits of ax, when ax2 limits are changed.
a=ax2.get_xlim()
ax.set_xlim(0, a[1]-a[0])
a=ax2.get_ylim()
ax.set_ylim(0, a[1]-a[0])
ax2.callbacks.connect('xlim_changed', on_lims_change)
ax2.callbacks.connect('ylim_changed', on_lims_change)
# Show
plt.show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2599 次 |
| 最近记录: |