<p>这两种情况不同的原因是隐藏在<code>pandas.DataFrame.plot()</code>逻辑中的一点。正如在<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.plot.html" rel="noreferrer">the documentation</a>中可以看到的,这个方法允许传递很多参数,这样它就可以处理各种不同的情况。</p>
<p>在第一种情况下,通过<code>fig = plt.figure(figsize=(10,4))</code>创建matplotlib图,然后绘制一个单列数据帧。现在pandas plot函数的内部逻辑是检查matplotlib状态机中是否已经存在一个图形,如果已经存在,则使用它的当前轴将列值绘制到该图形。这和预期的一样。</p>
<p>但是在第二种情况下,数据由两列组成。有几个选项可以处理这样的绘图,包括使用具有共享轴或非共享轴的不同子块等。为了使熊猫能够应用这些可能的要求中的任何一个,它将在默认情况下创建一个新的图形,可以将要绘图的轴添加到该图形中。除非指定<code>figsize</code>参数,否则新图形将不知道已存在的图形及其大小,而是具有默认大小。</p>
<p>在注释中,您说一个可能的解决方案是使用<code>df[['A', 'B']].plot(figsize=(10,4))</code>。这是正确的,但是您需要省略初始图形的创建。否则它将产生两个数字,这可能是不希望的。在笔记本中,这是不可见的,但是如果您以通常的python脚本的方式运行它,并在最后使用<code>plt.show()</code>,将会有两个图形窗口打开。</p>
<p>因此,让熊猫负责创造形象的解决方案是</p>
<pre><code>import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({"A":[2,3,1], "B":[1,2,2]})
df[['A', 'B']].plot(figsize=(10,4))
plt.show()
</code></pre>
<p>避免创建新图形的一种方法是为<code>ax</code>函数提供<code>pandas.DataFrame.plot(ax=ax)</code>参数,其中<code>ax</code>是外部创建的轴。此轴可以是通过<code>plt.gca()</code>获得的标准轴。</p>
<pre><code>import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({"A":[2,3,1], "B":[1,2,2]})
plt.figure(figsize=(10,4))
df[['A', 'B']].plot(ax = plt.gca())
plt.show()
</code></pre>
<p>或者使用<a href="https://stackoverflow.com/a/42216385/4124317">answer from PaulH</a>中所示的更面向对象的方式。</p>