如何绘制一个事件相对于其他事件的频率?

我想用python / matplotlib / pandas来达到我的目的。

问题描述:我有一个Excel表格(我可以读作pandas数据框)包含一个真实和估计值的表格。 我想以某种方式捕捉这个信息的实际(横轴)与估计值(垂直轴)的情节。 Excel表格看起来有点如下:

在这里输入图像说明

我在想散点图。 但我不知道如何获得这样的情节。 在这种情况下,这不是一个简单的散点图。 另外,轴需要不同的处理。 如果有其他适当的方法,请随时提出build议。

编辑1:

正如@BrenBarn所build议的那样,我在“ 交叉validation”中发布了我的查询。 我特别喜欢的一个答案显示了下面的可视化:( 见链接)

我想用python生成一个类似的散点图。 谁能帮我吗?

为了使这张表成为一个类似于你链接到的图,我会首先创build一个数组,其中一个轴对应于“实际值”,另一个值为“估计值”(因此包括所有的零值不在你的桌子上面):

import matplotlib.pyplot as plt import numpy as np label = ['A', 'F', 'J', 'P', 'T', 'Z'] nlabel = 6 values = np.zeros([nlabel, nlabel]) values[0, 0] = 10; values[0, 2] = 10; values[0, 3] = 10 values[1, 1] = 40; values[2, 1] = 10; values[3, 3] = 10 values[3, 4] = 10; values[4, 5] = 30; values[4, 3] = 20 values[5, 4] = 10 print " ", label for i in np.arange(nlabel): print label[i], values[i] 

打印只是为了确保它看起来像你上面的表格:

  ['A', 'F', 'J', 'P', 'T', 'Z'] A [ 10. 0. 10. 10. 0. 0.] F [ 0. 40. 0. 0. 0. 0.] J [ 0. 10. 0. 0. 0. 0.] P [ 0. 0. 0. 10. 10. 0.] T [ 0. 0. 0. 20. 0. 30.] Z [ 0. 0. 0. 0. 10. 0.] 

然后,我将使用这些值来缩放matplotlib.pyplot.scatter中标记的大小,如下所示。

 fig, ax = plt.subplots() for i in np.arange(nlabel): plt.scatter(np.arange(nlabel), i * np.ones_like(values[i]), s=values[i] * 42, marker='s') plt.axes([0, nlabel+1, 0, nlabel+1]) ticklabel = [item.get_text() for item in ax.get_xticklabels()] ticklabel[1:1+nlabel] = label ax.set_xticklabels(ticklabel) ax.set_yticklabels(ticklabel) ax.set_xlabel('Estimated') ax.set_ylabel('Actual') plt.show() 

这应该给你一个与你链接的一个非常相似的情节。 我没有做趋势线或方格内的数字,但Google / StackOverflow应该能够为您提供解决scheme。