簡體   English   中英

使用pandas / matplotlib使用for循環創建條形圖

[英]creating barplots using for loop using pandas/matplotlib

我有下面的代碼:

def OS_Usage_Zone_Wise(data,zone): 
   data_os = data['os'].value_counts().plot("bar",figsize=(12,4),fontsize=10)
   data_os.set_title("OS usage in "+zone+" region",color='g',fontsize=20)
   data_os.set_xlabel("OS name",color='b',fontsize=20)
   data_os.set_ylabel("use count",color='b',fontsize=20)


zone = ["east","west","south","central"] 
i = 0
data_os = [data_east,data_west,data_south,data_central] 
for data in data_os:
     OS_Usage_Zone_Wise(data,zone[i])
     print("now "+zone[i])
     i = i+1

我正在嘗試使用for循環繪制每個區域,但它顯示oly圖形

對於'中央'區域,我理解它顯示最后一個欄而不顯示

以前的那些,有沒有辦法用循環繪制所有區域的圖形(不要

想一次又一次地使用相同的代碼來生成圖形)

您可以使用matplotlib創建單獨的軸,然后在不同的軸上繪制每個直方圖。 以下是一些示例代碼:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# Create some dummy data
data = pd.DataFrame()
zones = ["east","west","south","central"]

data['zone']=np.hstack([[zone]*np.random.randint(10,20) for zone in zones])
data['OS Usage']=np.random.random(data.shape[0])

# Now create a figure
fig, axes = plt.subplots(1,4, figsize=(12,3))

# Now plot each zone on a particular axis
for i, zone in enumerate(zones):
    data.loc[data.zone==zone].hist(column='OS Usage',
                                   bins=np.linspace(0,1,10),
                                   ax=axes[i],
                                   sharey=True)
    axes[i].set_title('OS Usage in {0}'.format(zone))
    axes[i].set_xlabel('Value')
    axes[i].set_ylabel('Count')

fig.tight_layout()
fig.show()

其中產生如下圖:

在此輸入圖像描述

筆記:

  • 您可以使用枚舉循環遍歷區域,同時生成索引以指定使用的軸。
  • tight_layout()將確保所有標簽,標題等在圖中很好地適合。
  • 通過指定軸,您可以更好地控制它們。

希望這可以幫助!

暫無
暫無

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

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