【发布时间】:2018-08-08 04:04:38
【问题描述】:
以下示例说明了 pandas DataFrame 的散点图和密度图之间的奇怪差异 .. 或者可能是我缺乏理解:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
n = 25
df = pd.DataFrame({'x': np.random.randn(n), 'y': np.random.randn(n), 'season': np.random.choice(['winter', 'summer'], n)})
plot = df.plot.scatter(x='x', y='y')
plot.get_figure().savefig("test_scatter_all.png")
for s in ['winter', 'summer']:
sdf = df[df['season'] == s]
plot = sdf.plot.scatter(x='x', y='y')
plot.get_figure().savefig("test_scatter_" + s + ".png")
plt.clf()
plot = df['y'].plot.density()
plot.get_figure().savefig("test_density_all.png")
for s in ['winter', 'summer']:
sdf = df[df['season'] == s]
plot = sdf['y'].plot.density()
plot.get_figure().savefig("test_density_" + s + ".png")
让我感到惊讶的是,密度图是相加的,因为冬季图表包括两个密度(“全部”和冬季),而夏季图表包括所有三个密度。
另一方面,散点图仅包含它们自己的点,即冬季图中的冬季值等。
此外,如果没有 plt.clf() 命令,密度图还将包括上一个散点图(夏季)的点。
为什么两种绘图类型之间存在差异?
这是否意味着在开始新情节之前我应该始终使用plt.clf()?
顺便说一句,像我这样使用plot 对象真的有意义吗?我看到我可以用
df.plot.scatter(x='x', y='y')
plt.savefig("test_scatter_all.png")
那么,捕获plot() 方法的输出有什么意义吗?这是否意味着plot() 方法写入的活动图形对象始终只有一个?
【问题讨论】:
标签: python pandas matplotlib plot