【问题标题】:How to plot frequency of one event with respect to other?如何绘制一个事件相对于其他事件的频率?
【发布时间】:2016-11-04 22:09:05
【问题描述】:

我想将 python/matplotlib/pandas 用于我的目的。

问题描述:我有一个包含真实值和估计值的表格的 excel 表(我可以将其读取为 pandas 数据框)。我想以某种方式在实际(水平轴)与估计值(垂直轴)的图中捕获这些信息。 excel表格看起来有点如下:

我在想一个散点图。但我不知道如何获得这样的情节。在这种情况下,它不是一个简单的散点图。此外,轴需要以不同方式处理。如果有其他合适的方式,欢迎提出建议。

编辑 1:

按照@BrenBarn 的建议,我在Cross Validated 中发布了我的查询。我特别喜欢的一个答案显示了以下可视化: (see link)

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

【问题讨论】:

  • 如果您询问如何决定可视化应该是什么样子,这并不是本网站的真正主题。一旦你决定了你想要的样子,这个网站将询问如何实现一个特定的可视化。你可以试试Cross Validated。也就是说,一种可能性是绘制“混淆矩阵”的视觉表示,这是一个在行和列中具有类别的网格,每个单元格根据某个真实类别被分类为某个估计类别的次数进行着色。
  • @BrenBarn:非常感谢您提出“交叉验证”的建议。

标签: python excel pandas matplotlib


【解决方案1】:

为了使该表成为与您链接到的图表相似的图表,我将首先创建一个数组,其中一个轴对应于“实际值”,另一个轴对应于“估计值”(因此包括所有上表中没有的零值):

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 应该能够为您提供解决方案。

【讨论】:

    猜你喜欢
    • 2019-05-25
    • 2022-11-04
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多