matpoltlib各种图形用法及示例

# -*- coding: utf-8 -*-

#=================================================================
#一、先看折线图
#=================================================================

import matplotlib.pyplot as plt
import numpy as np
import os


# x = [1,2,3,4]
# y1 = [1,2,3,4]
# y2 = [2,4,6,8]
# y3 = [3,6,8,9]
# print(x)
# plt.plot(x, y1, label='Normal',color = 'g')
# plt.plot(x, y2, label='Fast',color = 'r')
# plt.plot(x, y3, label='Slow',color = 'b')
# plt.legend(loc='best')
# plt.show()
# class SystemStablity:
#     def __init__(self,x):
#         self.x = self.strtofloat(x[1:])
#         self.xlableshow = x[0]
#     def plotshow(self,ylist,path):
#         for y in ylist:
#             ylable = y[0]
#             yshow = self.strtofloat(y[1:])
#             plt.plot(self.x , yshow, label= ylable, color='g')
#             plt.legend(loc='best')
#         plt.xlabel(self.xlableshow)
#         plt.x
#         plt.savefig(path)
#         plt.show()
#     def strtofloat(self,data):
#         data = [int(i) for i in data]
#         return data
class SystemStablity:
    def __init__(self,x):
        self.timelable = self.strtidatetime(x[1:])
        self.xlableshow = x[0]
        self.position = np.arange(len(self.timelable))
    def plotshow(self,ylist,path):
        for y in ylist:
            ylable = y[0]
            yshow = self.strtofloat(y[1:])
            #画值
            plt.plot(yshow, label= ylable)
            #确定标签的位置和标签内容及格式
            plt.xticks(self.position, self.timelable, rotation=270)
            plt.legend(loc='best')
        plt.xlabel(self.xlableshow)
        plt.savefig(path,bbox_inches = 'tight',dpi = 100)
        plt.show()
    def strtofloat(self,data):
        data = [int(i) for i in data]
        return data
    def strtidatetime(self,data):
        data = [i[:4]+'/'+i[4:6]+'/' + i[6:8] +' '+i[8:10]+':'+i[10:12] for i in data]
        return data


if __name__ == '__main__':
    x = ['test',1,2,3,4]
    y1 = [['first',1,2,3,4],['second',5,6,7,8]]
    path = os.getcwd()+'\\report\\myfirst.png'
    print(path)
    systemstablity = SystemStablity(x)
    systemstablity.plotshow(y1,path)

# #plot 是线形图
# #示例1:
# x = range(6)
# plt.plot(x, [xi**2 for xi in x])
# plt.show()
#
#
# #示例2:
#
# #用numpy生成一个列表
# x = np.arange(1,5)
# print('展示一下x:',x)
# #展示3根曲线(3组对应关系)
# plt.plot(x, x*1.5, x, x*3.0, x, x/3.0)
# #grid是否有网格线,屏蔽对比效果
# plt.grid(True)
# plt.show()


#示例3:
#linspace:通过定义均匀间隔创建数值序列。需要指定间隔起始点、终止端,以及指定分隔值总数(包括起始点和终止点);最终函数返回间隔类均匀分布的数值序列。请看示例:
#np.cos(x) x的余弦值
#axis:坐标轴范围
#注意看lable 和 title的区别

# x = np.linspace(0, 200, 100)
# print('展示一下x:',x)
# plt.plot(x, np.cos(x))
# plt.axis([25, 150, -1, 0])
# plt.xlabel('Time(s)')
# plt.ylabel('Cos(x)')
# plt.title('A cosine curve with limited x and y')
# plt.show()

#示例4
#设置图例位置:plt.legend(loc=‘xxx’)
#'right','center'等

# x = np.arange(1, 5)
# plt.plot(x, x*1.5, label='Normal',color = 'g')
# plt.plot(x, x*3.0, label='Fast',color = 'r')
# plt.plot(x, x/3.0, label='Slow',color = 'b')
# plt.legend(loc='best')
# plt.show()
# #此处要注意原因:在 plt.show() 后调用了 plt.savefig() ,在 plt.show() 后实际上已经创建了一个新的空白的图片(坐标轴),这时候你再 plt.savefig() 就会保存这个新生成的空白图片
# # 因此需要将plt.savefig()放在plt.show()之前,又或者是使用plt.gcf()固定图片,再保存
# plt.savefig('myfig.png')
# #dpi是分辨率,为了更清晰。
# #将bbox_inches参数设置为'tight',这个参数的意思是指定要导出的图框位置,设置为tight可以理解为自适应地找到一个能包含所有元素的框
# plt.savefig('pic.jpg',dpi = 100,bbox_inches = 'tight')

#示例5
# y = np.arange(1, 3, 0.3)
# #r  b  y 代表颜色;x-  o:  p-.代表线的形状
# plt.plot(y, 'rx-', y+1, 'bo:', y+2, 'yp-.')
# plt.show()


#示例6
#errorbar,函数用于表现有一定置信区间的带误差数据
#np.random.randn(3):输出一行len(y)列的一维数组,
#演示一下:[0.51030667 0.64763246 0.980867  ]


# print('np.random.randn(3):',np.random.randn(3))
#
# x = np.arange(0, 4, 0.2)
# print('展示一下x:',x)
# ##e的-x幂次方,e = 2.718281828459,e是一个无限不循环小数
# y = np.exp(-x)
# print('展示一下y:',y)
# e1 = 0.1 * np.abs(np.random.randn(len(y)))
# print('e1:',e1)
# e2 = 0.1 * np.abs(np.random.randn(len(y)))
# print('e2:',e2)
# #yerr 代表y轴的误差限;xerr代表x轴的误差限;fmt代表线型#fmt :   'o' ',' '.' 'x' '+' 'v' '^' '<' '>' 's' 'd' 'p';capsize:代表线上面横线的长度,可以修改代码来演示。
# plt.errorbar(x, y, yerr=e1, xerr=e2, fmt='.-', capsize=1)
# plt.show()


#=================================================================
#二、下面看条形图
#=================================================================
# #示例1:
# plt.bar([1, 2, 3], [3, 2, 5])
# plt.show()

#示例2:横坐标、纵坐标和条形的宽度
# plt.bar([1, 2, 3], [3, 2, 5],[0.2,1,0.8])
# plt.show()


#示例3:
# data1 = 10*np.random.rand(5)
# data2 = 10*np.random.rand(5)
# data3 = 10*np.random.rand(5)
# e2 = 0.5 * np.abs(np.random.randn(len(data2)))
# locs = np.arange(1, len(data1)+1)
# width = 0.2
# plt.bar(locs, data1, width=width)
# plt.bar(locs+width, data2, yerr=e2, width=width, color='red')
# plt.bar(locs+2*width, data3, width=width, color='green')
# #获取或设置当前x轴刻度位置和标签,就是把坐标轴改成自己要的样子
# #locs + width 显示位置;locs:每个位置对应的标签,修改[10,11,12,13,14]来演示;rotation标签显示的角度
#
# plt.xticks(locs + width,locs,rotation = 30)
# plt.show()

#=================================================================
#三、下面看棉棒图
#=================================================================
#示例1:
# x = np.linspace(0.1, 2 * np.pi, 41)
# print('np.pi:',np.pi)
# y = np.exp(np.sin(x))
# plt.stem(x, y, linefmt='o--')
# plt.show()

#=================================================================
#下面看饼状图
#=================================================================
#示例1
#figsize:创建图形,指定figure的宽和高,单位为英寸;--可以改变数值来验证;
#facecolor 画布颜色  grey,blue,red
# plt.figure(figsize=(3,3),facecolor=None)
# x = [45, 35, 20]
# labels = ['Cats', 'Dogs', 'Fishes']
# plt.pie(x, labels=labels)
# plt.show()

#示例2:
# x = [4, 9, 21, 55, 30, 18]
# labels = ['Swiss', 'Austria', 'Spain', 'Italy', 'France', 'Benelux']
# #explode:控制每一块的偏移量,用于突出某一块饼。
# explode = [0.2, 0.1, 0, 0, 0.1, 0]
# #autopct:控制数值的精度和格式,例如'%.1f%%'表示小数点后保留一位。
# plt.pie(x, labels=labels, explode=explode, autopct='%1.1f%%')
# plt.show()


#=================================================================
#四、下面看散点图
#=================================================================
#示例1:
# x = np.random.randn(1000)
# y = np.random.randn(1000)
# plt.scatter(x, y)
# plt.show()


#=================================================================
# 五、add_subplot 使用指定行列数的方式来创建子图,排列顺序从左到右、从上到下。
#=================================================================

#示例1
#使用指定行列数的方式来创建子图,排列顺序从左到右、从上到下。
# fig = plt.figure()
# #add_subplot(211):创建2行1列排布的第1个子图
# ax1 = fig.add_subplot(211)
# ax1.plot([1, 2, 3], [1, 2, 3])
# #fig.add_subplot(212): 创建2行1列排布的第2个子图
# ax2 = fig.add_subplot(212)
# ax2.plot([1, 2, 3], [3, 2, 1])
# plt.show()

#示例2
# fig,ax = plt.subplots(2,2)
# ax[0,0].plot(np.arange(10),linestyle = '--',color = '#CECECE')
# ax[0,1].plot(np.random.randn(30).cumsum(),'ro--')
# ax[1,0].plot(np.random.randn(30).cumsum(),color = 'g',linestyle = '--',marker = '*')
# plt.show()

#示例3
# x=np.arange(-9,1,1)
# y1=100-x*x
# y2=100-x*x
# plt.plot(x,y1,'r',x+18,y2,'r')
# plt.show()

#示例4:
# x = np.arange(1, 5)
# plt.plot(x, x*1.5, label='Normal',color = 'g')
# plt.plot(x, x*3.0, label='Fast',color = 'r')
# plt.plot(x, x/3.0, label='Slow',color = 'b')
# plt.legend(loc='best')
# plt.show()

#=================================================================
#六、刻度与标签
#=================================================================
# #示例1:
# fig = plt.figure()
# ax = fig.add_subplot(1,1,1)
# #np.random.randn(1000):1000个数的一维数组
# ax.plot(np.random.randn(1000).cumsum())
# print('np.random.randn(1000):',np.random.randn(1000))
# print('np.random.randn(1000).cumsum()',np.random.randn(1000).cumsum())
# # 设置刻度有两个方法:
# # ax.set_xticks()设置刻度 ,matplotlib将刻度放在对应范围的哪个位置,默认情况下这些刻度就是刻度标签;
# # ax.set_xticklabels(),可以将任何其他类型的值作为标签,可以赋值给之前已经设置过的set_xtick。
# # rotation 角度改成None,标签就没有角度了。
# ticks = ax.set_xticks([0,250,500,700,900,1000])
# #['a','b','c','d','e','f']
# labels = ax.set_xticklabels(['a','b','c','d','e','f'],rotation = 30,fontsize = 'large')
# ax.set_xlabel('Stages')
# plt.show()

#示例1.1 看一下np.cumsum的用法
#
# a = np.array([1, 2, 3, 4, 5])
# result1 = np.cumsum(a, axis=0)
# result2 = np.cumsum(a[::-1])[::-1]
# print(result1)
# print(result2)
# #
# # 以上代码分别演示了正向和反向累加的效果。其中,result1是正向累加,得到的结果为[1, 3, 6, 10, 15],result2是反向累加,得到的结果为[15, 14, 12, 9, 5]。
# # 对于一维数组a,cumsum函数也可以指定dtype参数,用于返回的结果类型。
# a = np.array([1, 2, 3, 4, 5])
# result = np.cumsum(a, dtype=float)
# print(result)

#七、Pandas
#Pandas会默然用0到n-1来作为series的index,但也可以自己指定index(可以把index理解为dict里面的key)
# s = pd.Series(np.random.randn(10).cumsum(),index = np.arange(0,100,10))
# print('s:',s)
# s.plot(use_index = True)
# plt.show()
 

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值