资讯专栏INFORMATION COLUMN

Python进阶Matplotlib库图绘制方法介绍

89542767 / 285人阅读

  小编写这篇文章的主要目的,主要是来给大家对Python的一些相关的知识,其内容主要有Matplotlib库图绘制方法的一些介绍。关于其具体的内容,下面就给大家详细的做出一个解答。


  中文字体设置:


  #字体设置
  plt.rcParams['font.sans-serif']=["SimHei"]
  plt.rcParams["axes.unicode_minus"]=False


  1、基本使用


  Matplotlib:是一个Python的2D绘图库,通过Matplotlib,开发者可以仅需要几行代码,便可以生成折线图,直方图,条形图,饼状图,散点图等。


  plot是一个画图的函数,他的参数:plot([x],y,[fmt],data=None,**kwargs)


  1.1、线条样式&颜色


  (1)点线形式

01.png

  (2)线条颜色

02.png

  import matplotlib.pyplot as plt
  import numpy as np
  #原始线图
  plt.plot(range(10),[np.random.randint(0,10)for x in range(10)])
  #点线图
  plt.plot(range(10),[np.random.randint(0,10)for x in range(10)],"*")
  #线条颜色
  plt.plot([1,2,3,4,5],[1,2,3,4,5],'r')#将颜色线条设置成红色


  运行结果:

03.png

  1.2、轴&标题


  1、设置图标题:plt.title


  2、设置轴标题:plt.xlabel&plt.ylabel-标题名称


  3、设置轴刻度:plt.xticks&plt.yticks-刻度长度,刻度标题


  范例:


  x=range(10)
  y=[np.random.randint(0,10)for x in range(10)]
  plt.plot(x,y,linewidth=10,color='red')
  #设置图标题
  plt.title("sin函数")
  #设置轴标题
  plt.xlabel("x轴")
  plt.ylabel("y轴")
  #设置轴刻度
  plt.xticks(range(10),["第%d天"%x for x in range(1,10)])
  plt.yticks(range(10),["第%d天"%x for x in range(1,10)])
  #加载字体
  plt.rcParams['font.sans-serif']=["SimHei"]
  plt.rcParams["axes.unicode_minus"]=False


  运行结果:

04.png

  1.3、marker设置


  marker:关键点重点标记


  范例:


  x=range(10)
  y=[np.random.randint(0,10)for x in range(10)]
  plt.plot(x,y,linewidth=10,color='red')
  #重点标记
  plt.plot(x,y,marker="o",markerfacecolor='k',markersize=10)

05.png

  1.4、注释文本


  annotate:注释文本


  范例:


  x=range(10)
  y=[np.random.randint(0,10)for x in range(10)]
  plt.plot(x,y,linewidth=10,color='red')
  #重点标记
  plt.plot(x,y,marker="o",markerfacecolor='k',markersize=10)
  #注释文本设置
  plt.annotate('local max',xy=(5,5),xytext=(10,15),
  arrowprops=dict(facecolor='black',shrink=0.05),
  )

  运行结果:

06.png

  1.5、设置图形样式


  plt.figure:调整图片的大小和像素


  `num`:图的编号,


  `figsize`:单位是英寸,


  `dpi`:每英寸的像素点,


  `facecolor`:图片背景颜色,


  `edgecolor`:边框颜色,


  `frameon`:是否绘制画板。


  范例:


  x=range(10)
  y=[np.random.randint(0,10)for x in range(10)]
  #设置图形样式
  plt.figure(figsize=(20,10),dpi=80)
  plt.plot(x,y,linewidth=10,color='red')


  运行结果:

07.png

  2、条形图


  应用场景:


  1.数量统计。


  2.频率统计。


  相关参数:


  barh:条形图


  1.`x`:一个数组或者列表,代表需要绘制的条形图的x轴的坐标点。


  2.`height`:一个数组或者列表,代表需要绘制的条形图y轴的坐标点。


  3.`width`:每一个条形图的宽度,默认是0.8的宽度。


  4.`bottom`:`y`轴的基线,默认是0,也就是距离底部为0.


  5.`align`:对齐方式,默认是`center`,也就是跟指定的`x`坐标居中对齐,还有为`edge`,靠边对齐,具体靠右边还是靠左边,看`width`的正负。


  6.`color`:条形图的颜色。


  2.1、横向条形图范例


  movies={
  "流浪地球":40.78,
  "飞驰人生":15.77,
  "疯狂的外星人":20.83,
  "新喜剧之王":6.10,
  "廉政风云":1.10,
  "神探蒲松龄":1.49,
  "小猪佩奇过大年":1.22,
  "熊出没·原始时代":6.71
  }
  plt.barh(np.arange(len(movies)),list(movies.values()))
  plt.yticks(np.arange(len(movies)),list(movies.keys()),fontproperties=font)
  plt.grid()

  运行结果:

08.png

  2.2、分组条形图


  范例:


  movies={
  "流浪地球":[2.01,4.59,7.99,11.83,16],
  "飞驰人生":[3.19,5.08,6.73,8.10,9.35],
  "疯狂的外星人":[4.07,6.92,9.30,11.29,13.03],
  "新喜剧之王":[2.72,3.79,4.45,4.83,5.11],
  "廉政风云":[0.56,0.74,0.83,0.88,0.92],
  "神探蒲松龄":[0.66,0.95,1.10,1.17,1.23],
  "小猪佩奇过大年":[0.58,0.81,0.94,1.01,1.07],
  "熊出没·原始时代":[1.13,1.96,2.73,3.42,4.05]
  }
  plt.figure(figsize=(20,8))
  width=0.75
  bin_width=width/5
  movie_pd=pd.DataFrame(movies)
  ind=np.arange(0,len(movies))
  #第一种方案
  for index in movie_pd.index:
  day_tickets=movie_pd.iloc[index]
  xs=ind-(bin_width*(2-index))
  plt.bar(xs,day_tickets,width=bin_width,label="第%d天"%(index+1))
  for ticket,x in zip(day_tickets,xs):
  plt.annotate(ticket,xy=(x,ticket),xytext=(x-0.1,ticket+0.1))
  #设置图例
  plt.ylabel("单位:亿")
  plt.title("春节前5天电影票房记录")
  #设置x轴的坐标
  plt.xticks(ind,movie_pd.columns)
  plt.xlim
  plt.grid(True)
  plt.show()

  运行结果:

09.png

  2.3、堆叠条形图


  范例:


  menMeans=(20,35,30,35,27)
  womenMeans=(25,32,34,20,25)
  groupNames=('G1','G2','G3','G4','G5')
  xs=np.arange(len(menMeans))
  plt.bar(xs,menMeans)
  plt.bar(xs,womenMeans,bottom=menMeans)
  plt.xticks(xs,groupNames)
  plt.show()


  运行结果:

10.png

  3、直方图


  plt.hist:直方图


  1.x:数组或者可以循环的序列;


  2.bins:数字或者序列(数组/列表等);


  3.range:元组或者None,如果为元组,那么指定`x`划分区间的最大值和最小值;


  4.density:默认是`False`,如果等于`True`,那么将会使用频率分布直方图;


  5.cumulative:如果这个和`density`都等于`True`,那么返回值的第一个参数会不断的累加,最终等于`1`。


  应用场景:


  1.显示各组数据数量分布的情况。


  2.用于观察异常或孤立数据。


  3.抽取的样本数量过小,将会产生较大误差,可信度低,也就失去了统计的意义。因此,样本数不应少于50个。


  3.1、直方图


  范例:


  durations=[131,98,125,131,124,139,131,117,128,108,135,138,131,102,107,114,119,128,121,142,127,130,124,101,110,116,117,110,128,128,115,99,136,126,134,95,138,117,111,78,132,124,113,150,110,117,86,95,144,105,126,130,126,130,126,116,123,106,112,138,123,86,101,99,136,123,117,119,105,137,123,128,125,104,109,134,125,127,105,120,107,129,116,108,132,103,136,118,102,120,114,105,115,132,145,119,121,112,139,125,138,109,132,134,156,106,117,127,144,139,139,119,140,83,110,102,123,107,143,115,136,118,139,123,112,118,125,109,119,133,112,114,122,109,106,123,116,131,127,115,118,112,135,115,146,137,116,103,144,83,123,111,110,111,100,154,136,100,118,119,133,134,106,129,126,110,111,109,141,120,117,106,149,122,122,110,118,127,121,114,125,126,114,140,103,130,141,117,106,114,121,114,133,137,92,121,112,146,97,137,105,98,117,112,81,97,139,113,134,106,144,110,137,137,111,104,117,100,111,101,110,105,129,137,112,120,113,133,112,83,94,146,133,101,131,116,111,84,137,115,122,106,144,109,123,116,111,111,133,150]
  plt.figure(figsize=(15,5))
  nums,bins,patches=plt.hist(durations,bins=20,edgecolor='k')
  plt.xticks(bins,bins)
  for num,bin in zip(nums,bins):
  plt.annotate(num,xy=(bin,num),xytext=(bin+1.5,num+0.5))
  plt.show()

  运行结果:

11.png

  3.2、频率直方图


  density:频率直方分布图


  范例:


  nums,bins,patches=plt.hist(durations,bins=20,edgecolor='k',density=True,cumulative=True)
  plt.xticks(bins,bins)
  for num,bin in zip(nums,bins):
  plt.annotate("%.4f"%num,xy=(bin,num),xytext=(bin+0.2,num+0.0005))


  运行结果:

12.png

  3.3、直方图


  cumulative参数:nums的总和为1


  范例:


  plt.figure(figsize=(15,5))
  nums,bins,patches=plt.hist(durations,bins=20,edgecolor='k',density=True,cumulative=True)
  plt.xticks(bins,bins)
  for num,bin in zip(nums,bins):
  plt.annotate("%.4f"%num,xy=(bin,num),xytext=(bin+0.2,num+0.0005))


  运行结果:

13.png

  4、散点图


  plt.scatter:散点图绘制:


  1.x,y:分别是x轴和y轴的数据集。两者的数据长度必须一致。


  2.s:点的尺寸。


  3.c:点的颜色。


  4.marker:标记点,默认是圆点,也可以换成其他的。


  范例:


  plt.scatter(x=data_month_sum["sumprice"]#传入X变量数据
  ,y=data_month_sum["Quantity"]#传入Y变量数据
  ,marker='*'#点的形状
  ,s=10#点的大小
  ,c='r'#点的颜色
  )
  plt.show()


  运行结果:

14.png

  5、饼图


  饼图:一个划分为几个扇形的圆形统计图表,用于描述量、频率或百分比之间的相对关系的。


  在matplotlib中,可以通过plt.pie来实现,其中的参数如下:


  x:饼图的比例序列。labels:饼图上每个分块的名称文字。explode:设置某几个分块是否要分离饼图。autopct:设置比例文字的展示方式。比如保留几个小数等。shadow:是否显示阴影。textprops:文本的属性(颜色,大小等)。范例


  plt.figure(figsize=(8,8),dpi=100,facecolor='white')
  plt.pie(x=StockCode.values,#数据传入
  radius=1.5,#半径
  autopct='%.2f%%'#百分比显示
  ,pctdistance=0.6,#百分比距离圆心比例
  labels=StockCode.index,#标签
  labeldistance=1.1,#标签距离圆心比例
  wedgeprops={'linewidth':1.5,'edgecolor':'green'},#边框的线宽和颜色
  textprops={'fontsize':10,'color':'blue'})#文本字体大小和颜色
  plt.title('商品销量占比',pad=100)#设置标题及距离坐标轴的位置
  plt.show()

  运行结果:

15.png

  6、箱线图


  箱图的绘制方法是:


  :1、先找出一组数据的上限值、下限值、中位数(Q2)和下四分位数(Q1)以及上四分位数(Q3)


  :2、然后连接两个四分位数画出箱子


  :3、再将最大值和最小值与箱子相连接,中位数在箱子中间。


  中位数:把数据按照从小到大的顺序排序,然后最中间的那个值为中位数,如果数据的个数为偶数,那么就是最中间的两个数的平均数为中位数。


  上下四分位数:同样把数据排好序后,把数据等分为4份。出现在`25%`位置的叫做下四分位数,出现在`75%`位置上的数叫做上四分位数。但是四分位数位置的确定方法不是固定的,有几种算法,每种方法得到的结果会有一定差异,但差异不会很大。


  上下限的计算规则是:


  IQR=Q3-Q1


  上限=Q3+1.5IQR


  下限=Q1-1.5IQR


  在matplotlib中有plt.boxplot来绘制箱线图,这个方法的相关参数如下:


  x:需要绘制的箱线图的数据。notch:是否展示置信区间,默认是False。如果设置为True,那么就会在盒子上展示一个缺口。sym:代表异常点的符号表示,默认是小圆点。vert:是否是垂直的,默认是True,如果设置为False那么将水平方向展示。whis:上下限的系数,默认是1.5,也就是上限是Q3+1.5IQR,可以改成其他的。也可以为一个序列,如果是序列,那么序列中的两个值分别代表的就是下限和上限的值,而不是再需要通过IQR来计算。positions:设置每个盒子的位置。widths:设置每个盒子的宽度。labels:每个盒子的label。meanline和showmeans:如果这两个都为True,那么将会绘制平均值的的线条。


  范例:


  #箱线图-主要观察数据是否有异常(离群点)
  #箱须-75%和25%的分位数+/-1.5倍分位差
  plt.figure(figsize=(6.4,4.8),dpi=100)
  #是否填充箱体颜色,是否展示均值,是否展示异常值,箱体设置,异常值设置,均值设置,中位数设置
  plt.boxplot(x=UnitPrice#传入数据
  ,patch_artist=True#是否填充箱体颜色
  ,showmeans=True#是否展示均值
  ,showfliers=True#是否展示异常值
  ,boxprops={'color':'black','facecolor':'white'}#箱体设置
  ,flierprops={'marker':'o','markersize':4,'markerfacecolor':'red'}#异常值设置
  ,meanprops={'marker':'o','markersize':6,'markerfacecolor':'indianred'}#均值设置
  ,medianprops={'linestyle':'--','color':'blue'}#中位数设置
  )
  plt.show()


  运行结果:

16.png

  7、雷达图


  雷达图:又被叫做蜘蛛网图,适用于显示三个或更多的维度的变量的强弱情况


  plt.polar来绘制雷达图,x轴的坐标点应该为弧度(2*PI=360°)


  范例:


  import numpy as np
  properties=['输出','KDA','发育','团战','生存']
  values=[40,91,44,90,95,40]
  theta=np.linspace(0,np.pi*2,6)
  plt.polar(theta,values)
  plt.xticks(theta,properties)
  plt.fill(theta,values)


  注意事项:


  因为polar并不会完成线条的闭合绘制,所以我们在绘制的时候需要在theta中和values中在最后多重复添加第0个位置的值,然后在绘制的时候就可以和第1个点进行闭合了。


  polar只是绘制线条,所以如果想要把里面进行颜色填充,那么需要调用fill函数来实现。


  polar默认的圆圈的坐标是角度,如果我们想要改成文字显示,那么可以通过xticks来设置。


  综上所述,这篇文章就给大家介绍到这里了,希望可以给大家带来帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128401.html

相关文章

  • Python进阶量化交易场外篇2——线性回归拟合股价沉浮

    摘要:由于线性回归作用于股票收盘价的整个周期,因此选择合适的时间段非常重要。在制定量化交易策略时有一种方式是寻找现象中的特征,根据特征去生成交易条件。 新年伊始,很荣幸笔者的《教你用 Python 进阶量化交易》专栏在慕课专栏板块上线了,欢迎大家订阅!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外会陆续推出一些手记来辅助同学们学习本专栏内容,因此同学们无需担心专栏内容在学习上的困难,...

    loonggg 评论0 收藏0
  • Python中如何使用Matplotlib绘制图形

      Python Matplotlib作为一种可视化的工具,可以利用其可视化的应用,去做到绘制图形,比如可以利用其Matplotlib去进行绘制图形,具体的操作方法要做到什么样呢?下面就给大家详细解答下。  前言  Matplotlib可能是Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。这里将会探索使用matplotlib库实现简单的图形...

    89542767 评论0 收藏0
  • python数学建模Matplotlib绘制方法介绍

      小编写这篇文章的一个主要目的,主要是来给大家去做一个相关的自我介绍,介绍关于python是怎么进行数学建模的,怎么使用Matpolibd呢?具体的使用方法是什么呢?下面就给大家详细的去做一个解答。  Matplotlib简介  #Matplotlib简介:   '''   使用Matplotlib在Python中创建图表【Matplotlib是用于创建图表的Python...

    89542767 评论0 收藏0
  • 【数据科学系统学习】Python # 数据分析基本操作[三] matplotlib

    摘要:有一些表示常见图形的对象称为块,完整的集合位于。中的绘图函数在中,有行标签列标签分组信息。密度图通过计算可能会产生观测数据的连续概率分布的估计而产生的。在探索式数据分析工作中,同时观察一组变量的散布图是很有意义的。 我们在上一篇介绍了 pandas,本篇介绍 matplotlib。 绘图和可视化 一个用于创建出版质量图表的桌面绘图包。 Matplotlib API入门 Figure ...

    BDEEFE 评论0 收藏0
  • python玩微信(聊天机器人,好友信息统计)

    摘要:用实现微信好友性别及位置信息统计这里使用的库开发。使用图灵机器人自动与指定好友聊天让室友帮忙测试发现发送表情发送文字还能回应,但是发送图片可能不会回复,猜应该是我们申请的图灵机器人是最初级的没有加图片识别功能。 1.用 Python 实现微信好友性别及位置信息统计 这里使用的python3+wxpy库+Anaconda(Spyder)开发。如果你想对wxpy有更深的了解请查看:wxpy...

    Youngs 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<