簡體   English   中英

如何用二維Numpy數組創建動態餅圖?

[英]How to create a dynamic piechart out of two dimensional Numpy array?

Python 2.7

需要你幫助從Numpy數組創建一個餅圖。 目前我嘗試的每種方法都不會顯示圖表。

Numpy數組如下所示。

array([['A' '506']
 ['B' '80']
 ['C' '6']
 ['...' '15']
 ['Z' '7']],dtype = '|S21')

行數,列值將更改。 列的數量和種類將保持不變。

我試過了:

  1. 將數組轉換為Pandas數據集,應用正確的類型並創建如下所示的plt.pie。 沒有顯示圖表。

     dataset = pd.DataFrame(**array**, columns = ['Description','Metric']) dataset[['Metric']] = dataset[['Metric']].apply(pd.to_numeric) colors = ["#...", '#...', '#...','#...', '#...', '#...', '#...', '#...', '#...', '#...', '#...'] plt.pie( x = dataset['Metric'], labels=dataset['Description'], shadow=False, colors=colors, autopct='%1.1f%%', ) plt.axis('equal') plt.tight_layout() plt.show 
  2. 將其更改為列表,將元素添加為列表。 沒有顯示圖表。

     metrics = list(dataset['Metric']) descriptions = list(dataset['Description']) plt.pie( x = metrics, labels=descriptions, ... ) 

數據集本身看起來不錯,但由於無法創建繪圖,因此數據框格式似乎存在一些問題...

>> print dataset
<<
              Description           Metric
0                       A              506
1                       B               80
2                       C                6
3                       D               15
...
8                       X              26
9                       Y               13
10                      Z               7

預期結果將是這兩列中的簡單餅圖。 它應該根據Metrics值和行數以dinamically方式創建。

期待你的回復。

我真的建議將這些數據存儲為字典或pandas DataFrame 在下面的解決方案中,我在繪圖之前將數據轉換為字典。

import numpy as np
import matplotlib.pyplot as plt

# Data as given
data = np.array([['A', '506'],
                 ['B', '80'],
                 ['C', '6'],
                 ['...', '15'],
                 ['Z', '7']], dtype = '|S21')

# Create dictionary
data_dict = {}

# Convert byte string to string and string number to int
for row in range(data.shape[0]):
    data_dict[data[row, 0].astype(str)] = int(data[row, 1])

plt.pie(data_dict.values(), labels=data_dict.keys())

這給了我以下情節:

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM