python - 数据分析之matplotlib绘图模块一览总表

Matplotlib 入门:https://deepinout.com/matplotlib/matplotlib-tutorials/matplotlib-easy-to-start.html
Matplotlib 教程:https://geek-docs.com/matplotlib/matplotlib-tutorial/matplotlib-tutorial.html
matplotlib官方手册:https://matplotlib.org/stable/api/pyplot_summary.html

plottable 绘制精美漂亮的表格:https://blog.csdn.net/m0_59596937/article/details/128857069
plottable: https://plottable.readthedocs.io/en/latest/
Seaborn详细操作之风格设置https://blog.51cto.com/u_15067223/3802729

matplotlib:是最流行的python底层绘图库,主要做数据可视化图表,模仿MATLAB构建。

  • 能将数据进行可视化,更直观的呈现。
  • 使数据更加客观、更具说服力。
  • 安装模块:pip install matplotlib

一、图形构成

Figure:是指整个图形,也就是一张画布,包括了所有的元素,如标题,轴线等;
Axes:绘制 2D 图像的实际区域,也称为轴域区,或者绘图区;
Axis:是指图形的水平轴和垂直轴,包括轴的长度、轴的标签和轴的刻度等;
Artist:在画布上看到的所有元素都属于 Artist 对象,比如文本对象(title、xlabel、ylabel)、Line2D 对象(用于绘制2D图像)等。
在这里插入图片描述
figure 可以理解为一整张画布,而axes是画布中的一块子图。

二、绘图流程

import matplotlib.pyplot as plt        	       # 导入绘图模块
from matplotlib import pyplot as plt           # 两种导入方法都可

在这里插入图片描述

直接用plt添加子图

先生成了一个画布figure,然后在这个画布上隐式的生成一个画图区域来进行画图。

fig=plt.figure(num=1,figsize=(4,4))
plt.subplot(111)
plt.plot([1,2,3,4],[1,2,3,4])
plt.show()

直接用ax添加子图

先生成一个画布figure,然后在此画布上,选定一个子区域画了一个子图axes。

fig=plt.figure(num=1,figsize=(4,4))
ax=fig.add_subplot(111)
ax.plot([1,2,3,4],[1,2,3,4])
plt.show()

三、绘图函数

1. 创建画布与创建子图

函数说明
plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class ‘matplotlib.figure.Figure’>, clear=False, **kwargs)创建一个空白画布,并设置其图片大小和分辨率等。【num当给一个数字时,相当于figure的编号(ID),当是字符串时作为figure的名称;figsize指定画布的大小,(宽度,高度),单位为英寸;dpi指定绘图对象的分辨率,即每英寸多少个像素,默认值为80;facecolor背景颜色;edgecolor边框颜色;frameon是否显示边框;】# plt.figure(num=‘panel’, figsize=(3,2),facecolor=‘gray’) 创建一个名为panel的figure,大小是3*2英寸,背景颜色时灰色
plt.subplot(nrows, ncols, index, **kwargs)当有一个空白画布时, 划分多个子区域进行绘图【将画布整个区域分为 nrows 行,ncols 列,index 参数将指示当前绘制在第几个区域。区域编号的顺序从上之下,从左至右。前一次的划分是不影响后一次的划分,比如前一次将figure划分为22,不影响下一次将figure划分为21,只需要将子图安置在划分后的空白区域即可。】# plt.subplot(2,1,2) 划分2行1列,第2个子区域。
matplotlib.gridspec.GridSpec(nrows, ncols, figure=None, left=None, bottom=None, right=None, top=None, wspace=None, hspace=None, width_ratios=None, height_ratios=None)用于指定放置子图的网格的几何形状。必须设置行数和列数,可选地完成子图布局参数的调整。【nrows是网格中的行数(整数)。ncols是网格中的列数(整数)。figure是用于绘制图形的可选参数。left, right, top, bottom是可选参数,用于将子图的范围定义为图形宽度或高度的一部分。wspase是可选的float参数,用于保留子图之间的宽度空间。hspace是可选的float参数,用于保留子图之间的高度空间。width_ratios是可选参数,代表列的宽度比率。height_ratios是可选参数,表示行的宽度比率。】# import matplotlib.gridspec as gridspec #导入模块 gs = gridspec.GridSpec(4, 4) # 指定四行四列 plt.subplot(gs[0, :]) # 第一行的全部列 plt.subplot(gs[1,:-1])#第二行前三列
plt.fill_between(x,y,y2=0,where=None,interpolate=False,step=None,*,data=None,**kwargs)曲线覆盖。【 x覆盖的区域,一个数组,定义水平轴上的点,直接复制为x表示整个x都覆盖。y覆盖的下限,数组或者标量。y2覆盖的上限,数组或者标量。facecolor覆盖区域的颜色。alpha覆盖区域的透明度[0,1],其值越大,表示越不透明。where如需排除某些垂直区域的填充,则定义该数组,布尔数组,这个定义意味着两个假值之间的一个孤立的真值将不进行填充,相邻的False值将导致不填充True值的两边。interpolate只有在使用了where参数同时两条曲线交叉时才有效,默认情况下被填充的区域将被放在x阵列的位置,定义一个被填充的多边形区域,与x相交的部分被裁剪,接受布尔值。step如填充需一个步骤函数,则使用该参数,接受’pre’、‘post’、'mid’三个值,用于指定步骤将发生的位置。pre代表区间(x[i-1],x[i])的值为y[i],x值向左移动;post代表区间(x[i],x[i+1])的值为y[i],x值向右移动;mid代表步骤发生在x位置的中间。】

先是通过gridspec.GridSpec()创建区域,参数5,5的意思就是每行五个,每列五个,最后就是一个5×5的画布,相比于add_subplot(),使用网格布局的话可以更加灵活的控制占用多少空间。

from matplotlib import gridspec
gs = gridspec.GridSpec(5,5)
fig1 = plt.figure()
ax1 = fig1.add_subplot(gs[0:2, 0:2])
ax2 = fig1.add_subplot(gs[3:5, 0:2])

2. 不同图表类型绘制

函数说明
plt.plot(x,y,ls,lw,lable,color)绘制直线、曲线图、标记点【x、y为相同长度的序列数据,ls为线型linestyle,lw为线宽linewidth,lable为标签文本内容,color为颜色,marker=“.”。】
plt. scatter(x, y, c, marker, label, color)绘制散点图【x、y为相同长度的序列,c为单个颜色字符或颜色序列,marker为标记的样式,默认的是’o’,label为标签文本内容,color为颜色】
plt. bar(x, height, width, bottom)绘制条形图【x 代表条形图的x坐标的标量序列。 align控制x是条形图的中心(默认)还是左边缘。height 代表条形图高度的标量或标量序列。width条形图的宽度,可选标量或数组,取值在0~1之间,默认为0.8。bottom 标量或类似数组,可有可无。条形图的Y坐标,默认为无。error_kw用于接收其他可用于显示误差线的关键字参数,eColor参数指定误差线的颜色,capsize参数指定误差线两头横线大的宽度。alpha控制彩色条形图的透明度,取值范围是0-1,0表示完全透明,随alpha的增加,对象逐渐清晰起来,到1时不透明。label为图表中的序列指定名称。】
plt. pie(x, explode, labels, autopct, shadow = False, startangle)绘制饼图
Plt. stem(x, y, linefmt, markerfmt, use_line_collection)绘制stem图
plt.boxplot()绘制箱形图
plt.barh()绘制横向条形图
plt.polar()绘制极坐标图
plt.psd()绘制功率谱密度图
plt.specgram()绘制谱图
plt.cohere()绘制相关性函数
plt.step()绘制步阶图
plt.hist(data, bins=40, facecolor=“blue”, edgecolor=“black”, alpha=0.7)绘制直方图(柱状图)。是对一个连续变量的概率分布的一种估计,是一种条形图。计算并绘制x的直方图。将数值的范围划分出来,将整个数值范围划分为一系列的区间,计算每个区间内有多少数值,分区通常被指定为一个变量的连续、不重叠的区间。data绘图数据bins直方图的长条形数目,整数或序列或’自动’,可选项默认为10。facecolor长条形的颜色edgecolor长条形边框的颜色alpha透明度range分列的下限和上限范围。density如果是True,返回元组的第一个元素将是归一化的计数,形成一个概率密度cumulative,如果是True将计算一个直方图,每个bin给出该bin的计数,加上所有bins的较小值。histtype要绘制的直方图的类型,默认是传统的条形直方图’bar’,如果给出多个数据,则条形图将并排排列;barstacked’条形直方图,其中多个数据被堆叠在彼此的上面;step’生成一个线图,默认情况下是不填充的;stepfilled’生成一个默认为填充的线图。】
plt.contour()绘制等值图
plt.vlines()绘制垂直图
plt.stem()绘制柴火图
plt.plot_date()绘制数据日期
plt.clabel()绘制轮廓图
plt.hist2d()绘制2D直方图
plt.quiverkey()绘制颤动图
plt.stackplot()绘制堆积面积图
plt.Violinplot()绘制小提琴图
plt.table(cellText=None, cellColours=None, cellLoc=’right’, colWidths=None,rowLabels=None, rowColours=None, rowLoc=’left’, colLabels=None, colColours=None, colLoc=’center’, loc=’bottom’, bbox=None, edges=’closed’, **kwargs)创建表挂在堆叠的条形图下面。cellText表格单元格文本,字符串中的换行符暂不支持,可能导致文本超出单元格边界,类型为二维字符串列表。cellColours表格单元格背景色,类型为二维颜色值列表。cellLoc表格单元格文本的对齐方式,取值范围为{‘left’, ‘center’, ‘right’},默认值为’right’。colWidths表格单元格宽度,类型为浮点数列表,默认每个单元格的宽度为{子图宽度/ncols}。rowLabels表格行表头文本,类型为字符串列表。rowColours表格行表头背景色,类型为颜色列表。rowLoc表格行表头文本的对齐方式,取值范围为{‘full’, 默认’left’, ‘right’}。colLabels表格列表头文本,类型为字符串列表。 colColours表格列表头背景色,类型为颜色列表。colLoc表格列表头文本的对齐方式,取值范围为{‘full’, 默认’left’, ‘right’}。loc单元格相对于子图的位置,字符串,取值范围为matplotlib.table.Table.codes={‘best’: 0, ‘bottom’: 17, ‘bottom left’: 12, ‘bottom right’: 13, ‘center’: 9, ‘center left’: 5, ‘center right’: 6, ‘left’: 15, ‘lower center’: 7, ‘lower left’: 3, ‘lower right’: 4, ‘right’: 14, ‘top’: 16, ‘top left’: 11, ‘top right’: 10, ‘upper center’: 8, ‘upper left’: 2, ‘upper right’: 1}。bbox绘制表格的边界框,Bbox对象,如果该参数为不None,将会覆盖 loc参数。edges单元格边线,该属性会影响各类单元格背景色,取值为 'BRTL’中字符之一或 {‘open’, ‘closed’, ‘horizontal’, ‘vertical’}。**kwargs:matplotlib.table.Table对象属性。】
plt.axvline(y=0, xmin=0, xmax=1, **kwargs)垂直线,轴线上添加竖线。
plt.axhline(x=0, ymin=0, ymax=1, **kwargs)水平线【x放置垂直线在数据坐标中的X位置。ymin竖线在y轴上的起始位置,它将取0到1之间的值,0是轴的底部,1是轴的顶部。ymax竖线在y轴上的结束位置,它将取0到1之间的值,0是轴的底部,1是轴的顶部。**kwargs:用于更改行属性的其他可选参数,如颜色线宽。】 # plt.axhline(1) 画出 y=1 这条水平线

比plt.table绘制更精致表格的模块,plottable可实现外框样式的更改。
安装:pip install plottable

另外一种绘制图表模块,网页显示。
安装:pip install plotly

3. 添加画布说明内容,外观设置

函数说明
plt.title(label, fontdict=None,loc= ‘ center ‘, pad=None,**kwargs)在当前图形中添加标题,可以指定标题的名称、位置、颜色、字体大小等参数。【label (str)指向所描述的可视化的实际标题文本字符串。fontdict (dict)使用字典控制文本的外观,如文本大小,文本对齐等。loc (str)指向标题的位置,接受’center’, ‘left’和’right’等字符串值。pad(float)指的是标题从轴的顶端到顶点的偏移量,单位为点,默认值为None。**kwargs指的是使用其他关键字参数作为文本属性,如颜色、fonstyle、行间距、背景色、旋转等。】#plt.title(“Linear graph”)#只有label参数在title()方法中被赋值为“Linear graph”,其他参数被赋值为它们的默认值。
plt.xlabel(string)在当前图形中添加x轴名称,可以指定位置、颜色、字体大小等参数。
plt.ylabel(string)在当前图形中添加y轴名称,可以指定位置、颜色、字体大小等参数。
plt.xlim(xmin,xmax)指定当前图形x轴的范围,只能确定一个数值区间,而无法使用字符串标识。
plt.ylim(ymin,ymax)指定当前图形y轴的范围,只能确定一个数值区间,而无法使用字符串标识。
plt.xticks()指定x轴刻度的数目与取值
plt.yticks()指定y轴刻度的数目与取值
plt.legend()指定当前图形的图例,可以指定图例的大小、位置、标签。handles需要传入你所画线条的实例对象。labels是图例的名称(能够覆盖在plt.plot( )中label参数值)。Loc属性用于指定图例的位置,Loc的默认值是Loc = ” best “(左上角),或’ upper left ‘, ‘ upper right ‘, ‘ lower left ‘, ‘ lower right ‘将图例放置在坐标轴/图形的相应角落。bbox_to_anchor=(x, y)用于指定图例的坐标,属性ncol表示图例拥有的列数,默认值是1。shadow[None或bool]是否在图例后面画一个阴影,默认值是None。markerscale与最初绘制的图例标记相比,[None或int或float]图例标记的相对大小,默认为None。numpoints[None或int]在为Line2D (line)创建图例条目时,图例中的标记点的数量,默认为None。fontsize图例的字体大小,如果数值是数值,则大小将是绝对字体大小,以点为单位。facecolor[None或“继承”或颜色]传奇的背景色。edgecolor[None或”继承”或颜色]图例的背景补丁边缘颜色。frameon=False删除图例的框。】# leg = plt.legend() 创建图例 # leg.get_frame().set_edgecolor(‘b’) 更改图例框边框的颜色 # leg.get_frame().set_linewidth(0.0) 只删除图例框的边框 # leg.get_frame().set_facecolor(‘none’) 图例背景变为空白即透明
plt.grid(b=None, which=‘major’, axis=‘both’, **kwargs)网格线样式设置【b表示是否显示网格线。如果这个参数为None,但后面有别的参数,说明想显示网格线,就会自动设置这个参数为True。which表示主刻度的网格线显示’major’,或次刻度的网格线显示‘minor’,或两者都显示 ‘both’。axis设置X轴的网格线显示‘x’,或Y轴的网格线显示‘y’,或两者都显示’both’ 。kwargs表示可以传递给函数Line2D的参数,主要修改线的属性,如使用color = ‘b’来设置线的颜色,alpha=0.9透明度,linestyle='-'线的形状。】# ax2.grid(which=‘minor’, axis=‘y’, linewidth=0.55, color=‘k’,alpha=0.3) # y坐标轴的网格使用次刻度
plot.tick_params(axis=‘both’, **kwargs)设置坐标轴刻度标签颜色【axis选择对哪个轴操作{‘x’, ‘y’, 默认‘both’}。reset 如果为True则在处理其他参数之前将所有参数设置为默认值, 默认值为False。which 选择对主or副坐标轴进行操作{‘major’, ‘minor’, ‘both’} 。direction/tickdir 刻度线的方向{‘in’, ‘out’, ‘inout’}。size/length刻度线的长度float。width刻度线的宽度float。color刻度线的颜色,可用16进制字符串表示’#EE6363’。pad刻度线与刻度值之间的距离float。labelsize刻度值字体大小float/str。labelcolor 刻度值颜色。colors 同时设置刻度线和刻度值的颜色。zorder 勾选和标记float。bottom, top, left, right是否显示刻度线bool,分别表示上下左右四边,True为显示。labelbottom, labeltop, labelleft, labelright 是否显示刻度值bool,分别表示上下左右四边,True为显示。labelrotation刻度值逆时针旋转给定的度数如20。gridOn是否添加网格线bool 。grid_alpha网格线透明度float。 grid_color网格线颜色。grid_linewidth网格线宽度float。 grid_linestyle 网格线型。】# plt.tick_params(which=‘minor’, axis=‘y’, left=False) 去掉y坐标轴的网格次刻度
plt.text(x, y, s, fontdict=None, **kwargs)向坐标轴添加文本x,y放置文本的位置float,默认情况下是在数据坐标中,坐标系统可以使用转换参数进行改变。s文本str。Fontdict覆盖默认文本属性的字典,默认无。如果fontdict为None,则rcParams确定默认值。verticalalignment或va垂直对齐方式,{‘bottom’, ‘baseline’, ‘center’, ‘center_baseline’, ‘top’}。horizontalalignment或ha水平对齐方式,{‘left’, ‘center’, ‘right’}。**kwargs文本属性。】 # plt.text(0.9,1.02,s=countValue,fontsize=12, color=‘k’, transform=axplt1.transAxes) 右上角添加文本
plt.bar_label(container, labels=None, *, fmt=‘%g’, label_type=‘edge’, padding=0, **kwargs)为柱状图添加数据标签container柱子的容器对象,通常为bar或barh函数返回值, BarContainer对象为必备参数。labels标签文本列表,类数组对象为可选参数,如果为None,则值为使用fmt参数格式化的柱子的数据(柱子的高度)。fmt标签的格式字符串,默认值为’%g’,即将标签值格式化为浮点数。label_type 标签类型,对于普通柱状图,该参数仅用于控制标签的位置;对于堆积柱状图,不同标签类型对应不同的标签值;默认值为'edge'标签位于柱子的端点,显示的值为柱子的端点位置,对于堆积柱状图即堆积的多个柱子的总长度。'center'标签位于柱子的中部,显示的值为柱子的长度;padding标签与柱子之间的距离,单位为像素,默认值为0。**kwargs传递给 annotate()的其他参数。】# p1 = plt.bar(velue,count, color=“black”,width=0.1) 绘制条形图 # plt.bar_label(p1, label_type=‘edge’) 为柱状图添加数据标签
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)调整子图布局,对于没有设置的参数保持不变,初始值由rcParams[“figure.subplot.[name]”]提供。left所有子图整体相对于图像的左外边距,距离单位为图像宽度的比例(小数),浮点数默认值为0.125。right所有子图整体相对于图像的右外边距,距离单位为图像宽度的比例(小数),浮点数默认值为0.0。bottom所有子图整体相对于图像的下外边距,距离单位为图像高度的比例(小数),浮点数默认值为0.11。top所有子图整体相对于图像的上外边距,距离单位为图像高度的比例(小数),浮点数默认值为0.88。wspace子图间宽度内边距,距离单位为子图平均宽度的比例(小数),浮点数默认值为0.2。hspace子图间高度内边距,距离单位为子图平均高度的比例(小数),浮点数默认值为0.2。】
plt.fill_between(x,y,y2=0,where=None,interpolate=False,step=None,*,data=None,**kwargs)填充两个水平曲线之间的区域。【x定义水平轴上的点(数组)。y表示y轴覆盖的下限(数组或者标量)。y2表示y轴覆盖的上限(数组或者标量)。where要填充区域的条件,排除某些垂直区域的填充(数组),意味着两个假值之间的一个孤立的真值将不进行填充,相邻的False值将导致不填充True值的两边。interpolate只有在使用了where参数同时两条曲线交叉时才有效boole,默认情况下被填充的区域将被放在x阵列的位置,定义一个被填充的多边形区域,与x相交的部分被裁剪。step用于指定步骤将发生的位置,pre代表区间(x[i-1],x[i])的值为y[i],x值向左移动;post代表区间(x[i],x[i+1])的值为y[i],x值向右移动;mid代表步骤发生在x位置的中间。】

设置 axes 脊柱,外边框设置

ax.spines['left'].set_visible(False)   # 去掉左边的边框
ax.spines['right'].set_visible(False)  # 去掉右边的边框
ax.spines['top'].set_visible(False)    # 去掉上边的边框
ax.spines[’ '].xxx说明默认值
set_visible(bool)边框的可见性True
ax.xaxis.set_ticks_position({“top”,“left”……})刻度的显示位置外面 (不是 ax.spines [’ '].)
set_position({“top”,“left”……})边框的位置左下角为交点
set_color(string)边框的颜色“black"(当值为 None 也是隐藏)
set_linewidth(int)边框的宽度1
set_linestyle(string)边框的线性”-“

4. 保存与展示图形

函数说明
plt.savafig()保存绘制的图片,可以指定图片的分辨率、边缘的颜色等参数。
plt.show()在本机显示图形。

四、参数设置

有效的关键字参数是Line2D属性,“transform”除外:

  • alpha:透明度,0~1
  • fontsize:字体大小
  • color:颜色
  • linestyle:线条样式

1. 位置字符串

位置字符串位置代码
最佳0
右上角1
左上角2
左下3
右下角4
右上5
左中部6
中间偏右7
中心偏下8
中心偏上9
中心10

2. 颜色代码 color

互补色计算公式如下:
若某颜色RGB代码为:r, g, b
则其互补色RGB代码为:255-r, 255-g, 255-b

颜色RGB格式/HEX格式

白色:rgb(255,225,255) #FFFFFF,white( w )
黑色:rgb(0,0,0) #000000, black( k )
红色:rgb(255,0,0) #FF0000,red( r )
绿色:rgb(0,255,0) #00FF00,green( g )
蓝色:rgb(0,0,255) #0000FF,blue( b )
黄色:rgb(255,225,0) #FFFF00,yellow( y )
青色:rgb(0,255,255) #00FFFF
紫色:rgb(255,0,255) #FF00FF

https://blog.csdn.net/Discover304/article/details/121991061

cnames = {'aliceblue': '#F0F8FF','antiquewhite': '#FAEBD7','aqua': '#00FFFF','aquamarine': '#7FFFD4','azure': '#F0FFFF','beige': '#F5F5DC','bisque': '#FFE4C4','black': '#000000','blanchedalmond': '#FFEBCD','blue': '#0000FF','blueviolet': '#8A2BE2','brown': '#A52A2A','burlywood': '#DEB887','cadetblue': '#5F9EA0','chartreuse': '#7FFF00','chocolate': '#D2691E','coral': '#FF7F50','cornflowerblue': '#6495ED','cornsilk': '#FFF8DC','crimson': '#DC143C','cyan': '#00FFFF','darkblue': '#00008B','darkcyan': '#008B8B','darkgoldenrod': '#B8860B','darkgray': '#A9A9A9','darkgreen': '#006400','darkkhaki': '#BDB76B','darkmagenta': '#8B008B','darkolivegreen': '#556B2F','darkorange': '#FF8C00','darkorchid': '#9932CC','darkred': '#8B0000','darksalmon': '#E9967A','darkseagreen': '#8FBC8F','darkslateblue': '#483D8B','darkslategray': '#2F4F4F','darkturquoise': '#00CED1','darkviolet': '#9400D3','deeppink': '#FF1493','deepskyblue': '#00BFFF','dimgray': '#696969','dodgerblue': '#1E90FF','firebrick': '#B22222','floralwhite': '#FFFAF0','forestgreen': '#228B22','fuchsia': '#FF00FF','gainsboro': '#DCDCDC','ghostwhite': '#F8F8FF','gold': '#FFD700','goldenrod': '#DAA520','gray': '#808080','green': '#008000','greenyellow': '#ADFF2F','honeydew': '#F0FFF0','hotpink': '#FF69B4','indianred': '#CD5C5C','indigo': '#4B0082','ivory': '#FFFFF0','khaki': '#F0E68C','lavender': '#E6E6FA','lavenderblush': '#FFF0F5','lawngreen': '#7CFC00','lemonchiffon': '#FFFACD','lightblue': '#ADD8E6','lightcoral': '#F08080','lightcyan': '#E0FFFF','lightgoldenrodyellow': '#FAFAD2','lightgreen': '#90EE90','lightgray': '#D3D3D3','lightpink': '#FFB6C1','lightsalmon': '#FFA07A','lightseagreen': '#20B2AA','lightskyblue': '#87CEFA','lightslategray': '#778899','lightsteelblue': '#B0C4DE','lightyellow': '#FFFFE0','lime': '#00FF00','limegreen': '#32CD32','linen': '#FAF0E6','magenta': '#FF00FF','maroon': '#800000','mediumaquamarine': '#66CDAA','mediumblue': '#0000CD','mediumorchid': '#BA55D3','mediumpurple': '#9370DB','mediumseagreen': '#3CB371','mediumslateblue': '#7B68EE','mediumspringgreen': '#00FA9A','mediumturquoise': '#48D1CC','mediumvioletred': '#C71585','midnightblue': '#191970','mintcream': '#F5FFFA','mistyrose': '#FFE4E1','moccasin': '#FFE4B5','navajowhite': '#FFDEAD','navy': '#000080','oldlace': '#FDF5E6','olive': '#808000','olivedrab': '#6B8E23','orange': '#FFA500','orangered': '#FF4500','orchid': '#DA70D6','palegoldenrod': '#EEE8AA','palegreen': '#98FB98','paleturquoise': '#AFEEEE','palevioletred': '#DB7093','papayawhip': '#FFEFD5','peachpuff': '#FFDAB9','peru': '#CD853F','pink': '#FFC0CB','plum': '#DDA0DD','powderblue': '#B0E0E6','purple': '#800080','red': '#FF0000','rosybrown': '#BC8F8F','royalblue': '#4169E1','saddlebrown': '#8B4513','salmon': '#FA8072','sandybrown': '#FAA460','seagreen': '#2E8B57','seashell': '#FFF5EE','sienna': '#A0522D','silver': '#C0C0C0','skyblue': '#87CEEB','slateblue': '#6A5ACD','slategray': '#708090','snow': '#FFFAFA','springgreen': '#00FF7F','steelblue': '#4682B4','tan': '#D2B48C','teal': '#008080','thistle': '#D8BFD8','tomato': '#FF6347','turquoise': '#40E0D0','violet': '#EE82EE','wheat': '#F5DEB3','white': '#FFFFFF','whitesmoke': '#F5F5F5','yellow': '#FFFF00','yellowgreen': '#9ACD32'}
英文代码形象颜色HEX格式RGB格式
LightPink浅粉红#FFB6C1255,182,193
Pink粉红#FFC0CB255,192,203
Crimson猩红#DC143C220,20,60
LavenderBlush脸红的淡紫色#FF0F5255,240,245
PaleVioletRed苍白的紫罗兰红色#DB7093219,112,147
HotPink热情的粉红#FF69B4255,105,180
DeepPink深粉色#FF1493255,20,147
MediumVioletRed适中的紫罗兰红色#C71585199,21,133
Orchid兰花的紫色#DA70D6218,112,214
Thistle#D8BFD8216,191,216
Plum李子#DDA0DD221,160,221
Violet紫罗兰#EE82EE238,130,238
Magenta洋红#FF00FF255,0,255
Fuchsia灯笼海棠(紫红色)#FF00FF255,0,255
DarkMagenta深洋红色#8B008B139,0,139
Purple紫色#800080128,0,128
MediumOrchid适中的兰花紫#BA55D3186,85,211
DarkViolet深紫罗兰色#9400D3148,0,211
DarkOrchid深兰花紫#9932CC153,50,204
Indigo靛青#4B008275,0,130
BlueViolet深紫罗兰的蓝色#8A2BE2138,43,226
MediumPurple适中的紫色#9370DB147,112,219
MediumSlateBlue适中的板岩暗蓝灰色#7B68EE123,104,238
SlateBlue板岩暗蓝灰色#6A5ACD106,90,205
DarkSlateBlue深板岩暗蓝灰色#483D8B72,61,139
Lavender薰衣草花的淡紫色#E6E6FA230,230,250
GhostWhite幽灵的白色#F8F8FF248,248,255
Blue纯蓝#0000FF0,0,255
IndigoBlue靛蓝#0000FF0,0,255
MediumBlue适中的蓝色#0000CD0,0,205
MidnightBlue午夜的蓝色#19197025,25,112
DarkBlue深蓝色#00008B0,0,139
Navy海军蓝,深靛蓝#0000800,0,128
RoyalBlue皇家蓝#4169E165,105,225
CornflowerBlue矢车菊的蓝色#6495ED100,149,237
LightSteelBlue淡钢蓝#B0C4DE176,196,222
LightSlateGray浅石板灰#778899119,136,153
SlateGray石板灰#708090112,128,144
DodgerBlue道奇蓝#1E90FF30,144,255
AliceBlue爱丽丝蓝#F0F8FF240,248,255
SteelBlue钢蓝#4682B470,130,180
LightSkyBlue淡蓝色#87CEFA135,206,250
SkyBlue天蓝色#87CEEB135,206,235
DeepSkyBlue深天蓝#00BFFF0,191,255
LightBlue淡蓝#ADD8E6173,216,230
PowderBlue火药蓝#B0E0E6176,224,230
CadetBlue军校蓝#5F9EA095,158,160
Azure蔚蓝色#F0FFFF240,255,255
LightCyan淡青色#E1FFFF225,255,255
PaleTurquoise苍白的绿宝石#AFEEEE175,238,238
Cyan青色#00FFFF0,255,255
Aqua水绿色#00FFFF0,255,255
DarkTurquoise深绿宝石#00CED10,206,209
DarkSlateGray深石板灰#2F4F4F47,79,79
DarkCyan深青色#008B8B0,139,139
Teal水鸭色#0080800,128,128
MediumTurquoise适中的绿宝石#48D1CC72,209,204
LightSeaGreen浅海洋绿#20B2AA32,178,170
Turquoise绿宝石#40E0D064,224,208
Auqamarin绿玉/碧绿色#7FFFAA127,255,170
MediumAquamarine适中的碧绿色#00FA9A0,250,154
MediumSpringGreen适中的春天的绿色#00FF7F0,255,127
MintCream薄荷奶油#F5FFFA245,255,250
SpringGreen春天的绿色#3CB37160,179,113
SeaGreen海洋绿#2E8B5746,139,87
Honeydew蜂蜜#F0FFF0240,255,240
LightGreen淡绿色#90EE90144,238,144
PaleGreen苍白的绿色#98FB98152,251,152
DarkSeaGreen深海洋绿#8FBC8F143,188,143
LimeGreen酸橙绿#32CD3250,205,50
Lime酸橙色#00FF000,255,0
ForestGreen森林绿#228B2234,139,34
Green纯绿#0080000,128,0
DarkGreen深绿色#0064000,100,0
Chartreuse查特酒绿#7FFF00127,255,0
LawnGreen草坪绿#7CFC00124,252,0
GreenYellow绿黄色#ADFF2F173,255,47
OliveDrab橄榄土褐色#556B2F85,107,47
Beige米色(浅褐色)#F5F5DC245,245,220
LightGoldenrodYellow浅秋麒麟黄#FAFAD2250,250,210
Ivory象牙#FFFFF0255,255,240
LightYellow浅黄色#FFFFE0255,255,224
Yellow纯黄#FFFF00255,255,0
Olive橄榄#808000128,128,0
DarkKhaki深卡其布#BDB76B189,183,107
LemonChiffon柠檬薄纱#FFFACD255,250,205
PaleGodenrod灰秋麒麟#EEE8AA238,232,170
Khaki卡其布#F0E68C240,230,140
Gold#FFD700255,215,0
Cornislk玉米色#FFF8DC255,248,220
GoldEnrod秋麒麟#DAA520218,165,32
FloralWhite花的白色#FFFAF0255,250,240
OldLace老饰带#FDF5E6253,245,230
Wheat小麦色#F5DEB3245,222,179
Moccasin鹿皮鞋#FFE4B5255,228,181
Orange橙色#FFA500255,165,0
PapayaWhip番木瓜#FFEFD5255,239,213
BlanchedAlmond漂白的杏仁#FFEBCD255,235,205
NavajoWhite纳瓦霍白/印第安黄#FFDEAD255,222,173
AntiqueWhite古代的白色#FAEBD7250,235,215
Tan晒黑#D2B48C210,180,140
BrulyWood结实的树#DEB887222,184,135
Bisque(浓汤)乳脂、番茄等#FFE4C4255,228,196
DarkOrange深橙色#FF8C00255,140,0
Linen亚麻布#FAF0E6250,240,230
Peru秘鲁#CD853F205,133,63
PeachPuff桃色#FFDAB9255,218,185
SandyBrown沙棕色#F4A460244,164,96
Chocolate巧克力#D2691E210,105,30
SaddleBrown马鞍棕色#8B4513139,69,19
SeaShell海贝壳#FFF5EE255,245,238
Sienna黄土赭色#A0522D160,82,45
LightSalmon浅鲜肉(鲑鱼)色#FFA07A255,160,122
Coral珊瑚#FF7F50255,127,80
OrangeRed橙红色#FF4500255,69,0
DarkSalmon深鲜肉(鲑鱼)色#E9967A233,150,122
Tomato番茄#FF6347255,99,71
MistyRose薄雾玫瑰#FFE4E1255,228,225
Salmon鲜肉(鲑鱼)色#FA8072250,128,114
Snow#FFFAFA255,250,250
LightCoral淡珊瑚色#F08080240,128,128
RosyBrown玫瑰棕色#BC8F8F188,143,143
IndianRed印度红#CD5C5C205,92,92
Red纯红#FF0000255,0,0
Brown棕色#A52A2A165,42,42
FireBrick耐火砖#B22222178,34,34
DarkRed深红色#8B0000139,0,0
Maroon栗色#800000128,0,0
White纯白#FFFFFF255,255,255
WhiteSmoke白烟#F5F5F5245,245,245
Gainsboro庚斯博罗灰色/淡灰色/亮灰#DCDCDC220,220,220
LightGray浅灰色#D3D3D3211,211,211
Silver银白色#C0C0C0192,192,192
DarkGray深灰色#A9A9A9169,169,169
Gray灰色#808080128,128,128
DimGray暗淡的灰色#696969105,105,105
Black纯黑#0000000,0,0

3. 标记代码

字符描述
‘.’点标记
‘o’圆圈标记
‘x’X标记
‘D’钻石标记
‘H’六角形标记
‘s’正方形标记
‘+’加号标记

4. 线条样式 linestyle

字符描述
‘-‘实心线
‘-‘虚线
‘-.’虚线
‘:’虚线
‘H’六角形标记

5. 设置正常显示中文和负号

常用字体样式

  • SimHei 中文黑体
  • Kaiti 中文楷体
  • LiSu 中文隶书
  • FangSong 中文仿宋
  • YouYuan 中文幼圆
  • STSong 华文宋体
  • SimSun 宋体
  • Calibri
  • Arial

matplotlib字体设置:https://blog.csdn.net/fengdu78/article/details/111189331

matplotlib.pyplot.rcParams 是一个字典,其中每个键值对的 “键”,对应以字符串形式表现的 rc 参数名,“值” 对应该参数的值。通过修改字典键值对中的值,即可设定 rc 参数。

# 设置matplotlib正常显示中文和负号
plt.rcParams['font.sans-serif'] = 'SimHei'  # 用黑体显示中文SimHei
# plt.rcParams["font.family"]="SimHei" # 显示中文
plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号
plt.rcParams['font.size'] = 14  # 调整字体大小
import matplotlib.pyplot as plt
from matplotlib import font_manager
for font in font_manager.fontManager.ttflist:
    # 查看字体名以及对应的字体文件名
    print(font.name, '-', font.fname)

五、案例

plottable简单绘制图表

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
from plottable import Table, ColDef

# 设置matplotlib正常显示中文和负号
# plt.rcParams['font.sans-serif'] = 'Arial'  # 用黑体显示中文SimHei
plt.rcParams["font.family"]="SimHei"
plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号

colLabels = ['Name','Math','Chinese','English','Physics']   # 表格行名
demo_df=pd.DataFrame(
    np.random.rand(5,5),
    columns=colLabels
    )

demo_df.index.name = "ID" # 设置index的名称,没有默认为index
fig,ax=plt.subplots()
# 进行表格奇数偶数行底色的设置: odd_row_color奇数和even_row_color偶数
# 样式设置: col_label_cell_kw表头区域单元格, cell_kw数据区域单元格
# 控制全部单元格的文字样式: textprops
# 配置行分割线: bool型参数, col_label_divider是否为表头(默认为Ture)、footer_divider是否为表格尾部(默认为False)、row_dividers是否为数据行绘制分割线(默认为Ture)
# col_label_divider_kw、footer_divider_kw、row_divider_kw则可以分别控制各个部分分割线的样式,支持plt.plot中全部参数

# column_definitions可细粒度地对每一列进行自由的样式定义,其中每个ColDef()对象通过参数name与列名进行对应
# 通过为ColDef设置参数,分别基于对应列的数值,对其单元格底色cmap 或 字体颜色text_cmap进行值映射
# 为字段创建分组展示, 通过为若干个ColDef设置相同的group参数,我们可以为具有相同group参数的字段添加分组标识
# 为指定字段绘制列边框,通过为ColDef设置参数border,我们可以决定如何绘制不同字段的列边框

table = Table(
    demo_df,
    col_label_cell_kw={'facecolor':"#DCDCDC"},  # 表头区域单元格 样式设置
    cell_kw={'facecolor':'w'},                  # 数据区域单元格 样式设置
    textprops={                                 # 控制全部单元格的文字样式
                'fontsize':10,
                'ha':'left',                    # 为不同字段定义水平对齐方式'ha'
                # 'bbox':{"boxstyle": "circle","pad": 0.35}   # 数据圆圈外框"boxstyle": "circle"                  
    },
    row_dividers=False,                         # 配置行分割线, 不显示数据行绘制分割线
    col_label_divider_kw={"linewidth": 1,'color':'grey'},      # 控制 表头 部分分割线的样式 col_label_divider = True,
    column_border_kw={"linewidth": 1,'color':'grey'},
    column_definitions=[                        # 
        ColDef(name='ID',width=0.05),           # width分别为不同列调整宽度(每列的默认宽度为1)
        ColDef(name='Name',width=0.2,formatter="{:.2f}"),          # 每个ColDef对象都可设置textprops参数
        ColDef(name='Math',width=0.08,formatter="{:.2f}"),         # formatter="{:.2f}"保留2位小数
        ColDef(name='Chinese',width=0.1,formatter="{:.2f}"),
        ColDef(name='English',width=0.1,formatter="{:.2f}"),
        ColDef(name='Physics',width=0.08,formatter="{:.2f}"),
    ]

)
row_colors = {
    "top4": "#2d3636",
    "top6": "#516362",
    "playoffs": "#8d9386",
    "relegation": "#c8ab8d",
    "even": "#627979",
    "odd": "#68817e",
}
table.rows[1].set_facecolor(row_colors["playoffs"]) # 填充数据某一行的背景色
table.rows[1].set_fontcolor("r")        # 修改数据某一行的字体颜色
plt.show()

绘制折线图和图表

# 导入matplotlib库中的pyplot
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import gridspec
import pandas as pd
# 解决中文乱码,可自行修改期望字体
plt.rcParams['font.sans-serif'] = 'SimHei'
# # 解决负号无法显示的问题
plt.rcParams['axes.unicode_minus'] = False

# pd.set_option('display.unicode.ambiguous_as_wide',True)# 数据与列名对齐不错行
# pd.set_option('display.unicode.east_asian_width',True)# 数据与列名对齐不错行
# pd.set_option('display.max_columns',None)# 显示所有列
# pd.set_option('display.max_row',None)# 显示所有行

# 设置图片大小, figsize图片大小, dpi参数像素参数可以使图片更加清晰;
# 创建一个点数为 8 x 6 的窗口, 并设置分辨率为 80像素/每英寸
plt.figure(figsize=(16, 8), dpi=80)
# 再创建一个规格为 1 x 1 的子图
# plt.subplot(111)
# # 创建绘制图表样式为 2X1 的图片区域,并选中第一个子图
# plt.subplot(211)
gs = gridspec.GridSpec(8,8) # 指定8行8列
ax1 = plt.subplot(gs[:5,:6]) 

# 设置字体为微软雅黑,解决中文显示问题
# matplotlib.rc("font", family='Microsoft YaHei')


# 1.准备数据
squares = [1, 0, 1, 4, 9]
seq = [-1, 0, 1, 2, 3]   # 索引列表

x = np.linspace(-2, 6, 50)
y2 = 3 - x        # 曲线 y2

# 2.画线plot(),通过设置参数的方式来改变图形的样式。# 列表内的数据被视为y轴的值,x轴的值会根据列表值的索引位置自动产生
# df.plot(x, y, kind, figsize, title, grid, legend, style)
# x横坐标,只有dataframe对象时x可用; y纵坐标变量;
# kind 可视化图的种类,如line折线图,hist直方图, bar条形图, barh水平条形图, pie饼形图, kde, scatter散点图,'box'箱型图。
# figsize画布尺寸;title标题;grid是否显示格子线条; legend是否显示图例;style图的风格;
plt.plot(seq, squares, color="blue", linewidth=1.0, marker=".", linestyle="-", label="y11111111")  # 绘制颜色为蓝色、宽度为 1 像素的连续曲线 y1
plt.plot(x, y2, color="#800080", linewidth=2.0, marker="x", linestyle="--", label="y2")     # 绘制颜色为紫色、宽度为 2 像素的不连续曲线 y2


# 3.设置x、y轴的最小刻度和最大刻度
# plt.axis([-1, 6, -2, 10])  # 将x轴设为0~10,将y轴设为0~100
plt.xlim(-1, 6)   # 设置横轴的上下限
plt.ylim(-2, 10)  # 设置纵轴的上下限
# plt.xticks([-1, -0.5, 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5],rotation=45)    # 设置横轴精准刻度, rotation旋转角度
# plt.yticks(range(min(y),max(y)+1))    # 设置y纵轴的刻度

xNum=np.arange(0,8,1)
# 区间填充颜色标亮
plt.fill_between(xNum[2:5],-2,10,facecolor='#FFFF00',zorder=0)   # 填充两个水平曲线之间的区域

# 设置主副刻度显示标注
ax1.xaxis.set_major_locator(plt.MultipleLocator(1))
ax1.xaxis.set_minor_locator(plt.MultipleLocator(0.2))  # 设置轴的副刻度,设置0.2倍数
ax1.yaxis.set_major_locator(plt.MultipleLocator(2))
ax1.yaxis.set_minor_locator(plt.MultipleLocator(0.5))        
ax1.tick_params(which='both', axis='y', direction='inout')   # 设置坐标轴刻度线的方向
ax1.grid(which='major', axis='both', linewidth=0.75, color='grey',alpha=0.9,zorder=3)      # y坐标轴的网格使用主刻度
ax1.grid(which='minor', axis='both', linewidth=0.55, color='grey',alpha=0.3,zorder=3)         # y坐标轴的网格使用次刻度
# 更改边框的颜色
ax1.spines['left'].set_color('grey')   # 更改左边的边框的颜色
ax1.spines['right'].set_color('grey')  
ax1.spines['top'].set_color('grey')    
ax1.spines['bottom'].set_color('grey')

ax1.spines['left'].set_visible(False)   # 去掉左边的边框
ax1.spines['right'].set_visible(False)  # 去掉右边的边框
# ax1.spines['top'].set_visible(False)    # 去掉上边的边框

# 4.设置标题及字体大小
plt.title(label='x的平方', fontsize=18)  # 图表标题,title(标题名称,fontsize=字体大小)
plt.xlabel(xlabel='值', fontsize=15)     # 设置x横轴标签
plt.ylabel(ylabel='平方值', fontsize=15)   # 设置y纵轴标签

# 5.设置坐标轴刻度
# 使用tick_params()方法:axis 应用范围(x应用到x轴,y应用到y轴,both应用到x轴和y轴);labelsize 坐标轴的刻度大小;color 线条颜色
plt.tick_params(axis='both', labelsize=12, color='red', labelcolor='green')

# 绘制散点(3, 0)
plt.scatter([3], [0], s=50, color="#800080")
# 对(3, 0)做标注
plt.annotate("(3, 0)",
             xy=(3.3, 0),            # 在(3.3, 0)上做标注
             fontsize=16,          # 设置字体大小为 16
             xycoords='data')    # xycoords='data' 是说基于数据的值来选位置
# 给点添加注释
plt.text(4, -0.5, "添加注释important",
        fontdict={'size': 12, 'color': 'green'})  # fontdict设置文本字体
# 为图形加上网格线
plt.grid(alpha=0.9)  # alpha=0.9透明度, linestyle='-'#添加形状
# # 对空白区域进行自动填充
# plt.tight_layout()

# 添加图例
# plt.legend() 需要传入一个位置值。"right"右边,默认是右上。如果因图形挡住右上,会自动往下选择空白地方绘制
# loc属性有这些:'upper right', 'upper left', 'lower left', 'lower right', 'right', 'center left', 'center right', 'lower center', 'upper center', 'center','best'
# plt.legend(loc = (x , y))其中x和y的值可以根据图中的相对位置进行调整; 原点就是图的左下角,坐标的数值表示的是比例
# (1,0)右下角; (0,1)左上角; (0.5,0.5)中间; (0.4,0.4)中间往左下一点。
# plt.legend(loc=(1.01, 0.9), prop={'size': 8}, ncol=1)   # ncol默认为1并列展示;2为并排展示。
plt.legend(loc='upper left', bbox_to_anchor=(1,1), prop={'size': 10}, ncol=1)   # ncol默认为1并列展示;2并排展示。
# plt.style.use('fivethirtyeight')    # pyplot自带样式'ggplot'
ax2 = plt.subplot(gs[0:,6:]) # 为图例占位
plt.axis('off')

# 插入表格
# # 创建绘制图表样式为 2X1 的图片区域,并选中第二个子图
# plt.subplot(212)
ax3 = plt.subplot(gs[5:,:6])
# ax3.axis('tight')  # 修改轴范围,tight使所有数据可见
plt.subplots_adjust(hspace=2)    # 调整子图间高度内边距
plt.axis('off')

colLabels = ["A难度水平","B难度水平","C难度水平","D难度水平"]       # 表格行名
studentValues = [[350,150,200,300],[222,43,600,23]]     # 表格每一行数据
rowLabels = ["0",'1']

cellColours = [["#56b5fd","w","w","w"],[ "w","w","w","w"]]
colColours = ["#377eb8","#e41a1c","#4daf4a","#984ea3"]
# rowColours = ["w","w"]

colWidths = [0.2,0.2,0.2,0.2] # 相当于colWidths = [0.15]*4
table = plt.table(
            colLabels=colLabels,      # 包含 列标签 的字符串列表。
            cellText=studentValues,
            rowLabels=rowLabels,    # 包含 行标签 的字符串列表。

            colColours=colColours,     # 包含 列标签 的颜色列表。
            cellColours=cellColours,   # 包含 单元格 的颜色列表。
            # rowColours=rowColours,     # 包含 行表头 的颜色列表。
            
            colLoc = "left",        # 表格 列表头文本 的对齐方式
            cellLoc="left",         # 表格 单元格文本 的对齐方式
            # rowLoc="center",          # 表格 行表头文本 的对齐方式
            loc="upper center",             # 单元格相对于子图的位置

            colWidths=colWidths,    # 浮点数列表,指定每列的宽度。
            )

table.set_fontsize(20)      # 字体大小,设置后默认自动调节改为 ‘不自动相’当于table.auto_set_font_size(False)
table.scale(1, 1.5)         # 根据指定的比例缩放表格。
table.get_celld()[(1,2)].set_text_props(color='red') # 字体颜色
# table.auto_set_column_width(col=list(range(len(studentValues[0])))) # 根据表格大小自动设置列宽。
table[(2, 1)].set_facecolor("#eac3f5")  # 设置特定单元格的面颜色

# 保存图片, 去掉白边bbox_inches='tight', bbox_inches = extent
# plt.savefig(outputFile, dpi=120, bbox_inches='tight')

# 显示绘制的图形
plt.show()

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值