样式美化
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 )) 标题
图例
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轴标题
刻度线标签
plt.xtickets(np.arange(5), ('a','b','c','d','e'))
轴范围
plt.xlim((1,10))
增长文字到图形
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 函数。
'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() #会自动调整子图参数,使之填充整个图像区域
遇到中文乱码问题
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 #用来正常显示负号
微软雅黑 |
Microsoft YaHei |
微软正黑体 |
Microsoft JhengHei |
新宋体 |
NSimSun |
新细明体 |
PMingLiU |
细明体 |
MingLiU |
标楷体 |
DFKai-SB |
仿宋 |
FangSong |
楷体 |
KaiTi |
仿宋_GB2312 |
FangSong_GB2312 |
楷体 _GB2312 |
KaiTi_GB2312 |
示例
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()

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

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

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