在下面的两个代码段中,唯一的区别似乎是数据源类型(pd.Series
与pd.DataFrame
),plt.figure(num=None, figsize=(12, 3), dpi=80)
在一种情况下是否有效,而在另一种情况下没有效果使用pd.DataFrame.plot时是什么?
代码段1-调整数据为熊猫系列时的地块大小
# Imports
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# data
np.random.seed(123)
df = pd.Series(np.random.randn(10000),index=pd.date_range('1/1/2000', periods=10000)).cumsum()
print(type(df))
# plot
plt.figure(num=None, figsize=(12, 3), dpi=80)
ax = df.plot()
plt.show()
代码段2-现在数据源是一个熊猫数据框
# imports
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# data
np.random.seed(123)
dfx = pd.Series(np.random.randn(100),index=pd.date_range('1/1/2000', periods=100)).cumsum()
dfy = pd.Series(np.random.randn(100),index=pd.date_range('1/1/2000', periods=100)).cumsum()
df = pd.concat([dfx, dfy], axis = 1)
print(type(df))
# plot
plt.figure(num=None, figsize=(12, 3), dpi=80)
ax = df.plot()
plt.show()
这里唯一的区别似乎是数据源的类型。为什么对于matplotlib输出会有话要说?
答案 0 :(得分:1)
看来pd.Dataframe.plot()
的运作方式与pd.Series.plot()
有所不同。由于数据框可能具有任意数量的列,可能需要子图,不同的轴等,因此Pandas默认创建新的figure
。解决此问题的方法是将参数直接传递给plot
调用,即df.plot(figsize=(12, 3))
(不幸的是,dpi
不被接受为关键字参数)。您可以在this great answer中了解更多信息:
在第一种情况下,您可以通过fig =创建matplotlib图 plt.figure(figsize =(10,4)),然后绘制单列DataFrame。 现在熊猫图功能的内部逻辑是检查是否存在 matplotlib状态机中已经存在一个数字,如果存在, 使用它的当前轴来绘制列值。这是作为 预期的。
但是,在第二种情况下,数据由两列组成。那里 有几种方法来处理这样的情节,包括使用 具有共享或非共享轴等的不同子图。为了 熊猫能够应用任何这些可能的要求,它将 默认情况下,创建一个新图形,可以向其中添加坐标轴 至。新的图形将不知道已经存在的图形,并且 它的大小,但是具有默认大小,除非您指定 figsize参数。