【问题标题】:Python Bar string on x axisx 轴上的 Python 条形字符串
【发布时间】:2016-12-18 17:05:38
【问题描述】:

我有 2 个数组,如下所示:

x = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November',
 'December']
y = [5.3, 6.1, 25.5, 27.8, 31.2, 33.0, 33.0, 32.8, 28.4, 21.1, 17.5, 11.9]

我需要将月份放在 x 轴上,将月份的最高温度放在 y 轴上。但是,当我使用下面的代码时:

    import matplotlib.pyplot as plt
import numpy as np

    x = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November',
         'December']
    y = [5.3, 6.1, 25.5, 27.8, 31.2, 33.0, 33.0, 32.8, 28.4, 21.1, 17.5, 11.9]

    plt.bar(x, y, color='green',align='center')
    plt.title('Max Temperature for Monthes')
    plt.legend()
    plt.show()

我得到这个值错误:ValueError: could not convert string to float: 'January'

我该如何解决这个问题?如何将字符串值放在 x 轴上?

【问题讨论】:

    标签: python numpy matplotlib axis


    【解决方案1】:

    Matplotlib 有一个 example 来完成你想要做的事情。

    要创建绘图,您必须拥有两个维度的数字数据,否则matplotlib 不知道该怎么做。相反,您必须将字符串作为标签添加到您的刻度中:

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = range(12)
    x_labels = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November',
         'December']
    y = [5.3, 6.1, 25.5, 27.8, 31.2, 33.0, 33.0, 32.8, 28.4, 21.1, 17.5, 11.9]
    
    plt.bar(x, y, color='green', align='center')
    plt.title('Max Temperature for Monthes')
    plt.xticks(x, x_labels, rotation='vertical')
    plt.legend()
    plt.show()
    

    【讨论】:

    • 非常感谢你,你能给我一个提示,我怎样才能将monthes准确地定位在绿色条上,然后将它们向左旋转45度?
    • 使用plt.xticks(rotation=45)。也添加到我的答案中。
    【解决方案2】:

    您可以使用plt.xticks 记录的here

    以下是如何在您的代码中使用它:

    import matplotlib.pyplot as plt
    import numpy as np
    
    months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
    monthsRange = np.arange(len(months))
    temperatures = [5.3, 6.1, 25.5, 27.8, 31.2, 33.0, 33.0, 32.8, 28.4, 21.1, 17.5, 11.9]
    
    plt.bar(monthsRange, temperatures, color='green')
    plt.title('Max Temperature for Monthes')
    plt.xticks(monthsRange, months)
    plt.legend()
    plt.show()
    

    【讨论】:

      【解决方案3】:

      您需要将标签表示为数字,然后分别设置标签。最后,您需要旋转标签,否则它们将全部堆叠在一起。

      import matplotlib.pyplot as plt
      import numpy as np
      
      
      
      labels = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November',
           'December']
      
      x = list(range(12))
      y = [5.3, 6.1, 25.5, 27.8, 31.2, 33.0, 33.0, 32.8, 28.4, 21.1, 17.5, 11.9]
      
      plt.bar(x, y, color='green',align='center')
      plt.title('Max Temperature for Monthes')
      plt.xticks(x, labels)
      plt.xticks(rotation=70)
      plt.legend()
      
      
      plt.show()
      

      【讨论】:

      • 非常感谢。这正是我想要的,
      • 只是在不同的版本中,我得到 TypeError: unorderable types: str()
      【解决方案4】:
      plt.bar(range(len(x)), y, color='green',align='center')
      plt.xticks(range(len(x)), x)
      plt.xticks(rotation=45)
      

      使用 xticks。参考this

      【讨论】:

        猜你喜欢
        • 2012-02-24
        • 1970-01-01
        • 2020-09-01
        • 2021-12-19
        • 1970-01-01
        • 2012-05-16
        • 2022-11-18
        • 2021-07-24
        相关资源
        最近更新 更多