在同一张图上绘制多个 excel 工作表

Plotting multiple excel sheets on the same graph

我有 this excel 文件需要绘图。到目前为止我的代码看起来像这样

import pandas as pd 
import matplotlib.pyplot as plt

file = 'weatherdata.xlsx'


def plotMeteoData(file,x_axis,metric,*list_of_cities):
    
    df = pd.ExcelFile(file)
    sheets = df.sheet_names
    print(sheets)
    df_list = []
    for city in list_of_cities:
        df_list.append(df.parse(city))

    x=range(len(df_list[0][x_axis].tolist()))
    width = 0.3
    
    for j,df_item in enumerate(df_list):
        plt.bar(x,df_item[metric],width,label = sheets[j]) #this isn't working
        x = [i+width for i in x]
        
    
   
    plt.xlabel(x_axis)
    plt.ylabel(metric)
    
    plt.xticks(range(len(df_list[0][x_axis].tolist())),labels=df_list[0][x_axis].tolist())

    


    plt.show()
    
t=['Αθήνα','Θεσσαλονίκη','Πάτρα']
plotMeteoData(file,'Μήνας','Υγρασία',*t)

并给出 this 输出。 每种颜色代表一个 excel sheet,x 轴代表月份,y 轴代表一些值。 我已经评论了我试图为每个 sheet 添加一些标签但我无法添加的行。此外,如果您查看上面的输出,则条形图不会以每个 xtick 为中心。我该如何解决这些问题?谢谢

通常您使用 plt.subplots,因为它可以让您更好地控制图表。下面的代码计算 xtick 标签居中所需的偏移量,并显示带有城市标签的图例:

import pandas as pd
import matplotlib.pyplot as plt

file = 'weatherdata.xlsx'


def plotMeteoData(file,x_axis,metric,*list_of_cities):
    df = pd.ExcelFile(file)
    sheets = df.sheet_names
    print(sheets)
    df_list = []
    for city in list_of_cities:
        df_list.append(df.parse(city))

    x=range(len(df_list[0][x_axis].tolist()))
    width = 0.3

    # Calculate the offset of the center of the xtick labels 
    xTickOffset = width*(len(list_of_cities)-1)/2
    
    # Create a plot
    fig, ax = plt.subplots()
    
    for j,df_item in enumerate(df_list):
        ax.bar(x,df_item[metric],width,label = sheets[j]) #this isn't working
        x = [i+width for i in x]

    ax.set_xlabel(x_axis)
    ax.set_ylabel(metric)

    # Add a legend (feel free to change the location)
    ax.legend(loc='upper right')

    # Add the xTickOffset to the xtick label positions so they are centered
    ax.set_xticks(list(map(lambda x:x+xTickOffset, range(len(df_list[0][x_axis].tolist())))),labels=df_list[0][x_axis].tolist())
    
    plt.show()
    
t=['Athena', 'Thessaloniki', 'Patras']
plotMeteoData(file,'Month','Humidity',*t)

结果图:

xtick 偏移量应考虑不同数量的 excel 页。有关图例的更多信息,请参阅 this