【问题标题】:How do I plot a bar graph from matplotlib/seaborn with an int list as value and a string list as x axis?如何从 matplotlib/seaborn 绘制条形图,其中 int 列表作为值,字符串列表作为 x 轴?
【发布时间】:2016-07-16 06:59:17
【问题描述】:

我有一个整数列表 arr=[1,2,3,4] 和一个字符串列表 list(df)(它返回数据框的列标题列表)。我想绘制一个条形图,使 x 轴标签取自字符串列表,而它们的值取自整数列表。

例如,如果 list(df) 返回 [a,b,c,d],则将有一个图形,其 x 轴上的标记为 a,b,c,d,对应值为 1,2, 3,4 分别在 y 轴上。

我想不出办法。请帮忙。

【问题讨论】:

    标签: python matplotlib seaborn


    【解决方案1】:

    这似乎不是一件直观的事情。我按照示例here 创建了这段代码:

    import matplotlib.pyplot as plt
    vals=[1,2,3,4,5]
    inds=range(len(vals))
    labels=["A","B","C","D","E"]
    
    fig,ax = plt.subplots()
    rects = ax.bar(inds, vals)
    ax.set_xticks([ind+0.5 for ind in inds])
    ax.set_xticklabels(labels)
    

    并得到这个输出:

    在代码的前半部分,我只是设置了变量。 在后半部分,我调用 plt.subplots() 以便我可以获得轴(ax)句柄来放置刻度线和矩形。设置刻度线决定了标签的位置,因此我将它们向右移动了 0.5,否则它们将位于每个框的最左边。

    【讨论】:

    • @riberman 非常感谢!只是另一个查询。 xticklabels(如 A、B、C ......这里)是长列名,它们相互重叠。有没有办法以可读的方式打印它们?
    • locs, labels = plt.xticks(); plt.setp(labels, rotation=45)
    • 谁能告诉我为什么@rbierman 的解决方案不适用于我的情况?我有以下两个列表:weekday_with_hosts: [u'Tue', u'Thu', u'Sat', u'Sun', u'Fri', u'Mon', u'Wed'] hosts: [277840, 363436, 184380, 182590, 263086, 301684, 318698] 并且出现错误:could not convert string to float: Tue
    • @mdivk 我试过你的代码,它对我有用,我想你可能会错误地将weekday_with_hosts 设置为valshosts 设置为labels 而不是反过来。
    猜你喜欢
    • 2012-02-24
    • 1970-01-01
    • 2021-05-27
    • 2019-12-10
    • 2021-01-21
    • 2021-11-01
    • 1970-01-01
    • 2021-09-20
    相关资源
    最近更新 更多