Python:为什么这个代码不能很好的满足要求,还有怎么修改代码才可以使分类柱状图正常绘出?(最后是tip.csv文件内容)

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

data = sns.load_dataset("tips")

data = pd.read_csv("tip.csv") # 本地导入
data.head()

设置中文字体

matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family'] = 'sans-serif'

总消费,小费,性别,吸烟与否,就餐星期,就餐时间,就餐人数




```def scatterplot(x_data, y_data, x_label, y_label, title):
    plt.scatter(x_data, y_data, s=10, color='#539caf', alpha=0.75)
    plt.title(title)
    plt.xlabel(x_label)
    plt.ylabel(y_label)
scatterplot(data.Total_bill, data.tip, 'Total_bill', 'tip', '小费和总消费之间的关系')
# 小费和总消费之间的关系(散点图)
# 正相关
def boxplot(x_data, y_data, y_value, base_color, median_color):
    # x_data: ['Male','Female']
    # y_data: data
    # x_colum: 'sex'
    # y_value: ''
    x_feature = data[x_data].unique()
    bp_data = []
    for item in x_feature:
        bp_data.append(data[data[x_data] == item][y_value].values)
    _, ax = plt.subplots()
    ax.boxplot(bp_data,
               patch_artist=True,
               medianprops={'color': base_color},
               boxprops={'color': base_color,
                         'facecolor': median_color},
               whiskerprops={'color': median_color},
               capprops={'color': base_color})
    ax.set_xticklabels(x_feature)
    ax.set_ylabel('Values of %s' % y_value)
    ax.set_xlabel('Features of the %s '
                  % x_data)
    ax.set_title('The box with %d features for the %s'
                 % (len(x_feature), y_value))
plt.show()
boxplot(x_data='sex'
        , y_data=data
        , y_value='tip'
        , base_color='b'
        , median_color='r')
plt.show()
# 男性顾客和女性顾客,谁更慷慨(分类箱式图)
boxplot(x_data='smoker'
        , y_data=data
        , y_value='tip'
        , base_color='b'
        , median_color='r')
plt.show()
# 抽烟与否是否会对小费金额产生影响(分类箱式图)
boxplot(x_data='day'
        , y_data=data
        , y_value='tip'
        , base_color='b'
        , median_color='r')
plt.show()
# 工作日和周末,什么时候顾客给的小费更慷慨(分类箱式图)
boxplot(x_data='time'
        , y_data=data
        , y_value='tip'
        , base_color='b'
        , median_color='r')
plt.show()
# 午饭和晚饭,哪一顿顾客更愿意给小费(分类箱式图)
boxplot(x_data='size'
        , y_data=data
        , y_value='tip'
        , base_color='b'
        , median_color='r')
plt.show()
# 就餐人数是否会对慷慨度产生影响(分类箱式图)
mean_by_sex_smoker = pd.pivot_table(data=data,
                                    values='tip',
                                    index='sex',
                                    columns='smoker',
                                    fill_value=0,
                                    aggfunc='mean')


def barplot(x_data, y_data_list, y_data_names, colors, x_label, y_label, title):
    print(mean_by_sex_smoker)
    _, ax = plt.subplots()
    total_width = 0.6
    ind_width = total_width / len(y_data_list)
    alteration = np.arange(-total_width / 2 + ind_width / 2,
                           total_width / 2 + ind_width / 2, ind_width)
    x_data = [i for i in range(len(x_data))]
    for i in range(0, len(y_data_list)):
        ax.bar(x_data + alteration[i], y_data_list[i], color=colors[i],
               label=y_data_names[i], width=ind_width)
        ax.set_xlabel(x_label)
        ax.set_ylabel(y_label)
        ax.set_title(title)
        ax.set_xticks(np.linspace(0, 1, len(mean_by_sex_smoker)))
        ax.set_xticklabels(mean_by_sex_smoker.index)
        ax.legend(loc='upper right')
barplot(x_data=mean_by_sex_smoker.index.values
        , y_data_list=[mean_by_sex_smoker['Yes'], mean_by_sex_smoker['No']]
        , y_data_names=['Yes','No']
        , colors=['#539caf', '#7663b0']
        , x_label='性别'
        , y_label='小费金额'
        , title='性别+抽烟的组合因素对慷慨度的影响')
plt.show()
# 性别+抽烟的组合因素对慷慨度的影响(分类柱状图)

No.,Total_bill,tip,sex,smoker,day,time,size
0,16.99,1.01,Female,No,Sun,Dinner,2
1,10.34,1.66,Male,No,Sun,Dinner,3
2,21.01,3.50,Male,No,Sun,Dinner,3
3,23.68,3.31,Male,NO,Sun,Dinner,2
4,24.59,3.61,Female,NO,Sun,Dinner,4