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 设置饼图内外边界的属性,如边界线的粗细、颜色等
textprops 设置饼图中文本的属性,如字体大小、颜色等
frame 是否要显示饼图背后的图框,如果设置为True的话,需要同时控制图框x轴、y轴的范围和饼图的中心位置 bool

箱型图

  • 展示数据的分布

  • 图表作用:

    • 1.反映一组数据的分布特征,如:分布是否对称,是否存在离群点
    • 2.对多组数据的分布特征进行比较
    • 3.如果只有一个定量变量,很少用箱线图去看数据的分布,而是用直方图去观察。一般都要跟其余的定性变量做分组箱线图,可以起对比作用。(key)
  • 适合数据类型:

    • 针对连续型变量
  • 用法:

    • 只有一个变量、一组的数据(1个变量,0个定性变量),比如:学生的成绩情况
    • 只有一个变量、多组数据(1个变量,1个定性变量[班级]),比如:1、2、3班学生的成绩情况
    • 只有一个变量、多组数据(1个变量,多个定性变量[年级、班级]),比如:初一、初二、初三的1、2、3班学生的成绩情况
    • 多个变量同理,看Y轴数据大小才相近才采用此用法
  • 参数

属性 说明 类型
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 设置箱体的属性,如边框色,填充色等
labels 为箱线图添加标签,类似于图例的作用 list
filerprops 设置异常值的属性,如异常点的形状、大小、填充色等 dict
medianprops 设置中位数的属性,如线的类型、粗细等
meanprops 设置均值的属性,如点的大小、颜色等
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()

posted @ 2019-07-23 12:59  Rener  阅读(407)  评论(0编辑  收藏  举报