安装 python -m pip install matplotlib
允许中文:
使用matplotlib的字体管理器指定字体文件
plt.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 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
散点图:
x=[160,170,180,165,175,185]
y=[60,70,80,65,75,85]
plt.scatter(x,y,s=500,c='r',marker='*',alpha=1) #散点图
#参数1 横坐标;参数2 纵坐标
#坐标点要一一对应
#s设置点的大小,默认20;s是面积的意思
#c设置颜色,默认b蓝色;r红色;g绿色;c青色;m品红色;y黄色;k黑色;w白色
#设置点的形状;o圆形默认;其它看官网 https://matplotlib.org/api/markers_api.html?highlight=markers#module-matplotlib.markers
#alpha 设置透明度. 1不透明
直线和点:
x=np.linspace(-10,10,10)
y=x**2
plt.plot(x,y,linestyle=':',color='red',marker='o') #画直线
# "ob" 设置画出坐标点,但是不连线
color 设置颜色 看 https://www.cnblogs.com/darkknightzh/p/6117528.html
marker 设置点的形状 看官网 https://matplotlib.org/api/markers_api.html?highlight=markers#module-matplotlib.markers
marker= 要是省略,只画点不划线;要是不省略,即画点也连线
linestyle设置线的形状:
字符 | 描述 |
---|---|
'-' |
实线样式 |
'--' |
短横线样式 |
'-.' |
点划线样式 |
':' |
虚线样式 |
'.' |
点标记 |
',' |
像素标记 |
'o' |
圆标记 |
'v' |
倒三角标记 |
'^' |
正三角标记 |
'<' |
左三角标记 |
'>' |
右三角标记 |
'1' |
下箭头标记 |
'2' |
上箭头标记 |
'3' |
左箭头标记 |
'4' |
右箭头标记 |
's' |
正方形标记 |
'p' |
五边形标记 |
'*' |
星形标记 |
'h' |
六边形标记 1 |
'H' |
六边形标记 2 |
'+' |
加号标记 |
'x' |
X 标记 |
'D' |
菱形标记 |
'd' |
窄菱形标记 |
'|' |
竖直线标记 |
'_' |
水平线标记 |
子图:
plt.subplot(2, 1, 1) #同一图中分开绘制图像
#参数1 子图的行数;参数2 子图的列数;参数3 第几个图像
x=np.linspace(-10,10,10)
y=x**2
plt.plot(x,y,linestyle=':',color='red',marker='o') #画直线
#"ob" 设置画出坐标点,但是不连线
plt.subplot(2, 1, 2)
x1=np.linspace(-10,10,10)
y1=x**2-20
plt.plot(x1,y1,linestyle='--',color='b',marker='*')
效果图:
条形图:
垂直条形图
import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl import matplotlib.dates as mdates #解决能显示中文 mpl.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体 mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号 plt.title("图标题",fontsize=24) #图的标题 plt.xlabel("x轴标题") plt.ylabel("y轴标题") x=[0,1,2,3,4] y=[10,20,40,30,50] name=['张三','李四','李明','李雪倩','李秀艳'] s=plt.bar(x,height=y,color='r',width=0.2,label="一部门",alpha=0.8) #垂直条形图 #参数1 横坐标位置;参数2 纵坐标高度 #color 设置颜色 #width设置条形图的宽度 #alpha设置透明度 #题注文本 plt.ylim(0, 60) # y轴取值范围 plt.legend() # 设置题注 plt.xticks(x, name) #标注 #参数1 标注位置;参数2 标注文本 for rect in s:#依此返回条形图信息 height = rect.get_height() #返回条形图高度 plt.text(rect.get_x() + rect.get_width() / 2, height+1, str(height), ha="center", va="bottom") #给条形图写备注 #参数1 备注横坐标;参数2 备注纵坐标;参数3备注文本 s=rect.get_x() #返回条形图左下角的x坐标 s=rect.get_width() #返回条形图宽度 plt.show() #把图形显示出来
效果图
水平条形图:
import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl import matplotlib.dates as mdates #解决能显示中文 mpl.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体 mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号 plt.title("图标题",fontsize=24) #图的标题 plt.xlabel("x轴标题") plt.ylabel("y轴标题") x=[0,1,2,3,4] y=[10,20,40,30,50] name=['张三','李四','李明','李雪倩','李秀艳'] s=plt.barh(x, y, height=0.7, color='steelblue', alpha=0.8) #水平条形图 #height 相当于垂直条形图的宽度 plt.yticks(range(5), name) #设置标注 plt.xlim(5,50) #x轴取值范围 plt.show() #把图形显示出来
效果图
堆叠条形图
import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl import matplotlib.dates as mdates #解决能显示中文 mpl.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体 mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号 plt.title("图标题",fontsize=24) #图的标题 plt.xlabel("x轴标题") plt.ylabel("y轴标题") #x=[0.0,1.0,2.0,3.0,4.0] x=np.array([0,1,2,3,4]) y=[10,20,40,30,50] s=plt.bar(x,height=y,color='r',width=0.2,alpha=0.8) #参数1 横坐标位置;参数2 纵坐标高度 #color 设置颜色 #width设置条形图的宽度 #alpha设置透明度 #题注文本 plt.ylim(0, 60) # y轴取值范围 s1=plt.bar(x,height=y,color='b',width=0.2,alpha=0.8,bottom=y) #堆叠条形图 #bottom=y 在y条形柱的底部开始画 plt.show() #把图形显示出来
效果图
直方图:
与条形图显示,直方图的x轴数据是连续的。直方图一般用来描述等距数据
import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl #解决能显示中文 mpl.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体 mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号 plt.title("图标题",fontsize=24) #图的标题 plt.xlabel("x轴标题") plt.ylabel("y轴标题") x=[1,2,3,4,5,6,7,8,9,0,1,1,1,1,1,6,6,6,6,6] y=[1,2,3,4,5,6,7,8,9,0,1,1,7,1,1,6,2,6,7,6] print(x) plt.hist(x,bins=10,color='b',density=0,edgecolor='r') #单变量直方图 #参数1 x轴分布数据 #bins:直方图的长条形数目,可选项,默认为10 #density:是否将得到的直方图向量归一化,可选项,默认为0,代表不归一化,显示频数-出现的次数。normed=1,表示归一化,显示频率-出现的次数/总次数 #edgecolor:长条形边框的颜色 #facecolor:长条形的颜色 #alpha:透明度 #plt.hist2d(x,y,bins=10) #双变量直方图 #用颜色的深浅来表达 plt.show()
效果图
饼状图:
import pandas as pd import numpy as np import matplotlib.pyplot as plt #解决能显示中文 plt.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 plt.title("图标题",fontsize=24) #图的标题 plt.xlabel("x轴标题") plt.ylabel("y轴标题") label = '超载', '船员责任心不强', '船员驾驶技术太差', '通航环境差', '海事、港航监管不到位', '船舶过于老旧', '冒险航行' # 各类别标签 color = 'red', 'orange', 'yellow', 'green', 'blue', 'gray', 'goldenrod' # 各类别颜色 size = [34, 5, 6, 14, 1, 10, 23] # 各类别占比 plt.axes(aspect=1) #设置x轴与y轴的比例1:1 ???? ex=[0,0.2,0,0,0,0,0] #设置突出的数据,数据表示离开中心点的距离 pie=plt.pie(x=size,labels=label,autopct='%1.1f%%',explode=ex,shadow=True, colors=color,pctdistance = 0.5) #画饼状图 #x 就是数据,饼状图就是根据这些数据来计算百分比的 #labels 标签 #autopct 在饼状图中显示出百分比 #pctdistance 百分比离中心点的距离 #explode 设置各部分离开中心点的距离 #shadow=True 加上阴影 #colors 设置各部分显示的颜色 for font in pie[1]: font.set_size(8) #设置标签字体大小 for digit in pie[2]: digit.set_size(20) #设置 百分比字体的大小 plt.legend(loc='upper right',bbox_to_anchor=(1.2, 1)) #显示图例
# loc: 表示位置,包括'upper right','upper left','lower right','lower left'等
# bbox_to_anchor: 表示legend距离图形之间的距离,当出现图形与legend重叠时,可使用bbox_to_anchor进行调整legend的位置
# 由两个参数决定,第一个参数为legend距离左边的距离,第二个参数为距离下面的距离
#'upper right'=1;'upper left'=2;'lower left'=3;'lower right'=4; 0 自适应找位置
#ncol 图例的列数
plt.show()
效果图
颜色:
八中内建颜色:
b:blue 蓝色
g:green 绿色
r:red 红色
c:cyan 青色
m:magenta 品红
y:yellow 黄色
k:black 黑色
w:white 白色
例子:
data=np.arange(1,5)
plt.plot(data,color='r')
其它三种表示方法:
plt.plot(data,color='0.2') 灰度表示法
#在color直接写数字,数字表示灰度的深浅【在0-1之间,1好像就完全透明了,0最深】
plt.plot(data,color='#FF0000') 十六进制表示法
plt.plot(data,color=(0.2,0.3,0)) #RGB元组表示法
【参数好像是个百分比】
样式字符串:
可以同时表达颜色、点型、线型
例如 plt.plot(data,'rX:')
r 表示红色 X表示点的形状 :表示虚线
天子骄龙:生命诚可贵、时光价更高