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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 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

image.png

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8月前
|
Python
使用Matplotlib创建不同类型图表的案例
使用Matplotlib创建不同类型图表的案例
40 2
|
7月前
|
Python
Python使用Matplotlib创建不同类型图表的案例
使用Matplotlib创建不同类型图表的案例
|
7月前
|
数据可视化 Python
【100天精通Python】Day62:Python可视化_Matplotlib绘图基础,绘制折线图、散点图、柱状图、直方图和饼图,以及自定义图标外观和功能,示例+代码
【100天精通Python】Day62:Python可视化_Matplotlib绘图基础,绘制折线图、散点图、柱状图、直方图和饼图,以及自定义图标外观和功能,示例+代码
124 0
|
12天前
|
数据可视化 数据挖掘 C++
数据分析综合案例讲解,一文搞懂Numpy,pandas,matplotlib,seaborn技巧方法
数据分析综合案例讲解,一文搞懂Numpy,pandas,matplotlib,seaborn技巧方法
|
12天前
|
Python
使用Matplotlib创建不同类型图表的案例
【4月更文挑战第29天】使用Python的matplotlib库创建了四种基本图形:折线图、散点图、柱状图和饼图。代码分别展示了如何绘制这些图表,包括设置X轴和Y轴标签以及标题。这只是matplotlib的基础,更多图表和高级功能可供进一步学习和探索。
20 1
|
24天前
|
数据可视化 搜索推荐 数据处理
Matplotlib在数据科学中的应用与案例分析
【4月更文挑战第17天】本文探讨了Matplotlib在数据科学中的应用,强调其作为Python中最常用的可视化库,提供多种图表类型、高度可定制性、交互式功能及与其他库的集成。通过一个案例分析展示了如何使用Matplotlib绘制城市人口分布的条形图,并添加交互式元素以增强数据探索。掌握Matplotlib能提升数据科学家的可视化能力和效率。
|
24天前
|
数据可视化 数据挖掘 Python
Matplotlib图表类型详解:折线图、柱状图与散点图
【4月更文挑战第17天】本文介绍了Python数据可视化库Matplotlib的三种主要图表类型:折线图、柱状图和散点图。折线图用于显示数据随时间或连续变量的变化趋势,适合多条曲线对比;柱状图适用于展示分类数据的数值大小和比较;散点图则用于揭示两个变量之间的关系和模式。通过示例代码展示了如何使用Matplotlib创建这些图表。
|
5月前
|
Python
又再肝3天,整理了65个Matplotlib案例,这能不收藏?
又再肝3天,整理了65个Matplotlib案例,这能不收藏?
101 0
|
Python
Python matplotlib修改柱状图柱子与图案周边的距离
本文介绍基于Python中matplotlib.pyplot模块,修改柱状图、条形图最两侧的柱子与图像边缘之间距离的方法~
166 1
Python matplotlib修改柱状图柱子与图案周边的距离
|
数据可视化 数据处理 Python
Matplotlib数据可视化:柱状图与直方图
Matplotlib数据可视化:柱状图与直方图
Matplotlib数据可视化:柱状图与直方图

相关实验场景

更多