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官网:点这里
    python可视化工具之matplotlib(1)基本图表_第1张图片

图表样式及属性简介

  • 小栗子
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() 

python可视化工具之matplotlib(1)基本图表_第2张图片

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()

python可视化工具之matplotlib(1)基本图表_第3张图片

1.3、多条折线

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

python可视化工具之matplotlib(1)基本图表_第4张图片

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()

python可视化工具之matplotlib(1)基本图表_第5张图片

二、散点图 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()

python可视化工具之matplotlib(1)基本图表_第6张图片

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()

python可视化工具之matplotlib(1)基本图表_第7张图片

三、饼图 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()

python可视化工具之matplotlib(1)基本图表_第8张图片

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()

python可视化工具之matplotlib(1)基本图表_第9张图片

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()

python可视化工具之matplotlib(1)基本图表_第10张图片

四、条形图(柱状图) 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()

python可视化工具之matplotlib(1)基本图表_第11张图片

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()

python可视化工具之matplotlib(1)基本图表_第12张图片

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()

python可视化工具之matplotlib(1)基本图表_第13张图片

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()

python可视化工具之matplotlib(1)基本图表_第14张图片

五、直方图 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()

python可视化工具之matplotlib(1)基本图表_第15张图片

六、箱线图 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()

python可视化工具之matplotlib(1)基本图表_第16张图片

你可能感兴趣的:(python数据分析,python,数据挖掘,数据分析)