python数据分析matplotlib库使用之二维图形绘制

本篇内容会在后期不定时更新

什么是matplotlib

matplotlib是最流行的python底层绘图库,主要做数据可视化图表。

为什么要学习matplotlib

  • 能将数据进行可视化,更直观的呈现
  • 使数据更加客观,更具有说服力

二维图绘制

matplotlib库的基本使用之折线图

  • 导入matplotlib库
from matplotlib import pyplot as plt
x = range(1,10,2)
y = [2,4,6,8,10]
plt.plot(x,y)	# 传入x y ,通过plot绘制折线图
plt.show()	# 展示图形

展示结果:
在这里插入图片描述
matplotlib还可以设置输出图片的一些格式,如下:

  • 设置图片的大小,像素
  • 保存到本地
  • 描述信息,比如x y轴所要表达的内容
  • 调整x y轴的间距
  • 线条的样式
  • 标记出特殊的点
  • 给图片添加水印

设置图片的大小

fig = plt.figure(figsize=(20, 8), dpi=80)

输出的样式就会发生改变:
在这里插入图片描述

保存图片

plt.savefig("example.png")

一保存到本地
在这里插入图片描述

调整x y轴的刻度

x = range(1, 20, 2)
y = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
plt.xticks(x)	# 修改x轴的刻度
plt.yticks(y)	# 修改y轴的刻度

修改后的图像:
在这里插入图片描述

  • 修改步长
    当x轴的刻度太密集时,可采用修改步长的方法达到疏一点的刻度,当然y轴同样。
plt.xticks(x[::2])

结果如下:
在这里插入图片描述

设置显示中文

from pylab import mpl	# 设置显示中文
mpl.rcParams['font.sans-serif'] = ['FangSong']

设置x y轴及标题的标签

plt.xlabel("奇数")	# 设置x轴的标签
plt.ylabel("偶数")	# 设置y轴的标签
plt.title("示例")	# 设置标题的标签

输出结果如下:
在这里插入图片描述

绘制网格

绘制网格可以更加明确的看出数据之间的关系,当然网格也可以调节透明度来更加易于观查数据,
透明度的数值为0-1之间,0表示完全透明,1表示完全不透明。

plt.grid()	# 采用默认的透明度
plt.grid(alpha=0.5)	# 透明度为0.5时的网格

输出结果:
在这里插入图片描述
在这里插入图片描述

设置图标

ax.plot(z_1, label="curb") #立方数据线
ax.plot(Y_1, label="quer", linewidth=5)	#平方数据线
ax.plot(x, x, label="liner", linewidth=5)	#直线
ax.legend(loc='best')	#添加图标

效果:
在这里插入图片描述

散点图的绘制

散点图的绘制方法

散点图绘制采用scatter()函数,只需传入x和y的值即可,代码如下:

import matplotlib.pyplot as plt	# 导入库

fig, ax = plt.subplots()	# 调用subplots
ax.scatter(X,Y)	# 传入x和有
fig.show()	# 展示数据

还是上面的例子做展示,改为散点图。代码如下:
版本一:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
x = [i for i in range(10)]	# 设置x轴数据
Y_1 = [i ** 2 for i in range(10)]	# 设置y轴平方数据
z_1 = [i ** 3 for i in range(10)]	# 设置y轴立方数据
ax.scatter(x, z_1, label="curb")	# 立方数据线
ax.scatter(x, Y_1, label="quer", linewidth=5)	# 平方数据线
ax.scatter(x, x, label="liner", linewidth=5)	# 直线
ax.legend(loc='best')	#设置图标
plt.savefig("data.png")	# 保存图片
fig.show()	# 展示图片

版本二:

import matplotlib.pyplot as plt

x = [i for i in range(10)]	# 设置x轴数据
Y_1 = [i ** 2 for i in range(10)]	# 设置y轴平方数据
z_1 = [i ** 3 for i in range(10)]	# 设置y轴立方数据
plt.scatter(x, z_1, label="curb")	# 立方数据线
plt.scatter(x, Y_1, label="quer", linewidth=5)	# 平方数据线
plt.scatter(x, x, label="liner", linewidth=5)	# 直线
plt.legend(loc='best')	#设置图标
plt.savefig("散点图.png")	# 保存图片
plt.show()	# 展示图片

效果:
在这里插入图片描述

柱图绘制

  • 柱状图的绘制方法为bar和barh方法,bar绘制垂直柱状图,barh绘制水平柱状图。
    bar柱状图绘制:
from matplotlib import pyplot as plt
from pylab import mpl

figure = plt.figure(figsize=(20, 15))   # 设置图像大小
# 设置字体
mpl.rcParams['font.sans-serif'] = ['FangSong']
# 电影名称
title = ['误杀', '流浪地球', '寻梦环游记', '战狼2', '美人鱼', '湄公河行动', '叶问4', '何以为家', '比悲伤更悲\n伤的故事', '中国合伙人']
# 电影票房
data = [11.97, 46.18, 12.02, 56.39, 33.9, 11.73, 11.72, 3.7, 9.46, 5.39]
# 绘制柱状图,传入x和y
plt.bar(title, data)
# 设置x轴刻度字体的大小
plt.xticks(fontsize=30)
# 设置y轴刻度字体的大小
plt.yticks(fontsize=30)
# 设置x轴的标签名称
plt.xlabel("票房/亿", fontsize=30)
# 设置y轴的标签名称
plt.ylabel("电影", fontsize=30)
# 绘制网格
plt.grid(alpha=0.5)
# 保存图片
plt.savefig("柱状图.png")
# 展示图片
figure.show()

效果:
在这里插入图片描述
barh水平柱状图的绘制。
barh方法:

from matplotlib import pyplot as plt
from pylab import mpl

figure = plt.figure(figsize=(20, 15))   # 设置图像大小
# 设置字体
mpl.rcParams['font.sans-serif'] = ['FangSong']
# 电影名称
title = ['误杀', '流浪地球', '寻梦环游记', '战狼2', '美人鱼', '湄公河行动', '叶问4', '何以为家', '比悲伤更悲\n伤的故事', '中国合伙人']
# 电影票房
data = [11.97, 46.18, 12.02, 56.39, 33.9, 11.73, 11.72, 3.7, 9.46, 5.39]
# 绘制柱状图,传入x和y
plt.bar(title, data)
# 设置x轴刻度字体的大小
plt.xticks(fontsize=30)
# 设置y轴刻度字体的大小
plt.yticks(fontsize=30)
# 设置x轴的标签名称
plt.xlabel("票房/亿", fontsize=30)
# 设置y轴的标签名称
plt.ylabel("电影", fontsize=30)
# 绘制网格
plt.grid(alpha=0.5)
# 保存图片
plt.savefig("柱状图.png")
# 展示图片
figure.show()

效果:
在这里插入图片描述

  • 间隔柱状图绘制
    有时需要将多组数据绘制到同一个图表上,这时就需要间隔各个图表的内容,详情见代码。
from matplotlib import pyplot as plt
import numpy as np
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['FangSong']
movie_name = ["千与千寻", "玩具总动员", "黑衣人"]
# 三天内票房
num1 = [7548, 4013, 1673]
num2 = [5453, 1840, 1080]
num3 = [4383, 2345, 1890]
x = np.arange(len(movie_name))
# 设置柱宽
width = 0.2
# 绘制柱状图,alpha设置透明度,width设置柱宽,label设置图标
plt.bar(x, num1, alpha=0.5, width=width, label=movie_name[0])
# num2图加上一个柱宽
plt.bar([i + width for i in x], num2, alpha=0.5, width=width, label=movie_name[1])
# num3图加上两个柱宽
plt.bar([i + 2 * width for i in x], num3, alpha=0.5, width=width, label=movie_name[2])
# 设置x轴的值
x_label = ["第{}天".format(i + 1) for i in x]
# 偏移x轴的值
plt.xticks([i + width for i in x], x_label)
# 设置x,y轴的标签,fontsize设置字体的大小
plt.ylabel("票房", fontsize=15)
plt.xlabel("天数", fontsize=15)
# 设置图标,loc设置图标位置
plt.legend(loc="best")
# 保存图片
plt.savefig("间隔柱状图.png")
# 展示图表
plt.show()

效果:
在这里插入图片描述

饼状图绘制

  • 饼状图的绘制含函数为pie(),传入相应比例即可,具体参数见代码。
    代码如下:
from matplotlib import pyplot as plt
from pylab import mpl

# 设置显示中文
mpl.rcParams['font.sans-serif'] = ['FangSong']
# 男生人数
man = 72351
# 女生人数
woman = 81345
# 人妖人数
mid_person = 2300
# 计算男生比例
man_perc = man / (man + woman + mid_person)
# 计算女生比例
woman_perc = woman / (man + woman + mid_person)
# 计算人妖比例
mid_perc = mid_person / (man + woman + mid_person)
# 添加名称
labels = ['男', '女', "人妖"]
# 修改颜色
colors = ['blue', 'orange', 'red']
# 绘制饼状图,传入的为列表。explode为饼状图添加分裂效果,传入参数为元组,第一个参数为可为0,第二个参数分割距离。autopct为饼状图添加显示比例。
paches, texts, autotexts = plt.pie([man_perc, woman_perc, mid_perc], colors=colors, labels=labels, explode=(0, 0, 0.02),
                                   autopct='%0.1f%%')
# 修改字体颜色
for text in texts + autotexts:
    text.set_color("black")
# 设置字体大小
for text in texts + autotexts:
    text.set_fontsize(15)
plt.savefig("饼状图.png")
# 展示图像
plt.show()

效果:
在这里插入图片描述

直方图绘制

随机正太分布直方图

直方图的绘制的函数为hist(),传入相应的正太值即可。详细见代码。
代码如下:

from matplotlib import pyplot as plt
import numpy as np

# 生成1000个标志的正太分布随机
x = np.random.randn(1000)
# 修改柱的宽度,使用bins,值越小,图像越宽。
plt.hist(x, bins=100)
plt.savefig("随机正太分布直方图.png")
plt.show()

效果:
在这里插入图片描述

指定期望与均值的直方图

  • 调用numpy库中的np.random.normal()即可指定期望与均值,详情见代码。
    代码如下:
from matplotlib import pyplot as plt
import numpy as np

# 使用np.random.normal()指定期望与均值的正太分布,0为期望,0.8为均值,1000为生成的个数。
# 绘制三个指定期望与均值的正太分布
x = np.random.normal(0, 0.8, 1000)
y = np.random.normal(0, 0.5, 1000)
z = np.random.normal(0, 0.7, 1000)
# 传入关键字参数,为字典形式。**kwargs为包裹关键字参数
kwargs = dict(bins=100, alpha=0.5)
# 绘制直方图
plt.hist(x, **kwargs)
plt.hist(y, **kwargs)
plt.hist(z, **kwargs)
# 保存图片
plt.savefig("指定期望与均值直方图.png")
# 展示图片
plt.show()

效果:
在这里插入图片描述

发布了44 篇原创文章 · 获赞 16 · 访问量 2384

猜你喜欢

转载自blog.csdn.net/qq_46292926/article/details/105113673