Matplotlib 图在 y 轴上显示 2 个标签
Matplotlib plot shows 2 labels on the y-axis
我正在尝试在 matplotlib 中生成连续生成的绘图。我面临的问题与右侧 y 轴上的标签有关。显示的范围是我想要的,但是还有一个额外的偏移标签 (0, 0.2, ... 1,0)。
def doAnimation():
fig, ax = plt.subplots()
def animate(i):
data=prices(a,b,c) #this gives a DataFrame with 2 columns (value 1 and 2)
plt.cla()
ax.plot(data.index, data.value1)
ax2 = ax.twinx()
ax2.plot(data.index, data.value2)
plt.gcf().autofmt_xdate()
plt.tight_layout()
return ax, ax2
call = FuncAnimation(plt.gcf(), animate, 1000)
return call
callSave = doAnimation()
plt.show()
有什么办法可以去掉集合:0.0、0.2、0.4、0.6、0.8、1.0?
图表是这样的:
plt.cla
清除当前轴。第一次调用 plt.cla
时,当前轴为 ax
(ax2
尚不存在)。清除这些轴会将 ax
的 x 和 y 范围重置为 (0,1)。但是,在第 8 行,您绘制到 ax
,并且两个范围都进行了适当调整。
在第 9 行,您创建了一组 新 轴并将它们命名为 ax2
。当您离开 animate
函数时,名称 ax2
将超出范围,但它所引用的坐标区对象将保留。这些轴现在是当前轴。
第二次调用 animate 时,plt.cla
清除这些轴,将 x 和 y 范围重置为 (0,1)。然后,在第 9 行,您创建了一组 new 轴并将它们命名为 ax2
。 这些轴和之前的不是同一个轴! ax2
其实是指第三组轴,下次调用plt.cla
时会清空。每次对 animate 的新调用都会生成一组新的轴。有问题的轴标签显示为粗体;事实上,它们已被绘制一千次。
最简单(最少的更改)修复是将 ax2 = ax.twinx()
移到 animate
之外,并用单独调用 ax.cla
和 [=28= 替换 plt.cla
].
我认为更好的方法是在 animate
之外创建行,并在 animate
内修改它们的数据。当我们这样做的时候,让我们用对 fig
的引用替换对 plt.gcf()
的引用,并通过 将参数设置为 tight_layout
[=34] =].
将上述变化放在一起,我们得到,
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import pandas as pd
import numpy as np
def dummy_prices():
samples = 101
xs = np.linspace(0, 10, samples)
ys = np.random.randn(samples)
zs = np.random.randn(samples) * 10 + 50
return pd.DataFrame.from_records({'value1': ys, 'value2': zs}, index=xs)
def doAnimation():
fig, ax = plt.subplots(1, 1, tight_layout=True)
fig.autofmt_xdate()
ax2 = ax.twinx()
data = dummy_prices()
line = ax.plot(data.index, data.value1)[0]
line2 = ax2.plot(data.index, data.value2, 'r')[0]
def animate(i):
data = dummy_prices()
line.set_data(data.index, data.value1)
line2.set_data(data.index, data.value2)
return line, line2
animator = FuncAnimation(fig, animate, frames=10)
return animator
def main():
animator = doAnimation()
animator.save('animation.gif')
if __name__ == '__main__':
main()
其中 animation.gif
应该类似于,
我正在尝试在 matplotlib 中生成连续生成的绘图。我面临的问题与右侧 y 轴上的标签有关。显示的范围是我想要的,但是还有一个额外的偏移标签 (0, 0.2, ... 1,0)。
def doAnimation():
fig, ax = plt.subplots()
def animate(i):
data=prices(a,b,c) #this gives a DataFrame with 2 columns (value 1 and 2)
plt.cla()
ax.plot(data.index, data.value1)
ax2 = ax.twinx()
ax2.plot(data.index, data.value2)
plt.gcf().autofmt_xdate()
plt.tight_layout()
return ax, ax2
call = FuncAnimation(plt.gcf(), animate, 1000)
return call
callSave = doAnimation()
plt.show()
有什么办法可以去掉集合:0.0、0.2、0.4、0.6、0.8、1.0?
图表是这样的:
plt.cla
清除当前轴。第一次调用 plt.cla
时,当前轴为 ax
(ax2
尚不存在)。清除这些轴会将 ax
的 x 和 y 范围重置为 (0,1)。但是,在第 8 行,您绘制到 ax
,并且两个范围都进行了适当调整。
在第 9 行,您创建了一组 新 轴并将它们命名为 ax2
。当您离开 animate
函数时,名称 ax2
将超出范围,但它所引用的坐标区对象将保留。这些轴现在是当前轴。
第二次调用 animate 时,plt.cla
清除这些轴,将 x 和 y 范围重置为 (0,1)。然后,在第 9 行,您创建了一组 new 轴并将它们命名为 ax2
。 这些轴和之前的不是同一个轴! ax2
其实是指第三组轴,下次调用plt.cla
时会清空。每次对 animate 的新调用都会生成一组新的轴。有问题的轴标签显示为粗体;事实上,它们已被绘制一千次。
最简单(最少的更改)修复是将 ax2 = ax.twinx()
移到 animate
之外,并用单独调用 ax.cla
和 [=28= 替换 plt.cla
].
我认为更好的方法是在 animate
之外创建行,并在 animate
内修改它们的数据。当我们这样做的时候,让我们用对 fig
的引用替换对 plt.gcf()
的引用,并通过 将参数设置为 tight_layout
[=34] =].
将上述变化放在一起,我们得到,
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import pandas as pd
import numpy as np
def dummy_prices():
samples = 101
xs = np.linspace(0, 10, samples)
ys = np.random.randn(samples)
zs = np.random.randn(samples) * 10 + 50
return pd.DataFrame.from_records({'value1': ys, 'value2': zs}, index=xs)
def doAnimation():
fig, ax = plt.subplots(1, 1, tight_layout=True)
fig.autofmt_xdate()
ax2 = ax.twinx()
data = dummy_prices()
line = ax.plot(data.index, data.value1)[0]
line2 = ax2.plot(data.index, data.value2, 'r')[0]
def animate(i):
data = dummy_prices()
line.set_data(data.index, data.value1)
line2.set_data(data.index, data.value2)
return line, line2
animator = FuncAnimation(fig, animate, frames=10)
return animator
def main():
animator = doAnimation()
animator.save('animation.gif')
if __name__ == '__main__':
main()
其中 animation.gif
应该类似于,