【问题标题】:Plotting a pie chart out of a dictionary从字典中绘制饼图
【发布时间】:2020-10-17 00:09:24
【问题描述】:

我有一本字典:

{'DATE': 65,
 'ORG': 93,
 'PERSON': 62,
 'GPE': 18,
 'PRODUCT': 18,
 'FAC': 4,
 'CARDINAL': 50,
 'ORDINAL': 15,
 'NORP': 10,
 'MONEY': 3,
 'PERCENT': 2,
 'TIME': 5,
 'LOC': 5,
 'QUANTITY': 2}

我只想将它绘制在饼图中,显示这些项目的百分比分布。这个怎么画???

我在这里尝试过解决方案:Trying to create a pie and bar chart from the data below

所以我使用了那里发布的代码作为解决方案:

amount_of_TP_ner_tags # this is the dictionary I want to plot. see above

# dont use values inside a list as column values for a dataframe
browser2 = {}
[browser2.update({key : val[0]}) for key, val in amount_of_TP_ner_tags.items()]

x = pd.Series(browser2)
y = pd.Series.sort_values(x)
z = pd.DataFrame(y)
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(8,4))
# you need to specify which column of the dataframe you want to plot (here 0)
z.plot(y=0, kind = 'pie', ax = axes[0])
z.plot(kind = 'bar', ax = axes[1])
axes[0].set_aspect("equal") # make aspect equal (such that circle is not eliptic)
#place the legend at a decent position
axes[0].legend(loc=1, bbox_to_anchor= (1,0.2), fontsize=11)
plt.tight_layout()
plt.show()

但我收到一条错误消息:

TypeError                                 Traceback (most recent call last)
<ipython-input-258-7ca72d2d0ca4> in <module>
      1 # dont use values inside a list as column values for a dataframe
      2 browser2 = {}
----> 3 [browser2.update({key : val[0]}) for key, val in amount_of_TP_ner_tags.items()]
      4 
      5 x = pd.Series(browser2)

<ipython-input-258-7ca72d2d0ca4> in <listcomp>(.0)
      1 # dont use values inside a list as column values for a dataframe
      2 browser2 = {}
----> 3 [browser2.update({key : val[0]}) for key, val in amount_of_TP_ner_tags.items()]
      4 
      5 x = pd.Series(browser2)

TypeError: 'int' object is not subscriptable

那么我该如何绘制呢?

【问题讨论】:

    标签: python dictionary machine-learning plot


    【解决方案1】:

    最简单的方法是使用matplotlib pie chart

    import matplotlib.pyplot as plt
    
    your_data = {'DATE': 65,
     'ORG': 93,
     'PERSON': 62,
     'GPE': 18,
     'PRODUCT': 18,
     'FAC': 4,
     'CARDINAL': 50,
     'ORDINAL': 15,
     'NORP': 10,
     'MONEY': 3,
     'PERCENT': 2,
     'TIME': 5,
     'LOC': 5,
     'QUANTITY': 2}
    
    # Data to plot
    labels = []
    sizes = []
    
    for x, y in your_data.items():
        labels.append(x)
        sizes.append(y)
    
    # Plot
    plt.pie(sizes, labels=labels)
    
    plt.axis('equal')
    plt.show()
    

    【讨论】:

      【解决方案2】:

      您的错误不在绘图中,您正在尝试访问整数的索引。

      试试这个:

      browser2 = {}
      [browser2.update({key : val}) for key, val in amount_of_TP_ner_tags.items()]
      

      【讨论】:

        【解决方案3】:

        很简单

        Step1:从字典中提取标签和值

        # Get the Keys and store them in a list
        labels = list(yourData.keys())
        
        # Get the Values and store them in a list
        values = list(yourData.values())
        

        Step2:简单调用matplotlib.pyplot的饼图方法。

        import matplotlib.pyplot as plt
        
        plt.pie(values, labels=labels)
        plt.show()
        

        你会很高兴的。

        【讨论】:

          【解决方案4】:
          import matplotlib.pyplot as plt
          
          your_data = {'DATE': 65,
           'ORG': 93,
           'PERSON': 62,
           'GPE': 18,
           'PRODUCT': 18,
           'FAC': 4,
           'CARDINAL': 50,
           'ORDINAL': 15,
           'NORP': 10,
           'MONEY': 3,
           'PERCENT': 2,
           'TIME': 5,
           'LOC': 5,
           'QUANTITY': 2}
          
          plt.pie([float(your_data[v]) for v in your_data], labels=[str(k) for k in your_data], autopct='%1.1f%%')
          plt.show()
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-02-07
            • 2014-05-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多