【问题标题】:matplotlib convert real to categoricalmatplotlib 将实数转换为分类
【发布时间】:2017-08-08 10:01:35
【问题描述】:

如果我有一组数据

python x_data = array([-0.5597064565292805, -0.6044992007582148, 0.22877491676881043, -1.2332817779977419, 0.42077626119484773, 1.825509016838052, 0.3476645527864688, -0.35439666443655543, 0.8783711637081933, -0.438777582274935], dtype=object)

我无法让 matplotlib 以 x 作为分类值绘制条形图。无论我做什么,它都会迫使我转变为真实的。任何想法如何使每个数字成为分类?

【问题讨论】:

  • “转换为真实”?它们不是真实的吗?从您有限的代码摘录来看,它们确实看起来很不错。
  • 你的 Y 是什么?
  • 我的 y_data 也是随机法线。我想生成一个条形图。将 x 刻度设为线性会导致条形重叠,而将它们视为分类会导致它们分开。这有意义吗?
  • 我尝试将它们转换为字符串、对象,但无法让 mpl 为 x 轴生成分类比例。从本质上讲,我想将每个 x 值视为只是一些字符串,
  • PS,如果我想将图像保存为 64 像素乘 64 像素的图像 - 我该怎么做?

标签: python matplotlib data-visualization


【解决方案1】:

您可以将 y 数据绘制为数字 0、1、2、3 等的函数,然后将刻度标签设置为 x_data 中的字符串。

import numpy as np; np.random.seed(42)
import matplotlib.pyplot as plt

x_data = [-0.5597064565292805, -0.6044992007582148, 0.22877491676881043,
       -1.2332817779977419, 0.42077626119484773, 1.825509016838052,
       0.3476645527864688, -0.35439666443655543, 0.8783711637081933,
       -0.438777582274935]

y_data = np.random.rand(len(x_data))

x_strings=["{:.3f}".format(x) for x in x_data]

plt.figure(figsize=(5,5), dpi=64./5)
plt.bar(range(len(x_data)), y_data )
plt.xticks(range(len(x_data)), x_strings)

plt.savefig(__file__+".png", dpi="figure")
plt.show()

64x64 像素图像的结果看起来像

没有什么是可读的。所以它可能没有太多意义。

【讨论】:

  • 非常感谢。它用于图像识别问题。我没有意识到在 mpl 中指定会如此复杂。在 github.com/bloomberg/bqplot 中,您可以直接指定“比例”(使用 Wilkinson 术语)——因此传递 OrdinalScale 就可以了
猜你喜欢
  • 1970-01-01
  • 2010-10-18
  • 2013-03-10
  • 2019-11-12
  • 2019-06-22
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 2023-01-27
相关资源
最近更新 更多