如何在jupyter + pandas中的每个scatter_matrix上添加标题

时间:2016-05-10 03:24:53

标签: python pandas matplotlib jupyter

因此,我在不同时间对数据集进行了多次采样。 对于每个采样,我想绘制一个散射矩阵,每个散射矩阵应该将采样时间作为标题。

问题是没有争论"标题" pandas.tools.plotting.scatter_matrix

当我在绘制图形之前尝试打印()标题时,它会在绘制图形之前打印所有标题。

for qid in qids:
    date = db[collection].find_one({ "querySummary.qid": qid }, {"querySummary.date":1})["querySummary"]["date"].isoformat()
    print(date) # does not provide the desired result
    cursor = db[collection].find({ "querySummary.qid": qid })
    cols = ["resultNum", "col2", "col3", "col4"] # list of columns labels
    rows = [] # will be populated below
    for result in cursor:
        rows.append([result["resultNum"], result["col2"], result["col3"], result["col4"]])
    df = pd.DataFrame(rows, columns=cols);
    scatter_matrix(df, alpha=0.3, figsize=(16,16), diagonal='kde', marker=date)

通过运行代码,在最终绘制第一个scatter_matrix之前打印标题:

Result not as expected

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

在这种情况下,您不能使用print(date)。相反,请为下面的每个plt.suptitle(date)尝试scatter_matrix

for qid in qids:
    date = db[collection].find_one({ "querySummary.qid": qid }, {"querySummary.date":1})["querySummary"]["date"].isoformat()
    cursor = db[collection].find({ "querySummary.qid": qid })
    cols = ["resultNum", "col2", "col3", "col4"] # list of columns labels
    rows = [] # will be populated below

    for result in cursor:
        rows.append([result["resultNum"], result["col2"], result["col3"], result["col4"]])
    df = pd.DataFrame(rows, columns=cols);
    scatter_matrix(df, alpha=0.3, figsize=(16,16), diagonal='kde', marker='o')

    plt.suptitle(date)

答案 1 :(得分:1)

对于你的情况,我认为最好的方法是直接用matplotlib绘图,而不是使用熊猫的情节。请参阅:http://pandas.pydata.org/pandas-docs/stable/visualization.html#plotting-directly-with-matplotlib

您可能需要尝试类似

的内容
dummy = scatter_matrix(df, alpha=0.3, figsize=(16,16), diagonal='kde', marker=date)
plt.figure()
plt.title(date)
plt.plot(dummy)
plt.show()