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

1552994-20190801192504246-563512143.png

折线图

- 参数:
    - 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

箱型图

  • 展示数据的分布
    1552994-20190801170316301-1860981498.png

  • 图表作用:
    • 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.5float
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
仿宋_GB2312FangSong_GB2312
楷体 _GB2312KaiTi_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()

1552994-20190723183329241-660852590.png

  • 实例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")

1552994-20190801144412749-1695281855.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")

1552994-20190801145620942-1859935834.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()

1552994-20190801165009464-1346558402.png

转载于:https://www.cnblogs.com/rener0424/p/11231146.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值