day07

可视化

1. matplotlib模块学习

快速安装

pip install matplotlib

1.1 折线图

import matplotlib.pyplot as plt
import random

x=range(10) # 定义x轴的数据 列表的数据类型
y=[random.uniform(15,35) for i in x] # 定义y轴的数据  # 列表的数据类型


plt.plot(x, y) # 绘制图像
plt.savefig('a1.png') # 保存图像 在当前目录保存名为test.png的图片,必须在show方法前否则图片就是空白
# plt.show() # 展示图像
a.设置画布大小

我们使用plt.figure()函数来设置画布大小,其参数如下:

  • figsize : 设置画布的大小,单位英寸 长,宽

  • dpi : 设置清晰度

import matplotlib.pyplot as plt
import random

x=range(10) # 定义x轴的数据
y=[random.uniform(15,35) for i in x] # 定义y轴的数据

plt.figure(figsize=(20,8),dpi=80) # 设置画布大小与清晰度

plt.plot(x, y) # 绘制图像
plt.show() # 展示图像
b. 自定义x轴、y轴刻度

xticks,yticks使用自定义刻度的函数,它有两个参数:
ticks:要显示x轴的刻度
labels:给对应的x刻度设置一个标签,并且覆盖之前的刻度,与传入ticks的列表长度要相等。

x轴每隔2两个数显示

import matplotlib.pyplot as plt
import random

x=range(10) # 定义x轴的数据
y=[random.uniform(15,35) for i in x] # 定义y轴的数据

plt.figure(figsize=(20,8),dpi=80) # 设置画布大小与清晰度

plt.xticks(x[::1]) # 定义显示的x轴步长为1

plt.plot(x, y) # 绘制图像
plt.show() # 展示图像
c. x轴显示中文

matplotlib默认字体是不支持中文的需要更改,有多种方法,现在只提供一种

import matplotlib.pyplot as plt
import random

x=range(10) # 定义x轴的数据
y=[random.uniform(15,35) for i in x] # 定义y轴的数据

plt.figure(figsize=(20,8),dpi=80) # 设置画布大小与清晰度

plt.xticks(x[::2],["1月","2月","3月","4月","5月"]) # 第二个参数可以指定显示字符串,不过传入xticks的这两个参数长度要相等

plt.plot(x, y) # 绘制图像
plt.show() # 展示图像

修改matplotlib默认字体,使它支持显示中文

方法一:

plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签

方法二:

修改全局字体样式,需要使用 matplotlib 模块的 rcParams

from matplotlib import rcParams

rcParams['font.family'] = 'SimHei' # 黑体

常用字体:

宋体:SimSun
黑体:SimHei
微软雅黑:Microsoft YaHei
微软正黑体:Microsoft JhengHei
新宋体:NSimSun
新细明体:PMingLiU
细明体:MingLiU
标楷体:DFKai-SB
仿宋:FangSong
楷体:KaiTi
隶书:LiSu
幼圆:YouYuan
华文细黑:STXihei
华文楷体:STKaiti
华文宋体:STSong
华文中宋:STZhongsong
华文仿宋:STFangsong
方正舒体:FZShuTi
方正姚体:FZYaoti
华文彩云:STCaiyun
华文琥珀:STHupo
华文隶书:STLiti
华文行楷:STXingkai
华文新魏:STXinwei
d. 轴标签和标题

xlabel、ylabel使用修改x,y轴标签

title可修改标题

import matplotlib.pyplot as plt
import random

plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签

x=range(10) # 定义x轴的数据
y=[random.uniform(15,35) for i in x] # 定义y轴的数据

plt.figure(figsize=(20,8),dpi=80) # 设置画布大小与清晰度

plt.xticks(x[::2],["1月","2月","3月","4月","5月"]) # 第二个参数可以指定显示字符串,不过传入xticks的这两个参数长度要相等

plt.xlabel("时间变化") # 修改标签
plt.ylabel("温度变化")

plt.title("温度变化表") # 修改标题

plt.plot(x, y) # 绘制图像
plt.show() # 展示图像
e. 添加网格线

grid方法来设置图表中的网格线

import matplotlib.pyplot as plt
import random

plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签

x=range(60) # 定义x轴的数据
y=[random.uniform(15,18) for i in x] # 定义y轴的数据

plt.figure(figsize=(20,8),dpi=80) # 设置画布大小与清晰度

plt.plot(x, y) # 绘制图像

plt.xticks(x[::5],["{}分钟".format(i) for i in x][::5]) # 第二个参数可以指定显示字符串,不过传入xticks的这两个参数长度要相等
plt.yticks(range(0,40,5)) # 自定义y轴刻度
plt.xlabel("时间变化") # 修改标签
plt.ylabel("温度变化")

plt.title("我是标题") # 修改标题

# 增加网格显示,0.5表示透明度为50%
plt.grid(linestyle="--",alpha=0.5)


plt.show() # 展示图像
f. 同一图中同时绘制多条折线

只是数据多准备一份罢了,基本什么区别例外再添加上图例legend,可读性更好

import matplotlib.pyplot as plt
import random

plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签

x=range(60) # 定义x轴的数据
y_1=[random.uniform(15,18) for i in x] # 定义y轴的数据
y_2=[random.uniform(1,3) for i in x] # 定义y轴的数据

plt.figure(figsize=(20,8),dpi=80) # 设置画布大小与清晰度

plt.plot(x, y_1,label="上海") # 绘制图像
plt.plot(x, y_2,label="北京") # 绘制图像

plt.xticks(x[::5],["{}分钟".format(i) for i in x][::5]) # 第二个参数可以指定显示字符串,不过传入xticks的这两个参数长度要相等
plt.yticks(range(0,40,5)) # 自定义y轴刻度

plt.xlabel("时间变化") # 修改标签
plt.ylabel("温度变化")

plt.title("我是标题") # 修改标题

# 增加网格显示,0.5表示透明度为50%
plt.grid(linestyle="--",alpha=0.5)



plt.legend() #绘制图例

plt.show() # 展示图像
g. 同时绘制两个图
import matplotlib.pyplot as plt
import random

plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

# x,y轴的数据
x=range(60)
y_shanghai=[random.uniform(15,18) for i in x]
# 另一个城市
y_beijing=[random.uniform(1,3) for i in x]

'''
fig 表示的是要绘制的一个画布,
ax 表示的是在fig这个画布的对象上,具体要绘制的对象子图。
'''
fig, ax = plt.subplots(1,2,figsize=(20,8),dpi=80) # 把画布分成一行两列

ax[0].plot(x,y_shanghai,'b--',label='上海') 
ax[1].plot(x,y_beijing,'r',label='北京')

# 图例,必须在plot后面 简单显示图例
ax[0].legend()
ax[1].legend()
# 修改x y刻度
x_label=["11点{}分".format(i) for i in range(60)]
ax[0].set_xticks(x[::5],x_label[::5])
ax[0].set_yticks(range(0,40,5))

ax[1].set_xticks(x[::5],x_label[::5])
ax[1].set_yticks(range(0,40,5))
# 增加网格显示
ax[0].grid(linestyle="--",alpha=0.5)

ax[1].grid(linestyle="--",alpha=0.5)

# 添加描述信息
ax[0].set_xlabel('时间变化')
ax[0].set_ylabel('温度变化')
ax[0].set_title('上海城市11点到12点每分钟的温度变化状况1')

ax[1].set_xlabel('时间变化')
ax[1].set_ylabel('温度变化')
ax[1].set_title('北京城市11点到12点每分钟的温度变化状况2')
plt.show()
h. 绘制数学函数图像
import matplotlib.pyplot as plt
import numpy as np; 

x=np.linspace(-10,10,1000000)
y=x**2

plt.figure(figsize=(8,8),dpi=80)
plt.grid(linestyle='--',alpha=0.5)
plt.plot(x,x**2) 
plt.show()
i. 设置字体大小

在前面的例子中感觉显示的字体太小了,看的不舒服,现在来设置一下。通过plt.rcParams['font.size']=18来指定字体的大小

import matplotlib.pyplot as plt
import random

plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签
plt.rcParams['font.size']=18  # 设置字体大小
x=range(60) # 定义x轴的数据
y=[random.uniform(15,18) for i in x] # 定义y轴的数据

plt.figure(figsize=(20,8),dpi=80) # 设置画布大小与清晰度

plt.plot(x, y) # 绘制图像

plt.xticks(x[::5],["{}分钟".format(i) for i in x][::5]) # 第二个参数可以指定显示字符串,不过传入xticks的这两个参数长度要相等
plt.yticks(range(0,40,5)) # 自定义y轴刻度
plt.xlabel("时间变化") # 修改标签
plt.ylabel("温度变化")

plt.title("我是标题") # 修改标题

# 增加网格显示,0.5表示透明度为50%
plt.grid(linestyle="--",alpha=0.5)


plt.show() # 展示图像

1.2 散点图绘制

主要使用scatter方法来绘制散点图,参数如下:参数说明:

  • x,y:长度相同的数组,也就是我们即将绘制散点图的数据点,输入数据。

  • s:点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小。

  • c:点的颜色,默认蓝色 'b',也可以是个 RGB 或 RGBA 二维行数组。

  • marker:点的样式,默认小圆圈 'o'。

  • cmap:Colormap,默认 None,标量或者是一个 colormap 的名字,只有 c 是一个浮点数数组的时才使用。如果没有申明就是 image.cmap。

  • norm:Normalize,默认 None,数据亮度在 0-1 之间,只有 c 是一个浮点数的数组的时才使用。

  • vmin,vmax::亮度设置,在 norm 参数存在时会忽略。

  • alpha::透明度设置,0-1 之间,默认 None,即不透明。

  • linewidths::标记点的长度。

  • edgecolors::颜色或颜色序列,默认为 'face',可选值有 'face', 'none', None。

  • plotnonfinite::布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。

  • **kwargs::其他参数。

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.size'] = 18
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
sizes = np.array([20,50,100,200,500,1000,60,90])
plt.figure(figsize=(8,8),dpi=80)
plt.scatter(x,y,s=sizes) # 绘制散点图
plt.show()

# 注意:散点图的数据是一维矩阵 并非是列表数据类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值