plt.scatter(x,y,
s, # 点大小
c, # 点颜色
linewidth, # 线宽
marker # 点的形状
)
- import numpy as np
- import matplotlib.pyplot as plt
-
- x = np.arange(0, 2.0*np.pi, 0.1) #x轴数据
- y = np.sin(x) #y轴数据
- plt.scatter(x, #x轴坐标
- y, #y轴坐标
- s= np.abs(y)*50 , #散点大小 #散点大小与位置有关
- linewidths=1, #线宽
- c = 'r', #颜色
- marker='*') #散点符号
- plt.show()

matplotlib之pyplot模块之柱状图(bar():基础参数、外观参数)_plt.bar_mighty13的博客-CSDN博客
bar()的基础参数如下:
x:柱子在x轴上的坐标。浮点数或类数组结构。注意x可以为字符串数组!
height:柱子的高度,即y轴上的坐标。浮点数或类数组结构。
width:柱子的宽度。浮点数或类数组结构。默认值为0.8。
bottom:柱子的基准高度。浮点数或类数组结构。默认值为0。
align:柱子在x轴上的对齐方式。字符串,取值范围为{'center', 'edge'},默认为'center'。
'center':x位于柱子的中心位置。
'edge':x位于柱子的左侧。如果想让x位于柱子右侧,需要同时设置负width 以及align='edge'。
| MODELs | AUC | AUC(error误差) |
| M1 | 0.856267473 | 0.042804689 |
| M2 | 0.90337009 | 0.04444241 |
| M3 | 0.930575381 | 0.043041211 |
- import matplotlib.pyplot as plt
- import numpy as np
- import pandas as pd
-
- plt.rcParams['font.sans-serif'] = ['STKaiTi'] # 用来正常显示中文标签
- plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
-
- data1 = pd.read_excel('C:\\Users\\ASUS\\Desktop\\data.xlsx', sheet_name='MOUSE') # AUC
- data2 = pd.read_excel('C:\\Users\\ASUS\\Desktop\\data.xlsx', sheet_name='humanSTD') # AUC(误差)
-
- # 数据
- data = data1['AUC']
- errors = data2['AUC']
- labels = ['M1', 'M2', 'M3']
-
- # 创建一个颜色列表,包含每个柱子对应的颜色
- colors = ['skyblue', 'lightgreen', 'orange']
- # 计算柱子的宽度,使它们没有间隙
- bar_width = 1
- # 创建直方图,并设置颜色
- plt.figure(dpi=300)
- plt.title('不同模型的AUC值')
- # 绘制柱状图,并为每个数据系列设置legend,并带上误差棒
- for i in range(len(data)):
- plt.bar(labels[i], data[i], yerr=errors[i], capsize=5, width=bar_width, color=colors[i], label=f'M{i + 1}')
- # 添加数据标签
- for i in range(len(data)):
- plt.text(labels[i], data[i] + 0.05, f'{data[i]:.3f}', ha='center')
- # 添加标签和标题
- plt.xlabel('模型')
- plt.ylabel('AUC')
- # 添加图例
- plt.legend()
- # 绘制散点图
- for i in range(len(data)):
- plt.scatter(labels[i], data[i], c="black", zorder=2)
- # 取出上边框和右边框
- ax = plt.gca()
- ax.spines['right'].set_visible(False)
- ax.spines['top'].set_visible(False)
- # 显示图形
- plt.show()

要求:1.画出三个模型的AUC柱状图 2.每个柱子上要有数据标签 3.每个柱子上要有代表误差的误差条 4.要取出表格的上边框和右边框 5.在柱状图中间画一个点
如果需要加上legend图例,由于我们是直接用plt.bar()画出3个柱子,所以无法加上图例。所以我们需要借助for循环依次画上柱子并打上标签
# 绘制柱状图,并为每个数据系列设置标签
for i in range(len(data)):
plt.bar(labels[i], data[i], yerr=errors[i], capsize=5, width=bar_width, color=colors[i], label=f'M{i + 1}')
- import matplotlib.pyplot as plt
- import numpy as np
- import pandas as pd
-
- plt.rcParams['font.sans-serif'] = ['STKaiTi'] # 用来正常显示中文标签
- plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
-
- data1 = pd.read_excel('C:\\Users\\ASUS\\Desktop\\data.xlsx', sheet_name='MOUSE')
- data2 = pd.read_excel('C:\\Users\\ASUS\\Desktop\\data.xlsx', sheet_name='humanSTD')
-
- # 数据
- data = data1['AUC']
- errors = data2['AUC']
- labels = ['M1', 'M2', 'M3']
-
- # 创建一个颜色列表,包含每个柱子对应的颜色
- colors = ['skyblue', 'lightgreen', 'orange']
- # 计算柱子的宽度,使它们没有间隙
- bar_width = 1
- # 创建直方图,并设置颜色
- plt.figure(dpi=300)
- plt.title('不同模型的AUC值')
- # 绘制柱状图,并为每个数据系列设置标签
- for i in range(len(data)):
- plt.bar(labels[i], data[i], yerr=errors[i], capsize=5, width=bar_width, color=colors[i], label=f'M{i + 1}')
- # 添加数据标签
- for i in range(len(data)):
- plt.text(labels[i], data[i] + 0.05, f'{data[i]:.3f}', ha='center')
- # 添加标签和标题
- plt.xlabel('模型')
- plt.ylabel('AUC')
- # 添加图例
- plt.legend()
- # 绘制散点图
- for i in range(len(data)):
- plt.scatter(labels[i], data[i], c="black", zorder=2)
- # 取出上边框和右边框
- ax = plt.gca()
- ax.spines['right'].set_visible(False)
- ax.spines['top'].set_visible(False)
- # 显示图形
- plt.show()

注意plt.barh的参数,y是y轴标签,width是对应数值
- import matplotlib.pyplot as plt
- plt.rcParams ['font.sans-serif'] = ['STKaiTi']
-
- y = ['烘焙', '家电', '水产']
- num = [7.496, 61.0, 135.38]
- plt.figure(dpi=300)
- plt.barh(y =y,width = num,height=0.5,color ='dodgerblue')
- plt.subplots_adjust (left =0.2) #调整图表距左的空白
- plt.tick_params(bottom= True,left= False) #坐标轴刻度线是否显示
- plt.show ()

- import numpy as np
- import matplotlib.pyplot as plt
-
- x = np.linspace(0, 10, 11)
- y = 11-x
- #绘制柱状图
- plt.bar(x,y,
- color='#772277', #柱的颜色
- alpha=0.5, #透明度
- edgecolor='blue', #边框颜色,呈现描边效果
- linestyle='--', #边框样式为虚线
- linewidth=1, #边框线宽
- hatch='/') #内部使用斜线填充
-
- #为每个柱形添加文本标注
- for xx, yy in zip(x,y):
- plt.text(xx-0.2, yy+0.1, '%2d' % yy)
- #显示图形
- plt.show()

- import matplotlib.pyplot as plt
- plt.rcParams['font.sans-serif']=['STKaiTi'] #用来正常显示中文标签
- plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
-
- plt.figure(num = 1,figsize = (10,10),dpi=200) # 设置画布
- plt.title("饼图") # 设置画布标题
- plt.pie(x = [20,30,10,50], # 数据
- explode = (0,0.05,0,0) , # 指定饼图某些部分的突出显示,即呈现爆炸式
- labels = ['A','B','C','D'], # 添加标签
- colors = ['yellowgreen','gold','skyblue','coral'], #自定义颜色
- shadow = True, # 阴影
- autopct='%.2f%%', #设置百分比的格式,这里保留两位小数
- pctdistance=0.8, #设置百分比标签与圆心的距离
- labeldistance=0.5, #设置标签与圆心的距离
- startangle=180, #设置饼图的初始角度
- radius=0.8, #设置饼图的半径
- counterclock=False, #是否逆时针,这里设置为顺时针方向
- wedgeprops={'linewidth':1.5, 'edgecolor':'green'}, #设置饼图内外边界的属性值
- textprops={'fontsize':15, 'color':'black'} #设置文本标签的属性值
- )
- plt.show()

- import pandas as pd
- import numpy as np
- import matplotlib.pyplot as plt
- plt.rcParams['font.sans-serif']=['STKaiTi'] #用来正常显示中文标签
- plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
- plt.figure(num = 1,dpi=300)
-
- # 数据
- X = [1,2,3,4,5,6,7] # 序号
- y = [68,69,79,71,80,70,66] # 重量
-
- plt.title('折线图')
- # 画图
- plt.plot(X, y, color = 'b',linestyle ='--', marker='*',alpha=0.5, linewidth=1, label='训练')
- '''
- color:颜色;linestyle:线条种类(实线、虚线);marker:点的形状;
- alpha:透明度;linewidth:线宽; label:这条线的图例标签
- '''
- # 标注
- for i in range(len(X)):
- plt.text(X[i], y[i]+0.1, f'{y[i]:d}', ha='center', va='bottom', fontsize=7.5)
-
- # 后续修饰
- plt.xlabel('序号',fontsize = 15) #x轴的标签,即x代表的东西,在这里是序号
- plt.ylabel('重量',fontsize = 15)#y轴的标签,即x代表的东西,在这里是重量
- plt.xticks(fontsize = 12) # x轴刻度
- plt.yticks(fontsize = 12) # y轴刻度
- plt.legend() #显示图例,即上方的label
- plt.show()

- import numpy as np
- import matplotlib.pyplot as plt
- plt.rcParams['font.sans-serif'] = ['STKaiTi']
- plt.rcParams['axes.unicode_minus'] = False
-
- plt.title('sin-cos函数图像')
- t = np.arange(0.0, 2*np.pi, 0.01) #自变量取值范围
- s = np.sin(t) #计算正弦函数值
- c = np.cos(t) #计算余弦函数值
- plt.plot(t,s,label='正弦',color='red') #颜色
- plt.plot(t,c, label='余弦', color='blue')
- plt.xlabel('x-变量')
- plt.ylabel('y-正弦余弦函数值')
- plt.legend() #显示图例
- plt.show() #显示绘制的结果图像

其实就是利用中心画一个白色的饼图,使得外面的饼图呈现一种环形的样子
- import matplotlib.pyplot as plt
- plt.rcParams['font.sans-serif'] = ['STKaiTi']
- plt.rcParams['axes.unicode_minus']=False
-
- # 不同类型的占比
- plt.figure(num = 1,dpi = 300)
- plt.title('不同类型的占比')
- valTrain = [1, 2, 3, 4]
- valTest = [2, 3, 4, 5]
- labelTrain = ['A', 'B', 'C']
- labelTest = ['A', 'B', 'C']
- colors = ['coral','gold','skyblue']
- # 第一步:画出外部饼图。训练集
- plt.pie(valTrain ,
- # labels = labelTrain, # 标签,如果注释掉就不显示饼图文本标签
- colors = colors,
- autopct='%.2f%%', #设置百分比的格式,这里保留两位小数
- pctdistance=0.9, #设置百分比标签与圆心的距离
- labeldistance=0.8, #设置标签与圆心的距离
- startangle=90, #设置饼图的初始角度
- radius=1.2, #设置饼图的半径
- counterclock=False, #是否逆时针,这里设置为顺时针方向
- wedgeprops={'linewidth':1.5,'edgecolor': "w"}, #设置饼图内外边界的属性值
- textprops={'fontsize':8, 'color':'black'} #设置文本标签的属性值
- )
- plt.legend(labels = labelTrain,loc = 'center') # 显示图例,在这里显示图例,后面的图例就不显示了
-
- # 第二步:画出内部饼图。测试集
- plt.pie(valTest,
- #labels = labelTest, # 标签,如果注释掉就不显示饼图文本标签
- colors = colors,
- autopct='%.2f%%', #设置百分比的格式,这里保留两位小数
- pctdistance=0.9, #设置百分比标签与圆心的距离
- labeldistance=0.8, #设置标签与圆心的距离
- startangle=90, #设置饼图的初始角度
- radius=1, #设置饼图的半径
- counterclock=False, #是否逆时针,这里设置为顺时针方向
- wedgeprops={'linewidth':1.5,'edgecolor': "w"}, #设置饼图内外边界的属性值
- textprops={'fontsize':8, 'color':'black'} #设置文本标签的属性值
- )
-
- # 第三步:画出中间的白色饼图,使饼图呈现环形图的样式
- plt.pie([1], # 设置数据为[1]
- colors = ['w'], # 白色的饼图
- radius=0.8, #设置饼图的半径
- )
-
- plt.show()

子图存在不同的画法
这里使用plt.subplot(1,2,1)相当于划分了一个属于该子图的区域,
- import numpy as np
- import matplotlib.pyplot as plt
-
- plt.figure(dpi=300)
- x= np.linspace(0, 2*np.pi, 500) #创建自变量数组
- y1 = np.sin(x) #创建函数值数组
- y2 = np.cos(x)
- plt.subplot(1,2,1)
- plt.plot(x, y1, color='red')
- plt.subplot(1,2,2)
- plt.plot(x, y2, color='blue')

这种主打一个简单方便,但是不便于对每个子图进行不同设置
使用这个能很方面地分别对子图进行详细设置
- import numpy as np
- import matplotlib.pyplot as plt
-
- fig = plt.figure(dpi=300)
- fig.suptitle('子图')
-
- # 添加子图对象
- ax1 = fig.add_subplot(2,2,1,facecolor = 'pink') # 把绘图区域切分为两行两列,选择两行两列的第一个区域
- ax2 = fig.add_subplot(2,2,2,facecolor = 'y') #选择两行两列的第二个区域
- ax3 = fig.add_subplot(2,1,2,facecolor = 'skyblue') #把绘图区域切分为两行一列,选择两行一列的第二个区域
- # 调节子图与画布标题之间的间距为0.9
- # 调整子图之间的垂直间距为0.5
- plt.subplots_adjust(top=0.9,hspace=0.5)
-
- # 数据
- x= np.linspace(0, 2*np.pi, 500) #创建自变量数组
- y1 = np.sin(x) #创建函数值数组
- y2 = np.cos(x)
- y3 = np.tan(x)
- # 子图1
- ax1.set_title('正弦')
- ax1.plot(x, y1, color='red',label ='$sin(x)$') # 设置图例显示公式
- ax1.set_xlabel("x坐标")
- ax1.set_ylabel("y坐标")
- ax1.set_ylim(-1.2, 1.2)
- ax1.legend(fontsize=5,loc = 'upper left')
- # 子图2
- ax2.set_title('余弦')
- ax2.plot(x, y2, color='red',label ='$cos(x)$' )
- ax2.set_ylim(-1.2, 1.2)
- ax2.legend(fontsize=5,loc = 'upper left')
- # 子图3
- ax3.set_title('正切')
- ax3.plot(x, y3, color='red',label='$tan(x)$')
- ax3.set_ylim(-10, 10)
- ax3.legend(fontsize=5,loc = 'upper left')
-
- plt.show()

使用seaborn.histplot(data,kde = True),
kde = True:控制是否绘制核密度估计(Kernel Density Estimation,核密度估计)曲线,核密度估计是一种用于估计数据分布的平滑方法,它通过对数据进行平滑处理来生成一个连续的概率密度函数曲线。
- import seaborn as sns
- import matplotlib.pyplot as plt
- import numpy as np
-
-
- data = np.random.normal(loc=0, scale=1, size=1000)# 随机生成1000个服从正态分布的数据
- # 使用Seaborn绘制直方图
- sns.histplot(data, kde=True)
- plt.title("直方图")
- plt.xlabel("X轴")
- plt.show()

首先计算出每个属性之间的相关系数df.corr(),使用sns.heatmap(df.corr(),annot=True)画出相关系数热力图
- import pandas as pd
- import matplotlib.pyplot as plt
- import seaborn as sns
- plt.rcParams ['font.sans-serif'] = ['SimHei']
-
- # 数据
- data = {
- '消费频率': [1, 1, 1, 1, 2, 1, 1, 1, 1, 1],
- '最近消费时间间隔': [5.270231481, 41.35841435, 301.2756944, 39.5953125, 447.0455324, 710.4631829, 548.5095602, 3.467372685, 312.4875694, 283.4523727],
- '消费金额': [14.9, 51.87, 178.68, 65.4, 411.5, 48.86, 81.75, 70.4, 22.39, 45.37]
- }
-
- df = pd.DataFrame(data)
- corr = df.corr()
-
- # 热力图
- plt.figure(figsize=(10,10))
- sns.heatmap(corr, annot=True, # 在每个热力图单元格中显示数值。
- fmt='.3f', # 指定了显示数值的格式,保留3位小数
- cmap='Blues', # 指定了用于着色的颜色映射,这里使用了蓝色调色板
- xticklabels=['A','B','C'], yticklabels=['A','B','C'] # 用于指定x轴和y轴的标签
- )

原理是一样的
看不懂,了解一下,3D曲线就可以了
- import numpy as np
- import matplotlib.pyplot as plt
- plt.rcParams ['font.sans-serif'] = ['STKaiTi']
-
- fig = plt.figure()
- ax=plt.axes(projection='3d')
- theta = np.linspace(-4 * np.pi, 4 * np.pi, 200)
- z = np.linspace(-4, 4, 200)*0.4 #创建模拟数据
- r = z**3 + 1
- x = r * np.sin(theta)
- y = r * np.cos(theta)
- ax.plot(x,y,z,label='三维曲线')
- ax.legend() #显示图例
- plt.show() #显示绘制结果

- import numpy as np
- import matplotlib.pyplot as plt
- from mpl_toolkits.mplot3d import Axes3D # 使用Matplotlib的mpl_toolkits.mplot3d库来创建一个3D坐标轴对象
- # 生成数据
- x = np.linspace(0, 4, 1000)
- y = np.linspace(0, 4, 1000)
- x1, y1 = np.meshgrid(x, y)
- x2 = x1.flatten()
- y2 = y1.flatten()
- xy = np.vstack([x2, y2])
- zxy = lambda t: np.exp(t[0]) *t[1]
- z = zxy(xy)
-
- plt.figure(dpi=300)
- ax = plt.axes( projection='3d') # 创建3D坐标轴对象
- ax.plot_surface(x1, y1, z.reshape(x1.shape), cmap='viridis') # 绘制3D曲面图
-
- # 设置坐标轴标签
- ax.set_xlabel('X')
- ax.set_ylabel('Y')
- ax.set_zlabel('Z')
-
- ax.set_title('3D曲面图')
- plt.show()
关于meshgrid的用法可以看这个http://t.csdnimg.cn/OIby1

- # 绘制三维柱状图
- import numpy as np
- import matplotlib.pyplot as plt
- x = np.random.randint(0, 40, 10) #创建测试数据
- y = np.random.randint(0, 40, 10)
- z = 80*abs(np.sin(x+y))
- plt.figure(dpi = 300)
- ax = plt.subplot(projection='3d') #绘制三维图形
-
- ax.bar3d(x, #设置x轴数据
- y, #设置y轴数据
- np.zeros_like(z), #设置柱的z轴起始坐标为0
- dx=5, #x方向的宽度
- dy=5, #y方向的厚度
- dz=z, #z方向的高度
- color='red') #设置面片颜色为红色
- ax.set_xlabel('X')
- ax.set_ylabel('Y')
- ax.set_zlabel('Z')
-
- plt.show()
雷达图可以说几乎用不到,这里只是写一下
要注意收尾相接
- # 例7 绘制雷达图。
- import numpy as np
- import matplotlib.pyplot as plt
-
- labels = np.array(list('abcdefghij')) #设置标签
- data = np.array([11,4]*5) #创建模拟数据array([11, 4, 11, 4, 11, 4, 11, 4, 11, 4])
- dataLength = len(labels) #数据长度
-
- #angles数组把圆周等分为dataLength份
- angles = np.linspace(0, #数组第一个数据
- 2*np.pi, #数组最后一个数据
- dataLength, #数组中数据数量
- endpoint=False) #不包含终点
-
- #首尾相接,使得曲线闭合
- data = np.append(data, data[0])
- angles = np.append(angles, angles[0])
- labels = np.append(labels, labels[0])
-
- plt.polar(angles, #设置角度
- data, #设置各角度上的数据
- 'rv--', #设置颜色、线型和端点符号
- linewidth=2) #设置线宽
-
- #设置角度网格标签
- plt.thetagrids(angles*180/np.pi, #角度
- labels) #标签
- #设置填充色
- plt.fill(angles, #设置角度
- data, #设置各角度上的数据
- facecolor='r', #设置填充色
- alpha=0.6) #设置透明度
- plt.ylim(0,12) #设置坐标跨度
-
- plt.show() #显示绘图结果

总的来说,挺牛逼哄哄的,让我写写不出来。
- import numpy as np
- import matplotlib.pyplot as plt
- plt.rcParams ['font.sans-serif'] = ['STKaiTi']
- t = np.arange(0.0, 2*np.pi, 0.01)
- s = np.sin(t)
- c = np.cos(t)
- plt.figure(dpi=300)
- plt.plot(t, s, label='正弦')
- plt.plot(t, c, label='余弦')
- plt.title('sin-cos函数图像')
- plt.legend(title='Legend', #设置图例标题
- loc='lower left', #设置图例参考位置
- bbox_to_anchor=(0.43,0.75),#设置图例位置偏移量
- shadow=True, #显示阴影
- facecolor='yellowgreen', #设置图例背景色
- edgecolor='red', #设置图例边框颜色
- ncol=2, #显示为两列
- markerfirst=False) #设置图例文字在前,符号在后
- plt.show()
