day2 - 初学matplotlib

day 2 数据可视化-matplotlib

1 matplotlib

点击了解:matplotlib官网链接
matplotlib是一个 Python的2D图库,以下是终端安装代码

pip install matplotlib

2 基本使用

import matplotlib.pyplot as plt
# 0.准备数据
x = [1, 2, 3, 4, 5, 6, 7]
y_shanghai = [17, 17, 18, 15, 11, 11, 13]
# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)   
# 2.绘制图像
plt.plot(x, y_shanghai)
# 3.图像显示
plt.show()

图像

3 直折线

画出某城市11点到12点1小时内每分钟的温度变化折线图,
温度范围在15度~18度

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 设置正常显示符号
# 0.准备数据
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)

# 1.创建画布
plt.figure(figsize=(20, 8), dpi=80)

# 2.绘制图像
plt.plot(x, y_shanghai)
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
plt.grid(True, linestyle="--",alpha=1)
# 3.图像显示
plt.show()

图示

4 条形图

4.1 直方图

2019年贺岁片票房的数据

#票房单位亿元
movies = {
    "流浪地球":40.78,
    "飞驰人生":15.77,
    "疯狂的外星人":20.83,
    "新喜剧之王":6.10,
    "廉政风云":1.10,
    "神探蒲松龄":1.49,
    "小猪佩奇过大年":1.22,
    "熊出没·原始时代":6.71
}

展示电影和票房的代码如下:

import matplotlib.pyplot as plt
import random
# 设置显示中文字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
# 设置正常显示符号
plt.rcParams['axes.unicode_minus'] = False 


plt.figure(figsize=(20, 8), dpi=100)

movies = {
    "流浪地球": 40.78,
    "飞驰人生": 15.77,
    "疯狂的外星人": 20.83,
    "新喜剧之王": 6.10,
    "廉政风云": 1.10,
    "神探蒲松龄": 1.49,
    "小猪佩奇过大年": 1.22,
    "熊出没·原始时代": 6.71
}

plt.bar(range(len(movies)), list(movies.values()))
plt.xticks(range(len(movies)), list(movies.keys()))
plt.grid()

在这里插入图片描述

4.2 分组直方图

2019年春节贺岁片前五天的电影票房记录

movies = {
    "流浪地球": [2.01, 4.59, 7.99, 11.83, 16],
    "飞驰人生": [3.19, 5.08, 6.73, 8.10, 9.35],
    "疯狂的外星人": [4.07, 6.92, 9.30, 11.29, 13.03],
    "新喜剧之王": [2.72, 3.79, 4.45, 4.83, 5.11],
    "廉政风云": [0.56, 0.74, 0.83, 0.88, 0.92],
    "神探蒲松龄": [0.66, 0.95, 1.10, 1.17, 1.23],
    "小猪佩奇过大年": [0.58, 0.81, 0.94, 1.01, 1.07],
    "熊出没·原始时代": [1.13, 1.96, 2.73, 3.42, 4.05]
}

示例代码如下:

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False

movies = {
    "流浪地球": [2.01, 4.59, 7.99, 11.83, 16],
    "飞驰人生": [3.19, 5.08, 6.73, 8.10, 9.35],
    "疯狂的外星人": [4.07, 6.92, 9.30, 11.29, 13.03],
    "新喜剧之王": [2.72, 3.79, 4.45, 4.83, 5.11],
    "廉政风云": [0.56, 0.74, 0.83, 0.88, 0.92],
    "神探蒲松龄": [0.66, 0.95, 1.10, 1.17, 1.23],
    "小猪佩奇过大年": [0.58, 0.81, 0.94, 1.01, 1.07],
    "熊出没·原始时代": [1.13, 1.96, 2.73, 3.42, 4.05]
}
plt.figure(figsize=(20, 8))
width = 0.75
bin_width = width / 5

ind = range(0, len(movies))

movie_data = list(movies.values())
print(movie_data)

every_day = []
for i in range(len(movie_data[0])):
    every_day.append([
        movie_data[0][i],
        movie_data[1][i],
        movie_data[2][i],
        movie_data[3][i],
        movie_data[4][i],
        movie_data[5][i],
        movie_data[6][i],
        movie_data[7][i],
    ])

print(every_day)

for index in range(len(every_day)):
    day_tickets = every_day[index]
    xs = [i - (bin_width * (2 - index)) for i in ind]
    plt.bar(xs, day_tickets, width=bin_width, label="第%d天" % (index + 1))
    # 添加坐标上的数字
    for ticket, x in zip(day_tickets, xs):
        plt.annotate(ticket, xy=(x, ticket), xytext=(x - 0.1, ticket + 0.1))

# 设置图例
plt.legend()
plt.ylabel("单位:亿")
plt.title("春节前5天电影票房记录")
# 设置x轴的坐标
plt.xticks(ind, movies.keys())
#添加网格
plt.grid(True)
#展示图表 
plt.show() 

在这里插入图片描述

5 散点图

散点图的绘制,使用的是plt.scatter方法,这个方法有以下参数:

  1. x,y:分别是x轴和y轴的数据集。两者的数据长度必须一致。
  2. s:点的尺寸。如果是一个具体的数字,那么散点图的所有点都是一样大小,如果是一个序列,那么这个序列的长度应该和x轴数据量一致,序列中的每个元素代表每个点的尺寸。
  3. c:点的颜色。可以为具体的颜色,也可以为一个序列或者是一个cmap对象。
  4. marker:标记点,默认是圆点,也可以换成其他的。
  5. 其他参数:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.scatter.html#matplotlib.pyplot.scatter
  • 例如:需求:探究房屋面积和房屋价格的关系

房屋面积数据:

x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01,  20.67, 288.64,163.56, 120.06, 207.83, 342.75, 147.9 ,  53.06, 224.72,  29.51,21.61, 483.21, 245.25, 399.25, 343.35]

房屋价格数据:

y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61,  24.9 , 239.34, 140.32, 104.15, 176.84, 288.23, 128.79,  49.64, 191.74,  33.1 ,30.74, 400.02, 205.35, 330.64, 283.45]

按0-4步骤

import matplotlib.pyplot as plt
import random
# 设置显示中文字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
# 设置正常显示符号
plt.rcParams['axes.unicode_minus'] = False 
# 0.准备数据
x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01,  20.67, 288.64,163.56, 120.06, 207.83, 342.75, 147.9 ,  53.06, 224.72,  29.51,21.61, 483.21, 245.25, 399.25, 343.35]
y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61,  24.9 , 239.34,140.32, 104.15, 176.84, 288.23, 128.79,  49.64, 191.74,  33.1 ,30.74, 400.02, 205.35, 330.64, 283.45]

# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)

# 2.绘制散点图
plt.scatter(x, y)

# 3.显示图像
plt.show()

在这里插入图片描述

5.1 绘制多组数据

x=[random.random() for i in range(10)]
y1=[random.random() for i in range(10)]
y2=[random.random() for i in range(10)]

plt.scatter(x,y1,label="第一组数据")
plt.scatter(x,y2,label="第二组数据")

plt.legend()

在这里插入图片描述

6 饼图

matplotlib中,可以通过plt.pie来实现,其中的参数如下:

  1. x:饼图的比例序列。
  2. labels:饼图上每个分块的名称文字。
  3. explode:设置某几个分块是否要分离饼图。
  4. autopct:设置比例文字的展示方式。比如保留几个小数等。
  5. shadow:是否显示阴影。
  6. textprops:文本的属性(颜色,大小等)。
  7. 其他参数:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.pie.html#matplotlib.pyplot.pie
edu = [59104, 1467937, 3579974]
labels = ['第一产业', '第二产业', '第三产业']
explode = [0.5, 0, 0]
colors = ['blue', 'pink', 'purple']

plt.pie(
    x=edu,  # 绘制的数据
    labels=labels,  # 占比的名字
    autopct='%.1f%%',  # 占比数值
    explode=explode,  # 饼图显示分隔间隔
    labeldistance=0.5,  #设置标签文本显示的距离
    textprops={
        'fontsize': 20,
        'color': 'k'
    },
    colors=colors,  # 饼图颜色
)

在这里插入图片描述

以下另外一组数据

edu=[0.2515,0.3724,0.3336,0.0368,0.0057]
labels=['中专','大专','本科','硕士','其他']

plt.pie(
    x=edu,
    labels=labels,
    
)

在这里插入图片描述

  • 案例
# 设置绘画的主题风格
plt.figure(figsize=(10,8))
# 构造数据
edu = [0.2515,0.3724,0.3336,0.0368,0.0057]
labels = ['中专','大专','本科','硕士','其他']

explode = [0,0.1,0,0,0]  # 用于突出大专
colors=['#FEB748','#EDD25D','#FE4F54','#51B4FF','#dd5555'] # 自定义颜色

plt.axes(aspect='equal')  # 保证饼图是圆  不是默认的椭圆
plt.pie(x=edu,  # 数据
        labels=labels,   # 标签名称
        autopct='%.2f%%',  # 设置百分比格式  保留几位小数   
        colors=colors,  # 使用自定义颜色
#         radius = 1,   # 设置饼图半径
#         center = (80,80),  # 设置圆点
        labeldistance = 1.1, # 设置教育水平标签与圆心的距离
        startangle =30, # 设置饼图的初始角度  逆时针
        textprops = {'fontsize':12, 'color':'k'}, # 设置文本标签的属性值
        explode=explode, # 突出显示大专人群
        pctdistance=0.5,   # 占比和图距离
#         shadow=True,    # 阴影
#         frame=True    # frame 显示
       )
plt.title('失信人员组成')

在这里插入图片描述

7 雷达图

数据图

properties = ['输出', 'KDA', '发育', '团战', '生存']
values = [40, 91, 44, 90, 95, 40]
theta = np.linspace(0, np.pi*2, 6)
plt.polar(theta, values)
plt.xticks(theta, properties, fontproperties=font)
plt.fill(theta, values)
plt.show()

在这里插入图片描述

matplotlib官方文档

链接: https://matplotlib.org/index.html
matplotlib官方文档

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值