史上最详细的matplotlib 子图(数据来自MySQL)

史上最详细的matplotlib 子图(数据来自MySQL)

最详细的python可视化测试案例

子图

我们要画的子图有3个,折线图,散点图,柱状图

  1. 首先链接数据库,使用的模块是pymysql
  2. 绘图模块是matplotlib
  3. 使用的工具是IDEA
  4. 环境 win10

安装模块自备梯子

配置项与样式设置的介绍

  1. 设置子图的大小 plt.figure(figsize=(15,8))
  2. 设置子图维度和图的位置 1行3列1位置
  3. 标题啊
  4. plot 里面的 ‘--’ 是定义折线图的样式
  5. alpha透明度(好看用的)
  6. for这个是将数值显示图表上方,使用了枚举(不懂得话参考我另外一篇博客《python 函数之enumerate(枚举)》)

全部代码:

import matplotlib.pyplot as plt
import pymysql
#显示中文
plt.rcParams['font.sans-serif']=['simhei']
#桥接MySQL
con = pymysql.connect('localhost','root','000000','shop',charset='utf8')
#定义个光标(咸猪手)
cur = con.cursor()
#写个SQL
sql = "select shopName,sum(volume)as 总销量,sum(shopPrice) as 总金额,count(shopName) as 总数量 from fruist group by shopName order by 总数量 desc limit 10"
#SQL赋能的“咸猪手”去执行
cur.execute(sql)
data = (cur.fetchall())

name ,sum_vo,sum_pri,sum_na = [],[],[],[]
for i in data:
    name.append(i[0])
    sum_vo.append(int(i[1]))  # SQL使用了sum就成Decimal类型了,转int就完事
    sum_pri.append(int(i[2]))
    sum_na.append(int(i[3]))
    
plt.figure(figsize=(15,8))

plt.subplot(1,3,1)
plt.title('总销量top 10')
plt.plot(name,sum_vo,'--',alpha=0.8,color='red')
for i,(_x,_y) in enumerate(zip(name,sum_vo)):
    plt.text(_x,_y,sum_vo[i],fontsize=10,color='gray')
    
plt.subplot(1,3,2)
plt.title('总金额top 10')
plt.scatter(name,sum_pri,alpha=0.5)
for i,(_x,_y) in enumerate(zip(name,sum_pri)):
        plt.text(_x,_y,sum_pri[i],fontsize=10,color='green')
        
plt.subplot(1,3,3)
plt.bar(name,sum_na,alpha=0.4)
plt.title('总数量top 10')
for i,(_x,_y) in enumerate(zip(name,sum_na)):
        plt.text(_x,_y,sum_na[i],alpha=0.8,fontsize=10,color='orange')
        
plt.show()
plt.close()

运行结果: 史上最详细的matplotlib 子图(数据来自MySQL)_第1张图片

MySQL表: 史上最详细的matplotlib 子图(数据来自MySQL)_第2张图片

重叠图

  1. 柱状图和折线图重叠
  2. 多样化定义了水印 fig.text(0.4,0.5,'这是一个水印',alpha=0.5,color='red'),0.4,0.5 是维度

配置项与样式设置的介绍

  1. 设置子图的大小 plt.figure(figsize=(15,8))
#没有链接MySQL,数据  name,number1,number2

#同一商品,展示总金额和总销量
fig = plt.figure(figsize=(8,6))
fig.text(0.4,0.5,'这是一个水印',alpha=0.5,color='red')
name = ['蓝莓', '甜玉米', '地瓜', '甘蔗', '沙果', '樱桃', '荔枝', '猕猴桃', '袖子', '栗子']

#   '*' 散点图,'*--'散点折线图,linewidth宽度
number1= [390031, 385145, 377133, 375945, 373261, 363121, 246989, 245725, 248635, 251676]
plt.title('各水果的白天销量和晚上销量对比图')
plt.bar(name,number1,color='gray',alpha=0.5,label='水果总销量')
for i,(_x,_y) in enumerate(zip(name,number1)):
    plt.text(_x,_y,number1[i],color='gray')

number2 = [340031, 285145, 317133, 325945, 353261, 263121, 346989, 345725, 288635, 151676]
plt.plot(name,number2,'*--',linewidth=2,alpha=0.5,color='black',label='水果总金额')
for i,(_x,_y) in enumerate(zip(name,number2)):
    plt.text(_x,_y,number2[i],color='black')

plt.xlabel('水果名字')
plt.ylabel('水果销量')
plt.legend()
plt.show()
plt.close()

史上最详细的matplotlib 子图(数据来自MySQL)_第3张图片

史上最详细的matplotlib 子图(数据来自MySQL)_第4张图片好简单的亚子

史上最详细的matplotlib 子图(数据来自MySQL)_第5张图片 你还敢说你不会可视化?

交朋友扫:
史上最详细的matplotlib 子图(数据来自MySQL)_第6张图片

你可能感兴趣的:(史上最详细的matplotlib 子图(数据来自MySQL))