0
点赞
收藏
分享

微信扫一扫

matplotlib绘制柱状图之基本配置——万能模板案例


目录

​​连接数据库案例​​

​​ 柱状图绘制​​

​​堆叠柱状图——尾部​​

​​ 堆叠柱状图——头部​​

​​双维柱状图模板​​

​​ 每文一语​​

连接数据库案例

import pymysql  # pip install pymysql安装,用来连接mysql数据库
import pandas as pd # 用来做数据导入(pd.read_sql_query() 执行sql语句得到结果df)
import matplotlib.pyplot as plt # 用来画图(plt.plot()折线图, plt.bar()柱状图,....)

plt.rcParams['font.sans-serif'] = 'SimHei' # 设置中文字体支持中文显示
plt.rcParams['axes.unicode_minus'] = False # 支持中文字体下显示'-'号

# figure 分辨率 800x600
plt.rcParams['figure.figsize'] = (6,4) # 8x6 inches
plt.rcParams['figure.dpi'] = 100 # 100 dot per inch

# 1. 连接MySQL数据库: 创建数据库连接
conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',password='root',db='mydb')

# 2 创建一个sql语句
# -- 统计每个销售经理2019年的利润总额

sql = r"SELECT MANAGER, SUM(PROFIT) as TotalProfit FROM orders where FY='2019' group by MANAGER"

# 3 执行sql语句获取统计查询结果
df = pd.read_sql_query(sql, conn)

# 4. 基于DataFrame结果集作图
plt.figure(figsize=(6,4),dpi=120)
plt.bar(df['MANAGER'], df['TotalProfit'])
plt.grid(axis='y')
plt.title("每个销售经理2019年的利润总额")
plt.ylabel("利润额")
for index,value in df['TotalProfit'].items():
plt.text(index,value,round(value),ha='center',va='bottom',color='k')

matplotlib绘制柱状图之基本配置——万能模板案例_数据库

 柱状图绘制

import matplotlib.pyplot as plt

# 设置中文字体
plt.rcParams['axes.unicode_minus'] = False # 不使用中文减号
plt.rcParams['font.sans-serif'] = 'FangSong' # 设置字体为仿宋(FangSong)

plt.figure(figsize=(5,3),dpi=120)

plt.bar(data.index, data.values, width=0.1, align='edge', bottom=100000 )
# plt.grid(axis='x')
plt.title("每个销售经理2019年的利润总额")
plt.ylabel("利润额")

matplotlib绘制柱状图之基本配置——万能模板案例_Python_02

plt.figure(figsize=(6,6),dpi=100)
plt.bar(data.index, data.values, width=0.6, align='edge', bottom=0-data.values )
plt.bar(data.index, data.values, width=0.6, align='edge', bottom=0 )
plt.grid(axis='x')
plt.title("每个销售经理2019年的利润总额")
plt.ylabel("利润额")

matplotlib绘制柱状图之基本配置——万能模板案例_matplotlib_03

堆叠柱状图——尾部

txtfile = r'orders.txt'
df_txt = pd.read_csv(txtfile)
profit = df_txt[df_txt['FY']==2019].groupby('OPERATOR')['PROFIT'].sum()
price = df_txt[df_txt['FY']==2019].groupby('OPERATOR')['PRICE'].sum()

plt.rcParams['font.sans-serif'] = 'KaiTi' # 设置全局字体为中文 楷体
plt.rcParams['axes.unicode_minus'] = False # 不使用中文减号

plt.figure(figsize=(10,4),dpi=120)
plt.bar(price.index, price.values, label='price' )
plt.bar(profit.index, profit.values, label='profit' )

# plt.grid(axis='x') #网格线
plt.title("每个销售经理2019年的利润总额")
plt.ylabel("利润额",size=12)
plt.xlabel("姓名",size=12)
plt.legend()

matplotlib绘制柱状图之基本配置——万能模板案例_Python_04

 堆叠柱状图——头部

txtfile = r'orders.txt'
df_txt = pd.read_csv(txtfile)
profit = df_txt[df_txt['FY']==2019].groupby('OPERATOR')['PROFIT'].sum()
price = df_txt[df_txt['FY']==2019].groupby('OPERATOR')['PRICE'].sum()

plt.figure(figsize=(6,6),dpi=100)
plt.bar(price.index, price.values, label='price' )
plt.bar(profit.index, profit.values, label='profit', bottom=price.values ) # 在price头上画profit

plt.grid(axis='x')
plt.title("每个销售经理2019年的利润总额")
plt.ylabel("利润额")
plt.legend()

matplotlib绘制柱状图之基本配置——万能模板案例_数据库_05

双维柱状图模板

import numpy as np
txtfile = r'orders.txt'
df_txt = pd.read_csv(txtfile)
profit = df_txt[df_txt['FY']==2019].groupby('OPERATOR')['PROFIT'].sum()
price = df_txt[df_txt['FY']==2019].groupby('OPERATOR')['PRICE'].sum()

plt.rcParams['font.sans-serif'] = 'KaiTi' # 设置全局字体为中文 楷体
plt.rcParams['axes.unicode_minus'] = False # 不使用中文减号
plt.figure(figsize=(10,6),dpi=120)

# 如果要改变柱子在X轴的位置,需要设置Xticks的数值
x = price.index
x_ticks = np.arange(price.size)

# 将两个柱子的X坐标错开,一个减去柱子宽度的一般,一个加上柱子宽度的一半
width = 0.4
plt.bar(x_ticks-(width/2), price.values, label='price', width=width )
plt.bar(x_ticks+(width/2), profit.values, label='profit', width=width) # 在price头上画profit

plt.xticks(x_ticks,x)

plt.grid(axis='x')
plt.title("每个销售经理2019年的利润总额")
plt.ylabel("利润额")
plt.legend()

matplotlib绘制柱状图之基本配置——万能模板案例_数据库_06

x = df['统计时间']
x_ticks = np.arange(df['统计时间'].size)

# 将两个柱子的X坐标错开,一个减去柱子宽度的一般,一个加上柱子宽度的一半
total_width, n = 0.8, 3
width = total_width / n
x1 = x_ticks - (total_width - width) / 2
plt.bar(x1,df['粮食产量增长(%)'], label='粮食', width=width )
plt.bar(x1+width,df['棉花增长(%)'], label='棉花', width=width)
plt.bar(x1+(width*2),df['油料增长(%)'],label='油料', width=width)
plt.xticks(x_ticks,x)

plt.grid(axis='x') #添加网格
plt.title("2010-2021年粮棉油增长率柱状图",size=17,y=1.02)
plt.xlabel('时间',font_dict)
plt.ylabel('增长率(%)',font_dict)
plt.legend()

 

matplotlib绘制柱状图之基本配置——万能模板案例_柱状图_07

 

 每文一语

当你拼尽全力却不知道什么是快乐,你该思考自己的人生了

举报

相关推荐

0 条评论