python - 在 matplotlib 中绘制值与字符串的关系?

标签 python matplotlib

我正在尝试在 matplotlib 中创建一个图,其中 x 值是整数,y 值是字符串。是否可以在 matplotlib 中绘制这种类型的数据?我检查了文档和 gallery对于 matplotlib,找不到任何此类示例。

我有很多列表绑定(bind)到一个名为 my_lists 的变量。结构如下所示:

mylists = [765340, 765371, 765310,'MA011',],
          [65310, 'MA015'],
          [765422, 765422, 24920205, 24920161, 'MA125'],
          [765422, 'MA105'], 
          [765371, 12345, 'MA004']

在每个列表中,除最后一项外的所有项目都是 x 值。每个列表中的最后一项是一个字符串,它是单个 y 值。 我如何绘制这是 matplotlib?这是我的尝试:

import matplotlib.pyplot as plt

for sub_list in my_lists:
    x_value = sub_list[:1]
    y_value = sub_list[-1]
    plt.plot(x_value, y_value, "ro")
    plt.show()

上面的代码抛出这个错误:

ValueError:无法将字符串转换为 float :MA011

如何绘制整数与字符串的关系?

最佳答案

你可能会做这样的事情,你给每个 y “字符串”一个唯一的索引值。您可能需要调整 i 的间距。 IE。 i*2 而不是 i 使事情看起来不错。之后,您将每个索引的刻度标签设置为其对应的字符串。

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(9,7))
ax1 = fig.add_subplot(111)


mylists = [[765340, 765371, 765310,'MA011',], [65310, 'MA015'], 
           [765422, 765422, 24920205, 24920161, 'MA125'],
           [765422, 'MA105'],[765371, 12345, 'MA004']]

x = []
y = []
y_labels = []
y_ticks = []
for i,sub_list in enumerate(mylists):
    y_labels.append(sub_list[-1])
    y_ticks.append(i)
    for v in sub_list[:-1]:
        x.append(v)
        y.append(i)

ax1.set_yticks(y_ticks)
ax1.set_yticklabels(y_labels)
ax1.plot(x, y, "ro")
plt.show()

编辑:

抱歉,我忘记在 for 循环中包含 enuemrate 调用。它基本上将 i 的值设置为当前 sub_list 的索引。然后使用索引而不是字符串值作为 y 值。之后,您将这些 y 值的标签替换为实际的字符串值。

关于python - 在 matplotlib 中绘制值与字符串的关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7122879/

相关文章:

python - 在 python 中,我们可以在(其他)用户代码执行之前跟踪模块级分配吗?

python - 与 MATLAB 相比,改进 Numpy 中复杂矩阵元素求和的更好方法

python - 如何将数据从宽数据转换为长数据,以便根据时间绘制值

python - 如何将数据拟合到温度/热曲线上?

python - 如何调整matplotlib中每第二行子图之间的空间

尽管 Linux 上有 __init.py__ 和正确的 PYTHONPATH,但仍出现 Python ModuleNotFoundError

python - 跳过 read_csv 中缺失值的行

python - 线程和 SQLAlchemy session

python - 如何在事后方便地修改 matplotlib 图(持久化/序列化)?

python - matplotlib.patches.FancyArrow 表现不佳吗?