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 |
浅粉红 |
#FFB6C1 |
255,182,193 |
Pink |
粉红 |
#FFC0CB |
255,192,203 |
Crimson |
猩红 |
#DC143C |
220,20,60 |
LavenderBlush |
脸红的淡紫色 |
#FF0F5 |
255,240,245 |
PaleVioletRed |
苍白的紫罗兰红色 |
#DB7093 |
219,112,147 |
HotPink |
热情的粉红 |
#FF69B4 |
255,105,180 |
DeepPink |
深粉色 |
#FF1493 |
255,20,147 |
MediumVioletRed |
适中的紫罗兰红色 |
#C71585 |
199,21,133 |
Orchid |
兰花的紫色 |
#DA70D6 |
218,112,214 |
Thistle |
蓟 |
#D8BFD8 |
216,191,216 |
Plum |
李子 |
#DDA0DD |
221,160,221 |
Violet |
紫罗兰 |
#EE82EE |
238,130,238 |
Magenta |
洋红 |
#FF00FF |
255,0,255 |
Fuchsia |
灯笼海棠(紫红色) |
#FF00FF |
255,0,255 |
DarkMagenta |
深洋红色 |
#8B008B |
139,0,139 |
Purple |
紫色 |
#800080 |
128,0,128 |
MediumOrchid |
适中的兰花紫 |
#BA55D3 |
186,85,211 |
DarkViolet |
深紫罗兰色 |
#9400D3 |
148,0,211 |
DarkOrchid |
深兰花紫 |
#9932CC |
153,50,204 |
Indigo |
靛青 |
#4B0082 |
75,0,130 |
BlueViolet |
深紫罗兰的蓝色 |
#8A2BE2 |
138,43,226 |
MediumPurple |
适中的紫色 |
#9370DB |
147,112,219 |
MediumSlateBlue |
适中的板岩暗蓝灰色 |
#7B68EE |
123,104,238 |
SlateBlue |
板岩暗蓝灰色 |
#6A5ACD |
106,90,205 |
DarkSlateBlue |
深板岩暗蓝灰色 |
#483D8B |
72,61,139 |
Lavender |
薰衣草花的淡紫色 |
#E6E6FA |
230,230,250 |
GhostWhite |
幽灵的白色 |
#F8F8FF |
248,248,255 |
Blue |
纯蓝 |
#0000FF |
0,0,255 |
IndigoBlue |
靛蓝 |
#0000FF |
0,0,255 |
MediumBlue |
适中的蓝色 |
#0000CD |
0,0,205 |
MidnightBlue |
午夜的蓝色 |
#191970 |
25,25,112 |
DarkBlue |
深蓝色 |
#00008B |
0,0,139 |
Navy |
海军蓝,深靛蓝 |
#000080 |
0,0,128 |
RoyalBlue |
皇家蓝 |
#4169E1 |
65,105,225 |
CornflowerBlue |
矢车菊的蓝色 |
#6495ED |
100,149,237 |
LightSteelBlue |
淡钢蓝 |
#B0C4DE |
176,196,222 |
LightSlateGray |
浅石板灰 |
#778899 |
119,136,153 |
SlateGray |
石板灰 |
#708090 |
112,128,144 |
DodgerBlue |
道奇蓝 |
#1E90FF |
30,144,255 |
AliceBlue |
爱丽丝蓝 |
#F0F8FF |
240,248,255 |
SteelBlue |
钢蓝 |
#4682B4 |
70,130,180 |
LightSkyBlue |
淡蓝色 |
#87CEFA |
135,206,250 |
SkyBlue |
天蓝色 |
#87CEEB |
135,206,235 |
DeepSkyBlue |
深天蓝 |
#00BFFF |
0,191,255 |
LightBlue |
淡蓝 |
#ADD8E6 |
173,216,230 |
PowderBlue |
火药蓝 |
#B0E0E6 |
176,224,230 |
CadetBlue |
军校蓝 |
#5F9EA0 |
95,158,160 |
Azure |
蔚蓝色 |
#F0FFFF |
240,255,255 |
LightCyan |
淡青色 |
#E1FFFF |
225,255,255 |
PaleTurquoise |
苍白的绿宝石 |
#AFEEEE |
175,238,238 |
Cyan |
青色 |
#00FFFF |
0,255,255 |
Aqua |
水绿色 |
#00FFFF |
0,255,255 |
DarkTurquoise |
深绿宝石 |
#00CED1 |
0,206,209 |
DarkSlateGray |
深石板灰 |
#2F4F4F |
47,79,79 |
DarkCyan |
深青色 |
#008B8B |
0,139,139 |
Teal |
水鸭色 |
#008080 |
0,128,128 |
MediumTurquoise |
适中的绿宝石 |
#48D1CC |
72,209,204 |
LightSeaGreen |
浅海洋绿 |
#20B2AA |
32,178,170 |
Turquoise |
绿宝石 |
#40E0D0 |
64,224,208 |
Auqamarin |
绿玉/碧绿色 |
#7FFFAA |
127,255,170 |
MediumAquamarine |
适中的碧绿色 |
#00FA9A |
0,250,154 |
MediumSpringGreen |
适中的春天的绿色 |
#00FF7F |
0,255,127 |
MintCream |
薄荷奶油 |
#F5FFFA |
245,255,250 |
SpringGreen |
春天的绿色 |
#3CB371 |
60,179,113 |
SeaGreen |
海洋绿 |
#2E8B57 |
46,139,87 |
Honeydew |
蜂蜜 |
#F0FFF0 |
240,255,240 |
LightGreen |
淡绿色 |
#90EE90 |
144,238,144 |
PaleGreen |
苍白的绿色 |
#98FB98 |
152,251,152 |
DarkSeaGreen |
深海洋绿 |
#8FBC8F |
143,188,143 |
LimeGreen |
酸橙绿 |
#32CD32 |
50,205,50 |
Lime |
酸橙色 |
#00FF00 |
0,255,0 |
ForestGreen |
森林绿 |
#228B22 |
34,139,34 |
Green |
纯绿 |
#008000 |
0,128,0 |
DarkGreen |
深绿色 |
#006400 |
0,100,0 |
Chartreuse |
查特酒绿 |
#7FFF00 |
127,255,0 |
LawnGreen |
草坪绿 |
#7CFC00 |
124,252,0 |
GreenYellow |
绿黄色 |
#ADFF2F |
173,255,47 |
OliveDrab |
橄榄土褐色 |
#556B2F |
85,107,47 |
Beige |
米色(浅褐色) |
#F5F5DC |
245,245,220 |
LightGoldenrodYellow |
浅秋麒麟黄 |
#FAFAD2 |
250,250,210 |
Ivory |
象牙 |
#FFFFF0 |
255,255,240 |
LightYellow |
浅黄色 |
#FFFFE0 |
255,255,224 |
Yellow |
纯黄 |
#FFFF00 |
255,255,0 |
Olive |
橄榄 |
#808000 |
128,128,0 |
DarkKhaki |
深卡其布 |
#BDB76B |
189,183,107 |
LemonChiffon |
柠檬薄纱 |
#FFFACD |
255,250,205 |
PaleGodenrod |
灰秋麒麟 |
#EEE8AA |
238,232,170 |
Khaki |
卡其布 |
#F0E68C |
240,230,140 |
Gold |
金 |
#FFD700 |
255,215,0 |
Cornislk |
玉米色 |
#FFF8DC |
255,248,220 |
GoldEnrod |
秋麒麟 |
#DAA520 |
218,165,32 |
FloralWhite |
花的白色 |
#FFFAF0 |
255,250,240 |
OldLace |
老饰带 |
#FDF5E6 |
253,245,230 |
Wheat |
小麦色 |
#F5DEB3 |
245,222,179 |
Moccasin |
鹿皮鞋 |
#FFE4B5 |
255,228,181 |
Orange |
橙色 |
#FFA500 |
255,165,0 |
PapayaWhip |
番木瓜 |
#FFEFD5 |
255,239,213 |
BlanchedAlmond |
漂白的杏仁 |
#FFEBCD |
255,235,205 |
NavajoWhite |
纳瓦霍白/印第安黄 |
#FFDEAD |
255,222,173 |
AntiqueWhite |
古代的白色 |
#FAEBD7 |
250,235,215 |
Tan |
晒黑 |
#D2B48C |
210,180,140 |
BrulyWood |
结实的树 |
#DEB887 |
222,184,135 |
Bisque |
(浓汤)乳脂、番茄等 |
#FFE4C4 |
255,228,196 |
DarkOrange |
深橙色 |
#FF8C00 |
255,140,0 |
Linen |
亚麻布 |
#FAF0E6 |
250,240,230 |
Peru |
秘鲁 |
#CD853F |
205,133,63 |
PeachPuff |
桃色 |
#FFDAB9 |
255,218,185 |
SandyBrown |
沙棕色 |
#F4A460 |
244,164,96 |
Chocolate |
巧克力 |
#D2691E |
210,105,30 |
SaddleBrown |
马鞍棕色 |
#8B4513 |
139,69,19 |
SeaShell |
海贝壳 |
#FFF5EE |
255,245,238 |
Sienna |
黄土赭色 |
#A0522D |
160,82,45 |
LightSalmon |
浅鲜肉(鲑鱼)色 |
#FFA07A |
255,160,122 |
Coral |
珊瑚 |
#FF7F50 |
255,127,80 |
OrangeRed |
橙红色 |
#FF4500 |
255,69,0 |
DarkSalmon |
深鲜肉(鲑鱼)色 |
#E9967A |
233,150,122 |
Tomato |
番茄 |
#FF6347 |
255,99,71 |
MistyRose |
薄雾玫瑰 |
#FFE4E1 |
255,228,225 |
Salmon |
鲜肉(鲑鱼)色 |
#FA8072 |
250,128,114 |
Snow |
雪 |
#FFFAFA |
255,250,250 |
LightCoral |
淡珊瑚色 |
#F08080 |
240,128,128 |
RosyBrown |
玫瑰棕色 |
#BC8F8F |
188,143,143 |
IndianRed |
印度红 |
#CD5C5C |
205,92,92 |
Red |
纯红 |
#FF0000 |
255,0,0 |
Brown |
棕色 |
#A52A2A |
165,42,42 |
FireBrick |
耐火砖 |
#B22222 |
178,34,34 |
DarkRed |
深红色 |
#8B0000 |
139,0,0 |
Maroon |
栗色 |
#800000 |
128,0,0 |
White |
纯白 |
#FFFFFF |
255,255,255 |
WhiteSmoke |
白烟 |
#F5F5F5 |
245,245,245 |
Gainsboro |
庚斯博罗灰色/淡灰色/亮灰 |
#DCDCDC |
220,220,220 |
LightGray |
浅灰色 |
#D3D3D3 |
211,211,211 |
Silver |
银白色 |
#C0C0C0 |
192,192,192 |
DarkGray |
深灰色 |
#A9A9A9 |
169,169,169 |
Gray |
灰色 |
#808080 |
128,128,128 |
DimGray |
暗淡的灰色 |
#696969 |
105,105,105 |
Black |
纯黑 |
#000000 |
0,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()