Matplotlib

样式美化

style

  • 全部样式
    • 语法:print(plt.style.available)
  • 使用样式
    语法:plt.style.use('ggplot')

画图

建立画布

plt.figure(figsize=(10, 6.5))
figsize 设置画布大小

设置标题

- title:图形标题
- 用法:plt.title('regression result comparison')
    - title(label, fontdict=None, loc='center', pad=None, **kwargs)
        - label : 字符串,标题名
        - fontdict:标题文本外观(字典)
        {'famlily':['fantasy', 'Tahoma', 'monospace', 'Times New Roman']
         'color': 颜色
         'fontsize': 数字,字体大小
         'fontweight' : ['light', 'normal', 'medium', 'semibold', 'bold', 'heavy', 'black'] 字体粗细
         'verticalalignment': ['center' , 'top' , 'bottom' ,'baseline'] 设置水平对齐方式
         'horizontalalignment': [left,right,center]}垂直对齐方式
         'rotation':vertical,horizontal 也能够为数字,旋转角度
         'alpha’:透明度,参数值0至1之间
         'backgroundcolor':标题背景颜色
         'bbox':给标题增长外框 ,经常使用参数以下:
             boxstyle方框外形
             facecolor(简写fc)背景颜色
             edgecolor(简写ec)边框线条颜色
             edgewidth边框线条大小
例子:
plt.title('Interesting Graph',fontsize='large',fontweight='bold') 设置字体大小与格式
plt.title('Interesting Graph',color='blue') 设置字体颜色
plt.title('Interesting Graph',loc ='left') 设置字体位置
plt.title('Interesting Graph',verticalalignment='bottom') 设置垂直对齐方式
plt.title('Interesting Graph',rotation=45) 设置字体旋转角度
plt.title('Interesting',bbox=dict(facecolor='g', edgecolor='blue', alpha=0.65 )) 标题

图例

  • legend
loc
'best'         : 0, (only implemented for axes legends)(自适应方式)
'upper right'  : 1,
'upper left'   : 2,
'lower left'   : 3,
'lower right'  : 4,
'right'        : 5,
'center left'  : 6,
'center right' : 7,
'lower center' : 8,
'upper center' : 9,
'center'       : 10,
  • 批量增长图例
plt.legend([s1,s2],[label1,label2],loc=0)
s1,s2为不一样图形对象,例如线图,散点图

x轴标题,y轴标题

  • xlabel,ylabel
  • 用法同title

刻度线标签

  • xtickets,ytickets
  • 用法
plt.xtickets(np.arange(5), ('a','b','c','d','e'))

轴范围

  • xlim,ylim
  • 用法
plt.xlim((1,10))

增长文字到图形

  • text
  • 用法
plt.text(x,t,str)
x,y 为要添加文字的坐标

color

折线图

- 参数:
    - s:大小
    - edgecolors:边框颜色
    - c:内置颜色
    - markevery:样式maker的个数
    - linestyle:线样式
    - maker:样式
   
================    ===============================
    character           description
    ================    ===============================
    ``'-'``             solid line style
    ``'--'``            dashed line style
    ``'-.'``            dash-dot line style
    ``':'``             dotted line style
    ``'.'``             point marker
    ``','``             pixel marker
    ``'o'``             circle marker
    ``'v'``             triangle_down marker
    ``'^'``             triangle_up marker
    ``'<'``             triangle_left marker
    ``'>'``             triangle_right marker
    ``'1'``             tri_down marker
    ``'2'``             tri_up marker
    ``'3'``             tri_left marker
    ``'4'``             tri_right marker
    ``'s'``             square marker
    ``'p'``             pentagon marker
    ``'*'``             star marker
    ``'h'``             hexagon1 marker
    ``'H'``             hexagon2 marker
    ``'+'``             plus marker
    ``'x'``             x marker
    ``'D'``             diamond marker
    ``'d'``             thin_diamond marker
    ``'|'``             vline marker
    ``'_'``             hline marker
    ================    ===============================
画出原始数据y的分布,其中画图所需的x值域
使用自变量集X的shape获得一个自增数字列表

plt.plot(np.arange(X.shape[0]), y, color='k', label='true y')

柱状图

matplotlib.pyplot.bar(left, height, alpha=1, width=0.8, color=, edgecolor=, label=, lw=3)

1. left:x轴的位置序列,通常采用range函数产生一个序列,可是有时候能够是字符串
2. height:y轴的数值序列,也就是柱形图的高度,通常就是咱们须要展现的数据;
3. alpha:透明度,值越小越透明
4. width:为柱形图的宽度,通常这是为0.8便可;
5. color或facecolor:柱形图填充的颜色;
6. edgecolor:图形边缘颜色
7. label:解释每一个图像表明的含义,这个参数是为legend()函数作铺垫的,表示该次bar的标签,其中legend()函数loc参数以下:
8. bottom:列表,在此基础上叠加柱状图
9. hatch:填充形状{'/', '', '|', '-', '+', 'x', 'o', 'O', '.', '*'}
ghj =[5, 10 ,15, 20, 25]
it =[ 1, 2, 3, 4, 5]
plt.barh(ghj, it) 
横着的柱状图

散点图

scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, 
    alpha=None, linewidths=None, verts=None, edgecolors=None, hold=None, data=None, **kwargs)
  • x/y :数据
  • s :标记大小
    • 数值标量 : 以相同的大小绘制全部标记。
    • 行或列向量 : 使每一个标记具备不一样的大小。x、y 和 sz 中的相应元素肯定每一个标记的位置和面积。sz 的长度必须等于 x 和 y 的长度。
    • [] : 使用 36 平方磅的默认面积。
  • c:标记颜色
    • RGB 三元数或颜色名称 - 使用相同的颜色绘制全部标记。
    • 由 RGB 三元数组成的三列矩阵 - 对每一个标记使用不一样的颜色。矩阵的每行为对应标记指定一种 RGB 三元数颜色。行数必须等于 x 和 y 的长度。
    • 向量 - 对每一个标记使用不一样的颜色,并以线性方式将 c 中的值映射到当前颜色图中的颜色。c 的长度必须等于 x 和 y 的长度。要更改坐标区的颜色图,请使用 colormap 函数。
选项 说明 对应的 RGB 三元数
'red' 或 'r' 红色 [1,0,0]
'green' 或 'g' 绿色 [0,1,0]
'blue' 或 'b' 蓝色 [0,0,1]
'yellow' 或 'y' 黄色 [1,1,0]
'magenta' 或 'm' 品红色 [1,0,1]
'cyan' 或 'c' 青蓝色 [0,1,1]
'white' 或 'w' 白色 [1,1,1]
'black' 或 'k' 黑色 [0,0,0]
  • edgecolors:轮廓颜色
  • linewidths:线宽
  • marker:标记样式

饼图

属性 说明 类型
x 数据 list
labels 标签 list
colors 指定饼图的填充色 list
autopct 数据标签 %0.1%% 保留一位小数
explode 突出的部分 list
shadow 是否显示阴影 bool
pctdistance 数据标签的距离圆心位置 0~1
labeldistance 设置各扇形标签(图例)与圆心的距离 0~1
startangle 开始绘图的角度 float
radius 半径长 默认是1
counterclock 是否让饼图按逆时针顺序呈现
wedgeprops 设置饼图内外边界的属性,如边界线的粗细、颜色等 {'linewidth': 1.5, 'edgecolor':'black'}
textprops 设置饼图中文本的属性,如字体大小、颜色等 {'fontsize':12, 'color':'k'}
frame 是否要显示饼图背后的图框,若是设置为True的话,须要同时控制图框x轴、y轴的范围和饼图的中心位置 bool

箱型图

  • 展现数据的分布
    数组

  • 图表做用:
    • 1.反映一组数据的分布特征,如:分布是否对称,是否存在离群点
    • 2.对多组数据的分布特征进行比较
    • 3.若是只有一个定量变量,不多用箱线图去看数据的分布,而是用直方图去观察。通常都要跟其他的定性变量作分组箱线图,能够起对比做用。(key)
  • 适合数据类型:
    • 针对连续型变量
  • 用法:
    • 只有一个变量、一组的数据(1个变量,0个定性变量),好比:学生的成绩状况
    • 只有一个变量、多组数据(1个变量,1个定性变量[班级]),好比:一、二、3班学生的成绩状况
    • 只有一个变量、多组数据(1个变量,多个定性变量[年级、班级]),好比:初1、初2、初三的一、二、3班学生的成绩状况
    • 多个变量同理,看Y轴数据大小才相近才采用此用法
  • 参数app

属性 说明 类型
x 指定要绘制箱线图的数据 list
notch 是不是凹口的形式展示箱线图,默认非凹口 bool
sym 指定异常点的形状,默认为o号显示 +*.
vert 是否须要将箱线图垂直摆放,默认垂直摆放 bool
whis 指定上下须与上下四分位的距离,默认为1.5倍的四分位差 float
positions 指定箱线图的位置,从左至右0,1,2递增 list
widths 指定箱线图的宽度,默认为0.5 float
patch_artist 是否填充箱体的颜色 str
meanline 是否用线的形式表示均值,默认用点来表示 bool
showmeans 是否显示均值,默认不显示 bool
showcaps 是否显示箱线图顶端和末端的两条线,默认显示 bool
showbox 是否显示箱线图的箱体,默认显示 bool
showfliers 是否显示异常值,默认显示 bool
boxprops 设置箱体的属性,如边框色,填充色等 {'color': 'b',"facecolor":"r"}
labels 为箱线图添加标签,相似于图例的做用 list
filerprops 设置异常值的属性,如异常点的形状、大小、填充色等 dict
medianprops 设置中位数的属性,如线的类型、粗细等 {"linestyle":"--","color":"#FBFE00"}
meanprops 设置均值的属性,如点的大小、颜色等 {"marker":"D","markerfacecolor":"white"}
capprops 设置箱线图顶端和末端线条的属性,如颜色、粗细等 dict
whiskerprops 设置须的属性,如颜色、粗细、线的类型等 dict

注释

  • plt.annotate()
  • 参数
    • s: 为注释文本内容
    • xy: 为被注释的坐标点
    • xytext:为注释文字的坐标位置
    • xycoords: 参数以下:
    • color:b’, ‘g’, ‘r’, ‘c’, ‘m’, ‘y’, ‘k’, ‘w
    • weight:ultralight’, ‘light’, ‘normal’, ‘regular’, ‘book’, ‘medium’, ‘roman’, ‘semibold’, ‘demibold’, ‘demi’, ‘bold’, ‘heavy’, ‘extra bold’, ‘black’
    • arrowprops
      • width:箭头的宽度(以点为单位)
      • headwidth:箭头底部以点为单位的宽度
      • headlength:箭头的长度(以点为单位)
      • shrink:总长度的一部分,从两端“收缩”
      • facecolor:箭头颜色
    • bbox给标题增长外框 ,经常使用参数以下:
      • boxstyle:方框外形
      • facecolor:(简写fc)背景颜色
      • edgecolor:(简写ec)边框线条颜色
      • edgewidth:边框线条大小

画布分块

  • 语法:plt.subplot(n, m, p)
    • 第一个数字n,表明画布分红n行
    • 第二个数字m,表明画布分红m列
    • 第三个数字p,从左到右数,从上到下,第p张图

plt.subplots()

figsize定义画布尺寸
fig, axes = plt.subplots(1,2,figsize=(10,4))
for ax in axes:
    ax.plot(x, y, 'r')
    ax.set_xlabel('x')
    ax.set_ylabel('y')
    ax.set_title('title')
fig.tight_layout() #会自动调整子图参数,使之填充整个图像区域

遇到中文乱码问题

  • 找到matplotlib的配置文件位置
import matplotlib 
print(matplotlib.matplotlib_fname())
#我这里的位置是C:\Python27\lib\site-packages\matplotlib\mpl-data\matplotlibrc
  • 打开matplotlibrc文件进行编辑,找到#font.family : sans-serif更改成: font.family : SimHei
  • -号会显示出错的解决方法为: 在配置文件里找到#axes.unicode_minus : True更改成:axes.unicode_minus : False
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
黑体 SimHei
微软雅黑 Microsoft YaHei
微软正黑体 Microsoft JhengHei
新宋体 NSimSun
新细明体 PMingLiU
细明体 MingLiU
标楷体 DFKai-SB
仿宋 FangSong
楷体 KaiTi
仿宋_GB2312 FangSong_GB2312
楷体 _GB2312 KaiTi_GB2312

示例

  • 实例 1
import pandas as pd
import numpy as np
import matplotlib as mpl
mpl.rcParams['font.sans-serif']=['SimHei']
 
import matplotlib.pyplot as plt
y = range(1,17)
 
plt.bar(np.arange(16), y, alpha=0.5, width=0.3, color='yellow', edgecolor='red', label='The First Bar', lw=3)
plt.bar(np.arange(16)+0.4, y, alpha=0.2, width=0.3, color='green', edgecolor='blue', label='The Second Bar', lw=3)
plt.legend(loc='upper left')
plt.show()

  • 实例2
import matplotlib.pyplot as plt
import numpy as np

x = np.array([i for i in range(8)])
fig, axes = plt.subplots(1, 2, figsize=(10,4))
# 内嵌图
x = np.array([i for i in range(8)])
ax2 = fig.add_axes([0.1, 0.2, 0.1, 0.3]) # inset axes
ax2.plot(x,x**2,'r-.',x,np.exp(x),'g*-')
# 图1
axes[0].plot(x,x**2,'r-.',label="y = x**2")
axes[0].plot(x,np.exp(x),'g*-',label="y = np.exp(x)")
axes[0].set_title("Normal scale")
axes[0].legend(loc=2) # 标签
# 图2
x = np.array([i for i in range(100)])
axes[1].plot(x,x**2,'r-.',label="y = x**2")
axes[1].plot(x,np.exp(x),'g*-',label="y = np.exp(x)")
axes[1].legend(loc=2)
axes[1].set_yscale("log") # 设置纵坐标值域
axes[1].set_title("Logarithmic scale (y)")
#自动调整子图参数,使之填充整个图像区域
fig.tight_layout()
plt.show()

fig.savefig("filename.png")

  • 实例3
from numpy import *

x = np.array([i for i in range(10)])
xx = linspace(0,3, 100)
n = np.array([0,1,2,3,4,5])
fig, axes = plt.subplots(1, 4, figsize=(12,3))
# 散点图
axes[0].scatter(xx, xx + 0.25*np.random.randn(len(xx)))
axes[0].set_title("scatter")

axes[1].step(n, n**2, lw=2)
axes[1].set_title("step")
# 柱状图
axes[2].bar(n, n**2, align="center", width=0.5, alpha=0.5)
axes[2].set_title("bar")
# 填充,两图面积差
axes[3].fill_between(x, x**2, x**3, color="green", alpha=0.5)
axes[3].set_title("fill_between")
fig.tight_layout()
plt.show()
fig.savefig("fil.png")

  • 实例4
plt.rcParams['font.sans-serif']=['FangSong_GB2312'] #用来正常显示中文标签
colors = ['red','yellowgreen','lightskyblue']
male = 70
female = 20
other = 10
total = 100
labels = ['男性', '女性', '未填']
sizes = [male, female, other]
colors = ['cornflowerblue', 'orange', 'limegreen']
explode = (0, 0.1, 0)

fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, colors=colors,
        autopct='%1.1f%%', shadow=False, startangle=90,
        textprops={'fontsize': 12, 'color': 'k'},
        labeldistance = 1
        )
ax1.axis('equal')
plt.legend(loc='upper right')

plt.show()

相关文章
相关标签/搜索