matplotlib的学习

Matplotlib的学习笔记

1.认识Matplotlib

1.1基本信息

image-20221027205435396

image-20221027205448732

2. 基本绘图

2.1 线

import matplotlib.pyplot as plt
a,b = plt.subplots(nrows=2,ncols=2)#a为面板,b成了二维数组访问形式
b[0,0].set(title='Upper Left')
b[0,1].set(title='Upper Right')
b[1,0].set(title='Lower Left')
b[1,1].set(title='Lower Right')
x = np.linspace(0, np.pi)
y_sin = np.sin(x)
y_cos = np.cos(x)
b[0,0].plot(x, y_sin,color='red',linewidth=2)
b[0,1].plot(x,y_cos,'go-.',markersize=12)
plt.show()                        #plot()函数画出一系列的点,并且用线将它们连接起来

2

2.2 散点图

只画点,但是不用线连接起来。

x = np.arange(100)
y = x**2
plt.scatter(x, y, color='black', marker='*')
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dh6XvcSj-1667060912339)(https://gitee.com/sansejindeyihan/images/raw/master/Figure_2.png)]

2.3 柱状图

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pylab import mpl
# 设置中文显示字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]#使中文显现出来,还可以使用rc()函数更改中文字体以及大小等
x = ['萝北{0}号'.format(i) for i in range(1,51)]
y =[i for i in range(50,100)]
z =[i for i in range(1,51)]
figx = {'figsize':[20,15],'facecolor':'pink'}
fig,ax =plt.subplots(nrows=2,ncols=2,**figx)#figsize改变窗口大小
colors = ['red','tan','black','blue']

#竖直条形图
ax[0,0].bar(z,y,color=colors,width=0.3)
ax[0,0].set(title='学生成绩名单')
ax[0,0].set(xlabel='姓名')
ax[0,0].set(ylabel='成绩')
ax[0,0].set_xticks(z[::5],x[::5])

#横向条形图
ax[0,1].barh(z,y,color='red',height=0.3)
ax[0,1].set(title='学生成绩名单')
ax[0,1].set(ylabel='姓名')
ax[0,1].set(xlabel='成绩')
ax[0,1].set_yticks(z[::5],x[::5])

#多层条形图(以四个人的成绩为例)
name = ['菜鸟徐','胡学姐','陈会长','蔡大佬']
grade1 = np.random.randint(70,90,size=4)
grade2 = np.random.randint(90,100,size=4)
grade3 = np.array(range(90,98,2))
grade4 = np.array(range(96,100))
t1 = list(range(len(name)))
t2 = [i + 0.2 for i in t1]
t3 = [i + 0.4 for i in t1]
t4 = [i + 0.2 for i in t3]
#设置图形大小
ax[1,0].bar(t2,grade2,color='tan',width=0.2,label='九月五号')
ax[1,0].bar(t3,grade3,color='red',width=0.2,label='九月六日')
ax[1,0].bar(t4,grade4,color='pink',width=0.2,label='九月七日')
ax[1,0].bar(t1,grade1,color='yellow',width=0.2,label='九月八日')
ax[1,0].set(title='学生成绩名单')
ax[1,0].set(ylabel='姓名')
ax[1,0].set(xlabel='成绩')
ax[1,0].set_xticks(t2,name)#更改x轴刻度
ax[1,0].legend()#设置图例

#直方图(以统计各个分数段的人的数量,频率等信息为例)
gradeall = np.random.randint(200,750,size=250)#np随机生成成绩数据
#计算组数。不能过大或过小,有时伊情况定
d = 50#祖距
num_bin = max(gradeall) - min(gradeall)
print(num_bin)
num_bins = (max(gradeall) - min(gradeall)) // d
#设置x轴刻度,出现对不齐的情况是因为(max(gradeall) - min(gradeall)) // d不是整数
ax[1,1].set_xticks(range(min(gradeall),max(gradeall)+d,d))
ax[1,1].hist(gradeall,num_bins,density=True)
#显示网格
ax[1,1].grid()
plt.show()

Figure_4

2.4 饼图

from pylab import mpl
#以四班男女比例为例
labels = 'boys', 'girls'
sizes = [1,7]
fig,(a,b)=plt.subplots(2)
#设置要突出的部分
c = [0,0.5]
a.pie(sizes,labels=labels,colors=['blue','red'])
b.pie(sizes,labels=labels,explode=c,colors=['blue','red'],autopct='%1.1f%%',  pctdistance=0.5)
b.axis('equal')
b.legend(labels=labels,loc='upper right')
plt.show()

Figure_77

2.5 热力图

热力图的优势在于“空间利用率高”,可以容纳较为庞大的数据。热力图不仅有助于发现数据间的关系、找出极值,也常用于刻画数据的整体样貌,方便在数据集之间进行比较(例如将每个运动员的历年成绩都浓缩成一张热力图,再进行比较)。
如果将某行或某列设置为时间变量,热力图也可用于展示数据随时间的变化。例如,用热力图来反映一个城市一年中的温度变化,气候的冷暖走向,一目了然。

import matplotlib.pyplot as plt
import numpy as np
from pylab import mpl
mpl.rcParams["font.sans-serif"] = ["SimHei"]
names = ['菜鸟徐','胡学姐','陈会长','蔡大佬']
pythonku = ['numpy','pandas', 'matplotlib', 'pyecharts','sklearn']

speed=np.random.randint(100,size=20).reshape(5,4)
#加上 x 轴和 y 轴的标签,并加上标题
plt.xticks(np.arange(len(names)), labels=names,
                     rotation=45, rotation_mode="anchor", ha="right")
plt.yticks(np.arange(len(pythonku)), labels=pythonku)
#利用双循环为每个色块显示出大小
for i in range(len(pythonku)):
    for j in range(len(names)):
        #text(a,b,c)函数在坐标上添加文本,基本参数a,b,c分别是x坐标,y坐标,所添加文本内容
        text = plt.text(j, i, speed[i, j], ha="center", va="center", color="w")
#将一个二维数组传入到 imshow 方法中便可以绘制一个热力图,每个色块的颜色代表数据的大小。
plt.imshow(speed)
#色块所对应的数值的大小
plt.tight_layout()
plt.show()

Figure_0

2.6 雷达图

雷达图可以形象地展示相同事物的多维指标,比如以下某位同学各个科目成绩相对情况

import numpy as np
import matplotlib.pyplot as plt
import matplotlib

matplotlib.rcParams['font.family'] = 'SimHei'  # 将字体设置为黑体'SimHei'
matplotlib.rcParams['font.sans-serif'] = ['SimHei']

labels = np.array(["语文", "数学", "英语", "化学", "物理", "生物", "信息"])
dataLenth = 7  # 数据长度
data = np.array([83, 61, 95, 67, 76, 88, 40])
angles = np.linspace(0, 2 * np.pi, dataLenth, endpoint=False)  # 根据数据长度平均分割圆周长

# 闭合
data = np.concatenate((data, [data[0]]))        #concatenate用于将矩阵合并,他将沿着已经存在的轴合并一个矩阵
angles = np.concatenate((angles, [angles[0]]))
labels = np.concatenate((labels, [labels[0]]))  # 对labels进行封闭

fig = plt.figure(facecolor="white")  # facecolor 设置框体的颜色
plt.subplot(111, polar=True)  # 将图分成1行1列,画出位置1的图;设置图形为极坐标图
plt.plot(angles, data, 'bo-', color='g', linewidth=2)
plt.fill(angles, data, facecolor='g', alpha=0.25)  # 填充两条线之间的色彩,alpha为透明度
plt.thetagrids(angles * 180 / np.pi, labels)  # 做标签
# plt.figtext(0.52,0.95,'雷达图',ha='center')   #添加雷达图标题
plt.grid(True)
plt.show()

Figure_1

2.7 保存图片

plt.savefig("./t1.png")#./表示保存到当前文件夹中,png表示类型且必须有这种类型

image-20221028012800580

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值