Matplotlib绘图_02

  • 1.散点图
  • 2.条形图
  • 2.1 竖条形图
  • 2.2 分组条形图
  • 2.3 堆叠条形图
  • 2.4 水平条形图
  • 总结


1.散点图

散点图介绍:散点图用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联总结坐标点的分布模式
散点图特点:判断变量之间是否存在数量关联趋势,表示离群点(分布规律)。

  1. plt.scatter(x,y):使用默认的形状颜色等绘制散点图

举个例子:假设通过爬虫你获取到了长沙2019年4,10月份每天白天的最高气温(分别位于列表a,b),那么此时如何寻找出气温和随时间变化的某种规律
a = [11,17,16,11,12,11,12,13,10,14,8,13,12,15,14,17,18,21,16,17,30,14,15,15,15,19,21,22,22,22,23]
b = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,15,10,11,13,12,13,6]

from matplotlib import pyplot as plt

import matplotlib
font = {
    'family':'SimHei',
    'weight':'bold',
    'size':12
}
matplotlib.rc("font", **font)

plt.figure(figsize=(14,8))
# 优化:4,10月份分布分开
# x,y
y_4 = [11,17,16,11,12,11,12,13,10,14,8,13,12,15,14,17,18,21,16,17,30,14,15,15,15,19,21,22,22,22,23]
y_10 = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,15,10,11,13,12,13,6]
x_4 = range(1,32)  # 1~31
x_10 = range(51,82)  # 20+31 ~ 31+31+21

# 绘制图形
plt.scatter(x_4,y_4)
plt.scatter(x_10,y_10)

# 刻度 四月1号 四月2号...  十月1号 十月2号...
x_t = list(x_4)+list(x_10)
x_l = ["四月{}号".format(i) for i in x_4]
x_l += ["十月{}号".format(i) for i in x_4]

plt.xticks(x_t[::3],x_l[::3],rotation=45)

plt.show()

python如何将离散的点画为光滑的曲线 plot画离散点_图例


分析:由图可得,四月份随着时间的推移,气温逐渐升高。相反十月份随着时间的推移,气温逐渐下降。

2.条形图

条形图介绍:条形图是用宽度相同的条形的高度或长短来表示数据多少的图形。条形图可以横置或纵置,纵置时也称为柱形图。
条形图特点:
(1)能够使人们一眼看出各个数据的大小。
(2)易于比较数据之间的差别。

2.1 竖条形图

  1. plt.bar(x,height):绘制以x为x轴位置,height为y轴位置的竖条形图
    (1)width:调整柱子的宽度,默认为0.8
    (2)bottom:y的起始值改变了,堆叠图中常使用
    (3)align:默认为center 设置为:edge边缘,取决于width的正负 正:右边 负:左边
  2. plt.barh(y,width):绘制以y为y轴位置,width为y轴位置的水平条形图

举个例子:假设你获取到了2019年内地电影票房前20的电影(列表a)和电影票房数据(列表b),那么如何更加直观的展示该数据
a = [“流浪地球”,“复仇者联盟4:终局之战”,“哪吒之魔童降世”,“疯狂的外星人”,“飞驰人生”,“蜘蛛侠:英雄远征”,“扫毒2天地对决”,“烈火英雄”,“大黄蜂”,“惊奇队长”,“比悲伤更悲伤的故事”,“哥斯拉2:怪兽之王”,“阿丽塔:战斗天使”,“银河补习班”,“狮子王”,“反贪风暴4”,“熊出没”,“大侦探皮卡丘”,“新喜剧之王”,“使徒行者2:谍影行动”,“千与千寻”]

  • b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23,5.22] 单位:亿
from matplotlib import pyplot as plt

import matplotlib
font = {
    'family':'SimHei',
    'weight':'bold',
    'size':12
}
matplotlib.rc("font", **font)

# 构建x,height
a = ["流浪地球","复仇者联盟4:终局之战","哪吒之魔童降世","疯狂的外星人","飞驰人生","蜘蛛侠:英雄远征","扫毒2天地对决","烈火英雄","大黄蜂","惊奇队长","比悲伤更悲伤的故事","哥斯拉2:怪兽之王","阿丽塔:战斗天使","银河补习班","狮子王","反贪风暴4","熊出没","大侦探皮卡丘","新喜剧之王","使徒行者2:谍影行动","千与千寻"]  
b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23,5.22] 
# 放大画布
plt.figure(figsize = (14,8))

# 柱形图
# width 调整柱子的宽度 默认0.8
# bottom y的起始值改变了 堆叠图中常使用
# align 默认为:center 设置为:edge边缘 取决于width的正负 正:右边 负:左边
# plt.bar(a,b,width=0.3,bottom=10,align="edge")
plt.bar(a,b,width=-0.3,bottom=10,align="edge",color="g")

# 设置刻度
plt.xticks(rotation=90)

plt.show()

2.2 分组条形图

难点:添加标签

举个例子:
练习3:水果:苹果、梨子、车厘子
Q1销售额:1000、800、3000
Q2销售额:1200、700、2800

from matplotlib import pyplot as plt

import matplotlib
font = {
    'family':'SimHei',
    'weight':'bold',
    'size':12
}
matplotlib.rc("font", **font)

# 构建x,height
fruits = ["苹果","梨子","车厘子"]
Q1_sales = [1000,800,3000]
Q2_sales = [1200,700,2800]

# 柱子的对应索引位置[0,1,2]
# 设置柱子宽度
width = 0.35
# rects1 = plt.bar(list(range(len(fruits))),Q1_sales,width)
# rects2 = plt.bar(list(range(len(fruits))),Q2_sales,width)

# 蓝、黄柱子宽度都为0.35 怎么使蓝色显示左边 黄色显示右边
# 位置左移width/2 位置 -width/2  [0-width/2,1-width/2,3-width/2]
po_l = [i-width/2 for i in list(range(len(fruits)))]
plt.bar(po_l,Q1_sales,width,label="Q1")

po_r = [i+width/2 for i in list(range(len(fruits)))]
plt.bar(po_r,Q2_sales,width,label="Q2")

# 设置图例
# 在plt.bar()中添加label
plt.legend()

# 数据标签
def auto_label(x_po,y_po):
    for x_i,y_i in zip (x_po,y_po):
        plt.annotate(f"{y_i}",xy=(x_i,y_i),xytext=(x_i-0.1,y_i))

# 数据标签
auto_label(po_l,Q1_sales)
auto_label(po_r,Q2_sales)

plt.xticks(list(range(len(fruits))),fruits)

plt.show()

python如何将离散的点画为光滑的曲线 plot画离散点_分布模式_02

2.3 堆叠条形图

from matplotlib import pyplot as plt

import matplotlib
font = {
    'family':'SimHei',
    'weight':'bold',
    'size':12
}
matplotlib.rc("font", **font)


fruits = ["苹果","梨子","车厘子"]
Q1_sales = [1000,800,3000]
Q2_sales = [1200,200,2800]

plt.bar(fruits,Q1_sales,width=0.5,label="Q1")
plt.bar(fruits,Q2_sales,width=0.5,bottom=Q1_sales,label="Q2")

plt.legend()

plt.show()

python如何将离散的点画为光滑的曲线 plot画离散点_数据_03

2.4 水平条形图

from matplotlib import pyplot as plt

import matplotlib
font = {
    'family':'SimHei',
    'weight':'bold',
    'size':12
}
matplotlib.rc("font", **font)


plt.figure(figsize=(14,8))
# 构建y、width
a = ["流浪地球","复仇者联盟4:终局之战","哪吒之魔童降世","疯狂的外星人","飞驰人生","蜘蛛侠:英雄远征","扫毒2天地对决","烈火英雄","大黄蜂","惊奇队长","比悲伤更悲伤的故事","哥斯拉2:怪兽之王","阿丽塔:战斗天使","银河补习班","狮子王","反贪风暴4","熊出没","大侦探皮卡丘","新喜剧之王","使徒行者2:谍影行动","千与千寻"]  
b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23,5.22] 

plt.barh(a,b,height=0.5)

plt.show()

python如何将离散的点画为光滑的曲线 plot画离散点_数据分析_04

总结

  • plt.legend() 设置图例
    1.plt.plot(label)
    2.局部设置字体,prop=font
  • plt.annotate(text,xy,xytext) 文本注释(设置标签)
  • plt.scatter(x,y) 绘制散点图
    1.分布
    2.相关性
  • 条形图
    1.plt.bar(x,height) 柱状图
    2.plt.barh(y,width) 条形图
    3.堆叠条形图
    4.分组条形图
    5.align:edge center 分组
    6.bottom:堆叠