matplotlib绘制柱状图之基本配置——万能模板案例
【摘要】
连接数据库案例
import pymysql # pip install pymysql安装,用来连接mysql数据库import pandas as pd # 用来做数据导入(pd.read_sql_query() 执行sql语句得到结果df)import matplotlib.pyplot as plt # 用来画图(plt.p...
连接数据库案例
-
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')
柱状图绘制
-
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("利润额")
-
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("利润额")
堆叠柱状图——尾部
-
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()
堆叠柱状图——头部
-
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()
双维柱状图模板
-
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()
每文一语
当你拼尽全力却不知道什么是快乐,你该思考自己的人生了
文章来源: wxw-123.blog.csdn.net,作者:王小王-123,版权归原作者所有,如需转载,请联系作者。
原文链接:wxw-123.blog.csdn.net/article/details/123746754
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)