import matplotlib.pyplot as plt import numpy as np x = np.linspace(-10, 20, 50, True) y = 2 * x + 5 # 一、画散点图 plt.scatter(x,y,s=40,c='Orange',edgecolors='k',marker='s',alpha=0.5) #s:大小;c:内部颜色;edgecolors:边框颜色;marker:点的形状;alpha:透明度 plt.show() # 二、画折线图与线段 plt.figure() plt.plot(x, y, label='line1') plt.plot(x, y + 4, c='r', lw=2, ls=':', label='line2') # c:颜色;lw:线宽;ls:线段类型,有“:”“--”“-”等;lebel:画图图例; plt.plot([-10, 0], [-10, 0], ls='--', label='line3') # 两点连线 plt.legend() plt.show() # 三、画柱状图 # 1、单一柱状图 plt.figure() bar_x = np.arange(5) bar_y = np.arange(5) rects = plt.bar(bar_x, height=bar_y, width=0.8,orientation='vertical') # 给每个柱添加数据标识 for rect in rects: plt.text(rect.get_x() + rect.get_width() / 2, rect.get_height(), rect.get_height(), ha='center', va='bottom') plt.show() # 2、横向柱状图 # method 1 : plt.figure() plt.barh(bar_y,bar_x,height=0.8,left=0) #left柱状图左边的起始位置,0表示从x=0开始 plt.show() # method 2 : plt.figure() plt.bar(x=0,bottom=bar_x, width=bar_y, height=0.5,orientation='horizontal') #bottom:柱状图底部起始位置为y=bar_x,orientation设置柱状图方向 plt.show() # 3、并列图 plt.figure() plt.bar(bar_x, height=bar_y, width=0.2,orientation='vertical',color='b') #第一个蓝色柱状图 plt.bar(bar_x+0.2, height=bar_y, width=0.2,orientation='vertical',color='r') #第二个红色柱状图,用bar_x+0.2设置宽度及柱状图偏移的方式将其与第一个图分开 plt.show() # 4、堆叠图 plt.figure() plt.bar(bar_x, height=bar_y, width=0.2,orientation='vertical',color='b') #第一个蓝色柱状图 plt.bar(bar_x, height=bar_y, width=0.2,bottom=bar_x,orientation='vertical',color='r') #第二个红色柱状图,用bottom=bar_x设置底部起点的方式将其与第一个图分开 plt.show() # 四、直方图(频数图) plt.hist(np.random.normal(0,2,1000),bins=100,density=True) #bins:分箱个数,若传入一个list,如[0,1,2,3]表示根据0、1、2、3位断点分箱 plt.show() # 五、饼状图 plt.figure() plt.axes(aspect=1) #设置xy比例不然饼状图会被压扁 plt.pie([1,2,3,4,5],explode=[0.5,0,0,0,0],labels=list('abcde'),autopct='%.2f%%',shadow=True) #explode:一个list表示每一部分离中心的距离,autopct='%.2f%%'显示百分比,shadow=True生成阴影更好看 plt.show() # 六、箱形图 plt.figure() plt.boxplot(np.random.normal(0,1,1000),sym='o',whis=1.5) #sym异常点显示类型,whis设置异常点范围,[Q1-whis*IQR,Q3+whis*IQR]以外的为异常值 plt.figure() plt.boxplot(np.random.normal(0,1,(1000,4)),sym='o',whis=1.5) #传入多维数组可以画多个箱形图 plt.show() # 七、画坐标轴为日期的图 d=['2019-01','2019-02','2019-03','2019-04','2019-05','2019-06','2019-07','2019-08','2019-09','2019-10','2019-11','2019-12'] plt.plot_date(d,y[0:12]) plt.show() # 八、设置画板figure plt.figure(num='fig1',figsize=(8,6),facecolor='w',edgecolor='k') #num:画板名,figsize=(8,6)画板长宽,facecolor:底色,edgecolor边框颜色 plt.title('fig1') 添加图标题 plt.plot([0,1],[0,1]) plt.figure(num='fig2') #定第二个画板,可以显示两个图,不然会在原来的fig2上覆盖 plt.title('fig2') plt.plot([0,1],[1,0]) # 获取当前图标与子图可以使用plt.gcf()和plt.gca()获得,分别表示Get Current Figure和Get Current Axes,在pyplot模块中, # 许多函数都是对当前的Figure或Axes对象进行处理,比如说:plt.plot()实际上会通过plt.gca()获得当前的Axes对象ax,然后再调用ax.plot()方法实现真正的绘图。 plt.show() # 九、坐标轴设置 plt.figure() plt.title('fig1') plt.xlim((0, 10)) # 修改x坐标轴范围 plt.plot([0, 20], [20, 0]) plt.xlabel(r'$x\ label$') # 添加x轴标签,matplotlib中使用$$表示latex数学字符,空格要用\转义 plt.figure() plt.title('fig2') plt.xticks(np.linspace(0, 10, 3, True)) # 修改x标签的数值间隔 plt.plot([0, 10], [10, 0]) plt.figure() plt.title('fig3') plt.xticks(ticks=np.linspace(0, 10, 3, True), labels=['2015', '2016', '2017']) # 用lebals替换x轴ticks的对应数值 plt.plot([0, 10], [10, 0]) plt.figure() plt.title('fig4') ax = plt.gca() ax.spines['right'].set_color('None') # 去除右坐标轴颜色,相当于隐藏,spines表示子图方框线集合,left、bottom、right、top表示四个方框线 ax.spines['top'].set_color('None') # 去除上坐标轴颜色,相当于隐藏 ax.xaxis.set_ticks_position('bottom') # 设置x轴位置为底部,可设置为上侧top ax.yaxis.set_ticks_position('left') # 设置y轴位置为左侧,可设置为右侧right ax.spines['bottom'].set_position(('data', 5)) # 底部的坐标轴放在y=5的位置,data表示采用数据轴,(data,5)替换成(axes,0.5)则表示放在y轴%50的位置 ax.spines['left'].set_position(('data', 5)) # 左侧的坐标轴放在x=5的位置 plt.plot([0, 10], [10, 0]) plt.show() #十、绘制图例 plt.figure() l1,=plt.plot(x,y,c='g',label='y=2*x+5') #返回值不止一个所以l1后面加一个逗号,参数label为画图图例 l2,=plt.plot(x,-y,c='y',label='y=2*x+5') plt.legend(loc='upper center') #显示所有画图图例,参数loc为图例位置,默认为loc='best',自动选取位置 plt.figure() l1,=plt.plot(x,y,c='g',label='y=2*x+5') l2,=plt.plot(x,-y,c='y',label='y=2*x+5') plt.legend(handles=[l1,l2],labels=['f=2*x+5','f=2*x+5'],loc='') #对特定的图添加指定的图例说明,参数handles为line对象 plt.show() # 十一、添加注解 # 1、给点添加注解 plt.figure() plt.scatter(1, 1, c='r', marker='o') # 画(1,1)点 plt.annotate(s=r'$this\ is\ an\ annotate$', xy=(1, 1), xycoords='data', xytext=(30, -30), textcoords='offset points', fontsize=16, arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2')) #s:注释;xy:要注释的点的坐标;xycoords='data':点的坐标为数据坐标;xytext=(30, -30):注释的坐标为(30,-30); # textcoords='offset points':注释的坐标轴为以点为原点进行偏移;fontsize:字体大小; # arrowprops:设定箭头,arrowstyle箭头类型为'->',connectionstyle连接类型为'arc3,rad=.2' # 2、在指定位置添加注解 plt.figure() plt.scatter(1, 1, c='r', marker='o') # 画(1,1)点 plt.text(1,1,r'$this\ is\ a\ text$',fontdict=dict(size=16,color='r'), ha='center', va='bottom') #在点(1,1)处添加文档,ha、va表示左右上下对齐方式 plt.show() # 十二、绘制多个图在一个面板中 # method 1 :在大小相同的格子中画图 plt.subplot(221) #画板分为2*2,在位置1画图 plt.plot(x, y) plt.scatter(5,0,marker='o',edgecolors='b',facecolors='r') plt.subplot(222) plt.plot(x,-y) plt.show() # method 2 :在自定义大小的格子中画图 ax1=plt.subplot2grid((3,3),(0,0),colspan=3,rowspan=1) #画板分成3*3网格,ax1位置在(0,0),跨度为3列1行 ax1.plot([0,1],[0,1]) ax1.set_title('ax1') ax2=plt.subplot2grid((3,3),(1,1),colspan=3,rowspan=3) #画板分成3*3网格,ax1位置在(1,1),跨度为3列3行 ax2.plot(x,-y) ax2.set_title('ax2') ax3=plt.subplot2grid((3,3),(1,0),colspan=1,rowspan=1) #画板分成3*3网格,ax1位置在(1,0),跨度为1列1行 ax3.plot(x,-y) ax3.set_title('ax3') plt.show() # 十三、图中图,利用在同一画板定义多个坐标轴实现 fig=plt.figure() left,bottom,width,height=0.1,0.1,0.8,0.8 #定义坐标轴的左、下坐标轴位置,宽、高的跨度,用百分比的形式 ax1=fig.add_axes([left,bottom,width,height]) #加入第一个坐标轴 ax1.plot(x,y,c='y') ax1.set_titile('ax1') ax2=fig.add_axes([left,bottom,width,height]) #加入第二个坐标轴 ax2.plot(x,-y,c='g') ax2.set_titile('ax2') plt.show() # 十四、主次坐标轴 fig,ax1=plt.subplots() ax2=ax1.twinx() #镜像ax1得到次坐标轴 ax1.plot([0,1],[0,1],c='r') ax2.plot([0,1],[1,0],c='y') plt.show()