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()函数画出一系列的点,并且用线将它们连接起来
只画点,但是不用线连接起来。
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)]
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()
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()
热力图的优势在于“空间利用率高”,可以容纳较为庞大的数据。热力图不仅有助于发现数据间的关系、找出极值,也常用于刻画数据的整体样貌,方便在数据集之间进行比较(例如将每个运动员的历年成绩都浓缩成一张热力图,再进行比较)。
如果将某行或某列设置为时间变量,热力图也可用于展示数据随时间的变化。例如,用热力图来反映一个城市一年中的温度变化,气候的冷暖走向,一目了然。
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()
雷达图可以形象地展示相同事物的多维指标,比如以下某位同学各个科目成绩相对情况
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()
plt.savefig("./t1.png")#./表示保存到当前文件夹中,png表示类型且必须有这种类型