python可视化工具之matplotlib(1)基本图表

文章目录

    • 图表样式及属性简介
      • 1、线linestyle和点marker的样式
      • 2、标题 plt.title()
      • 3、轴标签 plt.xlabel() plt.ylabel()
      • 4、轴范围 (上限下限) plt.xlim() plt.ylim()
      • 5、轴刻度 plt.xticks() plt.yticks()
      • 6、图例 plt.legend()
      • 7、四个边框 ax.spines[ ].set_color()
      • 8、数据标签 plt.text()
      • 9、带箭头的显示文本 plt.annotate()
    • 一、折线图 plt.plot()
      • 1.1、参数讲解
      • 1.2、一条折线
      • 1.3、多条折线
      • 1.4、水平线与垂直线
    • 二、散点图 plt.scatter()
      • 2.1、参数
      • 2.2、散点图
      • 2.3、气泡图
    • 三、饼图 plt.pie()
      • 3.1、参数
      • 3.2、饼图
      • 3.3、改变饼图中的字体大小
      • 3.4、环形图
    • 四、条形图(柱状图) plt.bar()
      • 4.1、参数
      • 4.2、单条形图
      • 4.3、横向条形图 plt.barh()
      • 4.4、多标签条形图 — 左右分布图
      • 4.5、多标签条形图 — 叠堆图
    • 五、直方图 plt.hist()
    • 六、箱线图 plt.boxplot ()
  • Matplotlib是一个Python 2D绘图库,Matplotlib试图让简单的事情变得更简单,让无法实现的事情变得可能实现。 只需几行代码即可生成 图,直方图,条形图,散点图等。支持python、numpy、pandas基本数据结构,运营高效且有较丰富的图表库。可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法。能将数据进行可视化,更直观的呈现;使数据更加客观、更具说服力。
  • 本博客主要展示基本的常见图表制作及图表样式修改,图表:折线图、饼图、散点图、条形图、直方图、热力图、箱线图。
  • 下面这张图向我们展示了一张图表当中的所有可以设置的属性,以此美化图表。借着折线图的制作详细展示这些属性的修改。
  • matplotlib官网:👉点这里

图表样式及属性简介

  • 小栗子
import matplotlib.pyplot as plt   # 导包
import numpy as np 
# 解决图表中不显示文字和负号的问题
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']  
plt.rcParams['axes.unicode_minus'] = False

x = [1.3,2.5,3.7,5.7,8.9,9.5]
y = [2.5,3.5,4.5,6.8,7.9,9.9]
plt.figure(figsize=(10,4))  # 创建画布
# 折线图 简单看看 下面更详细
plt.plot(x, # x轴数据
        y,  # y轴数据 
        color='c',   # 线颜色
        linewidth=5, # 线宽度 
        linestyle='--', # 线样式 虚线
        marker='o',  # 点标记 
        markeredgecolor='red', # 点边缘颜色 点默认与线颜色一致
        markeredgewidth=1,     # 点边缘宽度
        markersize=10,         # 点大小
        label='我是图例'         # 图例 默认不显示 需与plt.legend()一起使用
           )
# plt.plot(x,y,linestyle='--',marker='o') 可简写成 plt.plot(x,y,‘--o’)         
plt.title('我是标题',fontsize=20,color='red',loc='left')  # 设置标题, fontsize字号20, color颜色红色, loc位置左
plt.xlabel('我是x轴',fontsize=15,color='blue',labelpad=-25,position=(1.05,0))            # 设置x轴标签
plt.ylabel('我是y轴',fontsize=15,color='blue',labelpad=10,position=(0,0.9))# 设置y轴标签
plt.xticks(x,[f'x_{i}' for i in range(len(x))],size=12)  # 设置x轴刻度显示值 plt.xticks(原x刻度,新x刻度) 维度需一致
plt.yticks(y,["%.2f" %i for i in y],size=11)             # 设置y轴刻度显示值 保留两位小数
plt.ylim([0,15])                                          # 设置y轴范围 ; x轴范围设置一样 plt.xlim([])     
plt.legend(loc='upper center')                            # 设置图例 显示位置

#设置上边和右边无边框  
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# 添加数据标签
for x,y in zip(x,y):
    plt.text(x-0.1,y+0.5,y)   # plt.text(x,y,text)  在(x,y)出显示text 

# 设置带有箭头的任意文本  
plt.annotate('我在学习python画图呢!',xytext = (6,4),xy = (9,10), arrowprops = dict(facecolor = 'blue', shrink = 0.1))    # plt.annotate(text,xytext,xy) 箭头由xytext指向xy 文本在xytext处显示
plt.scatter(9,10,s=100,c='m')  # 为了更清晰上面的效果 散点图画出一个点
plt.show() 

1、线linestyle和点marker的样式

线样式描述
‘-’实线样式
‘- -’短横线样式
‘-.’点划线样式
‘:’虚线样式
点样式描述点样式描述
‘1’下箭头标记‘.’点标记
‘2’上箭头标记‘o’圆标记
‘3’左箭头标记‘x’X 标记
‘4’右箭头标记‘^’正三角标记
‘s’正方形标记‘v’倒三角标记
‘p’五边形标记‘<’左三角标记
‘D’菱形标记‘>’右三角标记
‘+’加号标记‘_’水平线标记

2、标题 plt.title()

plt.title(label,       # 标题
		  loc='',      # 位置 {'center', 'left', 'right'}
		  fontsize='', # 字体大小 
		  color='',    # 字体颜色 
		  pad=         # 标题距离图表顶部的偏移量 以磅为单位 浮点数 
		  )

3、轴标签 plt.xlabel() plt.ylabel()

plt.xlabel(label,         # 轴标签
		   fontsize=15,   # 字体大小
		   color='blue',  # 字体颜色
		   labelpad=-25,  # 距离x轴的偏移量 负数向上移动 正数向下移动
		   position=(1.05,0))  # 标签位置 (x,0) x 将整个轴当作1, x在1附近选取就行

4、轴范围 (上限下限) plt.xlim() plt.ylim()

plt.ylim(y_min,y_max) # 轴刻度最小为y_min,最大为y_max   

5、轴刻度 plt.xticks() plt.yticks()

plt.xticks(ticks=None,    # 轴原始刻度
			labels=None,  # 轴刻度显示内容
			color='')     # 轴刻度颜色 

6、图例 plt.legend()

plt.plot(label)
plt.legend(loc='')  # 一般plt.plot(label) 有label时一起使用
loc位置描述
‘upper left’左上方
‘upper right’右上方
‘lower left’左下方
‘lower right’右下方
‘upper center’上正中心
‘lower center’下正中心
‘center left’左正中心
‘center right’右正中心
‘center’正中心
‘best’重叠部分最少的最佳位置

7、四个边框 ax.spines[ ].set_color()

ax = plt.gca()
ax.spines['loc'].set_color('color')
# loc : left right top bottom 
# color : 边框颜色 none是即为不显示边框

8、数据标签 plt.text()

plt.text(x,y,text,fontsize='',color='') 
# 在(x,y)处显示text,字号fontsize,字颜色color

9、带箭头的显示文本 plt.annotate()

plt.annotate(text,        #显示文本
			xytext=(),    # 文本所处位置
			xy=(),        # 文本的箭头指向哪里
			fontsize=12,  # 字体大小
			color='red',  # 字体颜色
			arrowprops=dict{facecolor='',shrink=0.1})  # 箭头颜色 及 shrink越大箭头越缩小

一、折线图 plt.plot()

1.1、参数讲解

plt.plot(x, # x轴数据 
		y,  # y轴数据 可以传入数组格式或dataframe格式
		color='green', # 折线的颜色设置
		marker='o',    # 每个点的样式 
		linestyle='dashed', # 线的风格
		linewidth=2,        # 线的宽度
		markersize=12,      # 点的大小
		markeredgecolor='', # 点边缘颜色
		markeredgewidth=12, # 点边缘宽度 
		label='')           # 标签 
### 更多参数利用 help(plt.plot)  查看 

1.2、一条折线

x = np.arange(0,10)
y1 = x**2+5*x
y2 = 10*x+5 
plt.figure(figsize=(5,3))
plt.plot(x,y1)
plt.show()

1.3、多条折线

plt.figure(figsize=(5,3))
plt.plot(x,y1,'--.',label='y1')
plt.plot(x,y2,':*',label='y2')
plt.legend()
plt.show()

1.4、水平线与垂直线

  • 水平线:y是定值,x不定值,传参时x和y的维度必须一致
  • 垂直线:x是定值,y不定值,传参时x和y的维度必须一致
plt.plot([5 for i in range(0,10)],range(0,10),c='red')
plt.plot(range(1,10),[5 for i in range(11,20)],c='yellow')
plt.legend(['我是垂直线','我是水平线'])
plt.show()

二、散点图 plt.scatter()

2.1、参数

plt.scatter(x, y,  # x轴 y轴
			s=None, # 点的大小size
			c=None, # 点的颜色color 可以传入浮点数数组,与cmap连用 针对数字大小对点进行颜色 
			marker=None, # 点的样式
			cmap=None,   # 颜色序列 与c连用 
			alpha=None,  # 透明度 [0,1] [透明,不透明]
			linewidths=None, # 点边缘线的宽度
			edgecolors=None # 点边缘颜色
		) 

2.2、散点图

x = np.random.random(20)*10
y = np.random.random(20)*10
plt.scatter(x, y, s=80, marker='o', c='red',alpha=0.7, edgecolors='yellow')
plt.show()

2.3、气泡图

  • 气泡图就是将散点图的点根据数值大小变化点的大小(及颜色)
  • 参数cmap取值可以参考: 这里
x = np.random.random(20)*10
y = np.random.random(20)*10
s = np.arange(100,400,20)
plt.scatter(x, y, s=s,c=y, marker='o', cmap='plasma',alpha=0.7)
plt.show()

三、饼图 plt.pie()

3.1、参数

pie(x,                  # 数据 
	explode=None,       # 各部分突出程度
	labels=None,        # 标签 
	colors=None,        # 颜色
	autopct=None,       # 百分比 显示小数位数  %.2f只显示小数  %.2f%%小数加百分号
	pctdistance=0.6,    # 百分比标签与圆心距离 
	shadow=False,       # 阴影
	labeldistance=1.1,  # 标签距离
	radius=None,        # 半径
	counterclock=True,  # 指定饼图顺时针还是逆时针 True扇形面积由小到到是顺时针显示;False扇形面积由小到大是逆时针显示
	)

3.2、饼图

a = {'shop1':100,'shop2':200,'shop3':300,'shop4':400,'shop5':500,'shop6':600}
plt.pie(a.values(),  
        radius=1.4,
        labels=a.keys(),
        labeldistance=1.06,
        autopct="%.2f%%",
        pctdistance=0.7,
        colors=['Indigo','BlueViolet','MediumPurple','MediumSlateBlue','SlateBlue','DarkSlateBlue'],
        counterclock=False,
        explode=[0,0,0,0.14,0,0.1] 
       )
plt.show()

3.3、改变饼图中的字体大小

plt.figure(figsize=(4,5))
a = {'shop1':100,'shop2':200,'shop3':300,'shop4':400,'shop5':500,'shop6':600}
patches,l_text,p_text=plt.pie(a.values(),
                            radius=1.4,
                            labels=a.keys(),
                            labeldistance=1.06,
                            autopct="%.2f%%",
                            pctdistance=0.7,
                            colors=['Indigo','BlueViolet','MediumPurple','MediumSlateBlue','SlateBlue','DarkSlateBlue'],
                            counterclock=True,
                            explode=[0,0,0,0.14,0,0.1]
                           )
#改变文本的大小 # l_text标签  p_text百分比 
for t in l_text: 
    t.set_size(15)
for t in p_text:
    t.set_size(12)
    
# plt.axis('equal') # 设置x,y轴刻度一致
plt.show()

3.4、环形图

plt.figure(figsize=(4,5))
a = {'shop1':100,'shop2':200,'shop3':300,'shop4':400,'shop5':500,'shop6':600}
plt.pie(a.values(),
        radius=1.4,
        labels=a.keys(),
        labeldistance=1.06,
        autopct="%.2f%%",
        pctdistance=0.7,
        colors=['Indigo','BlueViolet','MediumPurple','MediumSlateBlue','SlateBlue','DarkSlateBlue'],
        counterclock=True
        )
plt.pie([1],radius=0.8,colors='w')
plt.show()

四、条形图(柱状图) plt.bar()

4.1、参数

plt.bar(x, 			 #x轴 
 		height, 	 # y轴 高度
 		width=0.8, 	 # 柱子宽度
 		bottom=None, # 叠堆图时需要 		
 		color,       # 颜色
 		edgecolor,   # 边缘颜色
 		linewidth,   # 边缘线宽度
 		tick_label,  # 刻度标签
 		xerr, yerr,  # 水平垂直误差线
 		ecolor,		 # 误差线颜色
 		orientation,  # 柱子是垂直的(柱状图)还是水平的(条形图) {'vertical','horizontal'}

4.2、单条形图

shop1 = [100,200,300,450,500]
date = ['06-14','06-15','06-16','06-17','06-18']
plt.figure(figsize=(8,3))
plt.bar(date,shop1)
plt.show()

4.3、横向条形图 plt.barh()

shop1 = [100,200,300,450,500]
date = ['06-14','06-15','06-16','06-17','06-18']
plt.figure(figsize=(8,3))
plt.barh(date,shop1)
plt.show()

4.4、多标签条形图 — 左右分布图

shop1 = [100,200,300,450,500]
shop2 = [70,178,245,356,467]
date = ['06-14','06-15','06-16','06-17','06-18']

plt.figure(figsize=(8,4))
# 这里的x设置是为了让x轴刻度线在柱状图正中间
plt.bar(np.arange(5)-0.15,shop1,width=0.3,color='red')
plt.bar(np.arange(5)+0.15,shop2,width=0.3,color='skyblue')
plt.xticks(np.arange(5),date)             # x轴刻度设置
plt.legend(['shop1','shop2'],loc='best')  # 图例
plt.ylim([0,550])
# 设置数据标签
for i,j in enumerate(shop1):
    plt.text(i-0.25,j+10,j)
for i,j in enumerate(shop2):
    plt.text(i+0.1,j+10,j)    
plt.show()

4.5、多标签条形图 — 叠堆图

shop1 = [100,200,300,450,500]
shop2 = [70,178,245,356,467]
shop_sum = np.array(shop1)+np.array(shop2) 
date = ['06-14','06-15','06-16','06-17','06-18']

plt.figure(figsize=(8,4))
plt.bar(date,shop1,color='red')
plt.bar(date,shop2,bottom=shop1,color='skyblue')
plt.legend(['shop1','shop2'],loc='best')
for i,j in enumerate(shop1):
    plt.text(i,j-60,j)
for i,j in enumerate(shop_sum):
    plt.text(i,j-60,shop2[i])       
plt.show()

五、直方图 plt.hist()

  • 用来计算频次 或 频率
hist(x, 						# 数据
	bins=None,                  # 箱数 区间数
	range=None,                 # 统计范围
	density=None,               # 归一化 频次/总观察数量*箱子宽度 
	histtype='bar',             # 直方图样式 {'bar', 'barstacked', 'step',  'stepfilled'}  最好不要和width一起用
	align='mid',                # x轴刻度线左右边界值显示位置 {'left', 'mid', 'right'}
	orientation='vertical',     # 直方图显示方向 {'vertical','horizontal'} (垂直 水平) 水平的时候 不要用width了 
	color=None,                 # 颜色
	label=None                  # 图例 与plt.legend()一起用
	 )
np.random.seed(0)
x =  np.random.randn(500)*10
plt.figure(figsize=(8,4))
plt.hist(x,bins=20,width=2,align='right',color='red',label='直方图')
plt.legend()
plt.show()

六、箱线图 plt.boxplot ()

boxplot(x,         # 数据 
	notch=None,    # 中位数处凹凸显示置信区间
	vert=None,     # 垂直还是水平显示 
	positions=None,# 位置 若含有多个盒子, 可以指定在x轴上的显示顺序  
	widths=None,   # 盒子宽度 position[1,2,3…] 一一对应 
	labels=None,   # x轴刻度标签
	showbox = True,# 是否显示盒子边界 
	showmeans =False, # 是否显示平均值,绿色小三角
	sym='bs'        # 盒子轮廓外的点的颜色 
	)
from sklearn.datasets import load_iris
x = load_iris().data
y = load_iris().target
feature = load_iris().feature_names  # ['sepal length (cm)','sepal width (cm)','petal length (cm)','petal width (cm)'] 对应position[1,2,3,4]
target = load_iris().target_names
plt.figure(figsize=(6,3))
plt.boxplot(x,labels=feature,positions=[4,2,3,1],widths=[0.2,0.3,0.4,0.5],showbox=True,showmeans =True,sym='bs')
plt.show()

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年4月6日
下一篇 2023年4月6日

相关推荐