开发者社区> 王小王-123> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介: 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')

image.png

 柱状图绘制

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("利润额")

image.png

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("利润额")

image.png

堆叠柱状图——尾部

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()


image.png

堆叠柱状图——头部

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()


image.png

双维柱状图模板

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()


image.png

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()


image.png

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
②matplotlib绘制直方图之基本配置——万能模板案例
matplotlib绘制直方图之基本配置——万能模板案例
10 0
matplotlib绘制箱形图之基本配置——万能模板案例(二)
matplotlib绘制箱形图之基本配置——万能模板案例
26 0
matplotlib绘制火柴杆图之基本配置——万能模板案例
matplotlib绘制火柴杆图之基本配置——万能模板案例
14 0
matplotlib绘制火柴杆图之基本配置——万能模板案例
matplotlib绘制火柴杆图之基本配置——万能模板案例
16 0
数据可视化之matplotlib绘制饼状图
数据可视化之matplotlib绘制饼状图 常常为Python的数据可视化而痴迷,将数据进行可视化只需要掌握相关库的方法使用即可。流水线式的库式调用实现正是显示python强大的库的功能。我们可以绘制各种各样的数据图样式,对于数据的反应更加直观而准确。
32 0
直方图的绘制 基于python-matplotlib库
直方图的绘制 基于python-matplotlib库
36 0
Matplotlib绘制子图
有时,我们希望检查数据的多个方面间的关系,例如我们不仅希望得到时间与温度的关系,同时我们也需要关注时间与风力等方面之间的关系,Matplotlib提供了将多个图形组合在一起的方法。
734 0
Python-Matplotlib绘制条形图
条形图具有丰富的表现形式,常见的类型包括单组条形图,多组条形图,堆积条形图和对称条形图等。本文利用Matplotlib绘制常见条形图。
872 0
matplotlib 雷达图2
说明 搞了一个最新版本的雷达图,比以前那个美观。 不多说,代码奉上: 完整代码 ''' matplotlib雷达图 ''' import numpy as np import matplotlib.pyplot as plt # 雷达图 def plot_radar(labels, data, score): ''' 用法: >>> labels = np.
893 0
+关注
王小王-123
快乐代码,精彩人生!
268
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载