【问题标题】:Plotting values versus strings in matplotlib?在matplotlib中绘制值与字符串?
【发布时间】:2016-07-26 18:32:23
【问题描述】:

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

我有许多列表绑定到一个名为 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:无法将字符串转换为浮点数:MA011

如何绘制整数与字符串?

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    你可能会做这样的事情,你给每个 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 的值设置为当前子列表的索引。然后使用索引而不是字符串值作为 y 值。之后,您将这些 y 值的标签替换为实际的字符串值。

    【讨论】:

    • 感谢您的帮助。您提供的代码似乎引发了一些错误,我不完全确定 for 循环在做什么。您能否进一步解释您的解决方案?谢谢。
    • @dr.bunsen:抱歉,我在编辑中修复了代码中的拼写错误。
    • 太棒了!这非常有效。我现在了解您如何使用 enumerate() 构建 y 轴,然后将字符串添加为 y_labels。再次感谢,非常感谢您的帮助!
    • @dr.brunsen:没问题,我很高兴它有帮助。作为旁注,我注意到您的原始代码中存在另一个错字,您实际上希望 sub_list[:-1] 循环遍历除最后一个元素之外的所有元素。
    猜你喜欢
    • 2011-01-30
    • 2021-08-11
    • 1970-01-01
    • 2012-02-24
    • 2017-04-24
    • 2021-01-12
    • 2021-12-28
    • 1970-01-01
    相关资源
    最近更新 更多