【问题标题】:ValueError shape mismatch: objects cannot be broadcast to a single shapeValueError 形状不匹配:无法将对象广播到单个形状
【发布时间】:2020-08-30 16:40:25
【问题描述】:

这是我计划用来创建条形图的代码。忽略下一行。我写这个只是为了平衡代码和细节。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
def bar1():
    df=pd.read_csv('C:\\Users\Bhuwan Bhatt\Desktop\IP PROJECT\Book1.csv',encoding= 'unicode_escape')
    x=np.arange(11)
    Countries=df['Country']
    STotalMed=df['SummerTotal']
    WTotalMed=df['WinterTotal']
    plt.bar(x-0.25,STotalMed,width=.2, label='Total Medals by Countries in Summer',color='g')
    plt.bar(x+0.25,WTotalMed,width=.2, label='Total Medals by Countries in Winter',color='r')
    plt.xticks(np.arange(11),Countries,rotation=30)
    plt.title('Olympics Data Analysis of Top 10 Countries',color='red',fontsize=10)
    plt.xlabel('Countries')
    plt.ylabel('Total Medals')
    plt.grid()
    plt.legend()
    plt.show()
bar1()

由于某种原因我收到此错误:

Traceback (most recent call last):
  File "C:/Users/Bhuwan Bhatt/Desktop/dsd.py", line 19, in <module>
    bar1()
  File "C:/Users/Bhuwan Bhatt/Desktop/dsd.py", line 10, in bar1
    plt.bar(x-0.25,STotalMed,width=.2, label='Total Medals by Countries in Summer',color='g')
  File "C:\Users\Bhuwan Bhatt\AppData\Local\Programs\Python\Python38-32\lib\site-packages\matplotlib\pyplot.py", line 2471, in bar
    return gca().bar(
  File "C:\Users\Bhuwan Bhatt\AppData\Local\Programs\Python\Python38-32\lib\site-packages\matplotlib\__init__.py", line 1438, in inner
    return func(ax, *map(sanitize_sequence, args), **kwargs)
  File "C:\Users\Bhuwan Bhatt\AppData\Local\Programs\Python\Python38-32\lib\site-packages\matplotlib\axes\_axes.py", line 2430, in bar
    x, height, width, y, linewidth = np.broadcast_arrays(
  File "<__array_function__ internals>", line 5, in broadcast_arrays
  File "C:\Users\Bhuwan Bhatt\AppData\Local\Programs\Python\Python38-32\lib\site-packages\numpy\lib\stride_tricks.py", line 264, in broadcast_arrays
    shape = _broadcast_shape(*args)
  File "C:\Users\Bhuwan Bhatt\AppData\Local\Programs\Python\Python38-32\lib\site-packages\numpy\lib\stride_tricks.py", line 191, in _broadcast_shape
    b = np.broadcast(*args[:32])
ValueError: shape mismatch: objects cannot be broadcast to a single shape

这是我一直在使用的 CSV 文件:

Country SummerTimesPart Sumgoldmedal    Sumsilvermedal  Sumbronzemedal  SummerTotal WinterTimesPart Wingoldmedal    Winsilvermedal  Winbronzemedal  WinterTotal TotalTimesPart  Tgoldmedal  Tsilvermedal    Tbronzemedal    TotalMedal
     Afghanistan    14  0   0   2   2   0   0   0   0   0   14  0   0   2   2
     Algeria    13  5   4   8   17  3   0   0   0   0   16  5   4   8   17
     Argentina  24  21  25  28  74  19  0   0   0   0   43  21  25  28  74
     Armenia    6   2   6   6   14  7   0   0   0   0   13  2   6   6   14
     Australasia    2   3   4   5   12  0   0   0   0   0   2   3   4   5   12
     Australia  26  147 163 187 497 19  5   5   5   15  45  152 168 192 512
     Austria    27  18  33  36  87  23  64  81  87  232 50  82  114 123 319
     Azerbaijan     6   7   11  24  42  6   0   0   0   0   12  7   11  24  42
     Bahamas    16  6   2   6   14  0   0   0   0   0   16  6   2   6   14
     Bahrain    9   2   1   0   3   0   0   0   0   0   9   2   1   0   3
     Barbados   12  0   0   1   1   0   0   0   0   0   12  0   0   1   1
     Belarus    6   12  27  39  78  7   8   5   5   18  13  20  32  44  96
     Belgium    26  40  53  55  148 21  1   2   3   6   47  41  55  58  154
     Bermuda    18  0   0   1   1   8   0   0   0   0   26  0   0   1   1
     Bohemia    3   0   1   3   4   0   0   0   0   0   3   0   1   3   4
     Botswana   10  0   1   0   1   0   0   0   0   0   10  0   1   0   1
     Brazil     22  30  36  63  129 8   0   0   0   0   30  30  36  63  129
     British WestIndies     1   0   0   2   2   0   0   0   0   0   1   0   0   2   2
     Bulgaria   20  51  87  80  218 20  1   2   3   6   40  52  89  83  224
     Burundi    6   1   1   0   2   0   0   0   0   0   6   1   1   0   2
     Cameroon   14  3   1   2   6   1   0   0   0   0   15  3   1   2   6
     Canada 26  64  102 136 302 23  73  64  62  199 49  137 166 198 501
     Chile  23  2   7   4   13  17  0   0   0   0   40  2   7   4   13
     China  10  224 167 155 546 11  13  28  21  62  21  237 195 176 608
     Colombia   19  5   9   14  28  2   0   0   0   0   21  5   9   14  28
     Costa Rica     15  1   1   2   4   6   0   0   0   0   21  1   1   2   4
     Ivory Coast    13  1   1   1   3   0   0   0   0   0   13  1   1   1   3
     Croatia    7   11  10  12  33  8   4   6   1   11  15  15  16  13  44
     Cuba   20  78  68  80  226 0   0   0   0   0   20  78  68  80  226


INFO-----> SummerTimesPart : 每个国家参加夏季的次数 WinterTimesPart : 每个国家参加冬季的次数ta

【问题讨论】:

  • 您的绘图向量的长度可能不同。试试x=np.arange(len(df))
  • @Psidom 输入 x=np.arange(len(df)) '''ValueError 后显示新错误:FixedLocator 位置的数量 (11),通常来自对 set_ticks 的调用,不匹配刻度标签的数量 (149)'''
  • plt.xticks(np.arange(len(df)),Countries,rotation=30) ?
  • @Psidom 感谢兄弟,它成功了。我还想问一件事。 csv 大约有 250 行,所以我怎样才能在这段代码中获得前 10 个国家的条形图(根据 TotalMedals)。
  • dfTotalMedals...的降序排序...df.sort_values(by='TotalMedals', ascending=False, inplace=True),然后将df过滤为df1 = df.head(10)....并创建上面的栏情节在df1

标签: python pandas charts syntax-error data-visualization


【解决方案1】:

只是改变

x=np.arange(11)

to 

x = np.arange(len(df))

plt.xticks(np.arange(11),Countries,rotation=30) 

to

plt.xticks(x,Countries,rotation=30) 

【讨论】:

    猜你喜欢
    • 2013-06-01
    • 2021-05-22
    • 2021-05-13
    • 2021-02-27
    • 1970-01-01
    • 2019-02-16
    • 2020-04-28
    • 2021-07-17
    相关资源
    最近更新 更多