Python+MySQL查询基本操作+并使用matplotlib绘制条形图

# 1000本图书中前10个出版社出版的图书个数进行条形图的展示
# matplotlib - 条形图 bar -- 垂直条形图
import pymysql
from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties
# 获取出版社和书数量
def getbookinfo():
    # 1- 连接数据库
    connect = pymysql.connect(host="localhost",
                              user="root",
                              password="mysql",
                 database="dangdang_book",
                              port=3306,
                              charset='utf8')
    # 2- 执行sql
    cursor = connect.cursor()
    select = """
            select 出版社,count(书名) 数量 
            from tbl_books
            where char_length(出版社)!=1
            group by 出版社
            order by 数量 desc
            limit 10
            """
    cursor.execute(select)
    result = cursor.fetchall()
    x = []   # 存储10个出版社
    y = []   # 存储10个出版社的书籍数量
    for r in result:
        # print(r)  # 出版社,数量
        x.append(r[0])    # 出版社
        y.append(r[1])    # 数量
    return x,y  # 返回两个结果

# 绘制图形,显示结果
def books_bar(x,y):
    # 创建图层
    fig = plt.figure()
    color = ['r', 'g', 'pink',
             'plum', 'salmon']  # 柱状 - 颜色
    plt.bar(range(len(x)), y, color=color)
    myfont = FontProperties(fname="C:\\Windows\\Fonts\\simhei.ttf")
    # 设置x轴的刻度值 - -XXX出版社
    plt.xticks(range(len(x)), x,
               fontproperties = myfont)
    # 1- 刻度值重叠,刻度值进行旋转
    fig.autofmt_xdate(rotation=45)

    plt.xlabel("出版社名称", fontproperties=myfont)
    plt.ylabel("图书数量", fontproperties=myfont)
    plt.title("出版社图书数量的对比", fontproperties=myfont)

    # 2- 每一个条形,真实的数据值需要显示 - plt.text()
    # x_1 -x轴的索引   y_1 -y轴的值
    for x_1, y_1 in enumerate(y):
        plt.text(x_1-0.2, y_1+3, str(y_1))

    plt.savefig('source\\books.jpg')
    plt.show()




if __name__ == "__main__":
     x,y = getbookinfo()
     # print(x)
     # print(y)
     books_bar(x,y)

你可能感兴趣的:(matplotlib)