matplotlib画折线图怎么画多条线,matplot画折线图

  matplotlib画折线图怎么画多条线,matplot画折线图

  大家好,今天分享一个非常有趣的计算机编程语言教程,如何美化一个绘制精美的图表折线图,喜欢记得收藏、关注、点赞。

  注:数据、完整代码、技术交流文末获取

  1.导入包进口熊猫作为螺纹中径

  将matplotlib.pyplot作为血小板计数导入

  将matplotlib.ticker作为心脏导入

  将matplotlib.gridspec作为gridspec2导入。获得数据file _ id= 1yM _ f93 ny 4 qkxjlkl 3 gzdccqenbia 2 ltb

  url=fhttps://drive.google.com/uc?id={文件id}

  df=pd.read_csv(网址,索引列=0)

  df数据长得是这样的:

  3.对数据做一些预处理按照需要,对数据再做一些预处理,代码及效果如下:

  home_df=df.copy()

  home _ df=home _ df。melt(id _ vars=[ date , home_team_name , away_team_name])

  home_df[venue]=H

  home _ df。rename(columns={ home _ team _ name : team , away _ team _ name : opposite },inplace=True)

  home _ df。replace({ variable :{ home _ team _ xG : xG _ for , away_team_xG:xG_ag}},inplace=True)away_df=df.copy()

  远离_ df=远离_ df。melt(id _ vars=[ date , away_team_name , home_team_name])

  away_df[venue]=A

  away _ df。rename(columns={ away _ team _ name : team , home _ team _ name : opposite },inplace=True)

  away _ df。替换({ variable :{ away _ team _ xG : xG _ for , home_team_xG:xG_ag}},in place=True)df=PD。concat([home _ df,away_df]).reset_index(drop=True)

  df

  4.画图# -过滤数据

  y _ for=df[(df[ team ]= Lazio )(df[ variable ]= xG _ for )][ value ].reset_index(drop=True)

  y _ ag=df[(df[ team ]= Lazio )(df[ variable ]= xG _ ag )][ value ].reset_index(drop=True)

  X_=pd .系列(range(len(Y_for)))

  # -计算滚动平均值

  Y_for=Y_for.rolling(窗口=5,最小周期=0).平均值()#最小周期数用于部分平均值。

  Y_ag=Y_ag.rolling(window=5,min_periods=0).mean()fig,ax=plt.subplots(figsize=(7,3),dpi=200)

  ax.plot(X_,Y_for)

  ax.plot(X_,Y_ag)

  使用绘制精美的图表倒是可以快速把图画好了,但是太丑了。接下来进行优化。

  4.1 优化:添加点这里为每一个数据添加点

  fig,ax=plt.subplots(figsize=(7,3),dpi=200)

  # -删除脊线并添加网格线

  ax.spines[左]。set_visible(False)

  ax.spines[top].set_visible(False)

  ax.spines[右]。set_visible(False)

  ax.grid(ls= -,lw=0.5,color=#4E616C )

  # -数据

  ax.plot(X_,Y_for,marker=o )

  ax.plot(X_,Y_ag,marker=o )

  4.2 优化:设置刻度fig,ax=plt.subplots(figsize=(7,3),dpi=200)

  # -删除脊线并添加网格线

  ax.spines[左]。set_visible(False)

  ax.spines[top].set_visible(False)

  ax.spines[右]。set_visible(False)

  ax.grid(ls= -,lw=0.25,color=#4E616C )

  # -数据

  ax.plot(X_,Y_for,marker=o ,mfc=white ,ms=5)

  ax.plot(X_,Y_ag,marker=o ,mfc=white ,ms=5)

  # -调整滚动条和书脊以匹配网格的风格

  斧头。xaxis。set _ major _ locator(ticker .多重定位器(2)) #收报机每2个比赛日

  X ticks _=ax。xaxis。set _ tick标签([X-1表示范围内的X(0,len(X_) 3,2)])

  #最后一行输出

  # [-1, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35]

  #我们每两个位置标记一次。

  斧头。xaxis。set _ tick _ params(length=2,color=#4E616C ,labelcolor=#4E616C ,labelsize=6)

  斧头。雅克斯。set _ tick _ params(length=2,color=#4E616C ,labelcolor=#4E616C ,labelsize=6)

  ax.spines[bottom].set _ edge颜色(# 4e 616 c)

  4.3 优化:设置填充fig,ax=plt.subplots(figsize=(7,3),dpi=200)

  # -删除脊线并添加网格线

  ax.spines[左]。set_visible(False)

  ax.spines[top].set_visible(False)

  ax.spines[右]。set_visible(False)

  ax.grid(ls= -,lw=0.25,color=#4E616C )

  # -数据

  ax.plot(X_,Y_for,marker=o ,mfc=white ,ms=5)

  ax.plot(X_,Y_ag,marker=o ,mfc=white ,ms=5)

  # -填充之间

  ax.fill_between(x=X_,y1=Y_for,y2=Y_ag,alpha=0.5)

  # -调整滚动条和书脊以匹配网格的风格

  斧头。xaxis。set _ major _ locator(ticker .多重定位器(2)) #收报机每2个比赛日

  X ticks _=ax。xaxis。set _ tick标签([X-1表示范围内的X(0,len(X_) 3,2)])

  斧头。xaxis。set _ tick _ params(length=2,color=#4E616C ,labelcolor=#4E616C ,labelsize=6)

  斧头。雅克斯。set _ tick _ params(length=2,color=#4E616C ,labelcolor=#4E616C ,labelsize=6)

  ax.spines[bottom].set _ edge颜色(# 4e 616 c)

  4.4 优化:设置填充颜色当橙色线更高时,希望填充为橙色。但是上面的还无法满足,这里再优化一下fig,ax=plt.subplots(figsize=(7,3),dpi=200)

  # -删除脊线并添加网格线

  ax.spines[左]。set_visible(False)

  ax.spines[top].set_visible(False)

  ax.spines[右]。set_visible(False)

  ax.grid(ls= -,lw=0.25,color=#4E616C )

  # -数据

  ax.plot(X_,Y_for,marker=o ,mfc=white ,ms=5)

  ax.plot(X_,Y_ag,marker=o ,mfc=white ,ms=5)

  # -填充之间

  #确定Y _代表Y_ag的点

  pos_for=(Y_for Y_ag)

  ax.fill_between(x=X_[pos_for],y1=Y_for[pos_for],y2=Y_ag[pos_for],alpha=0.5)

  pos_ag=(Y_for=Y_ag)

  ax.fill_between(x=X_[pos_ag],y1=Y_for[pos_ag],y2=Y_ag[pos_ag],alpha=0.5)

  # -调整滚动条和书脊以匹配网格的风格

  斧头。xaxis。set _ major _ locator(ticker .多重定位器(2)) #收报机每2个比赛日

  X ticks _=ax。xaxis。set _ tick标签([X-1表示范围内的X(0,len(X_) 3,2)])

  斧头。xaxis。set _ tick _ params(length=2,color=#4E616C ,labelcolor=#4E616C ,labelsize=6)

  斧头。雅克斯。set _ tick _ params(length=2,color=#4E616C ,labelcolor=#4E616C ,labelsize=6)

  ax.spines[bottom].set _ edge颜色(# 4e 616 c)

  上面的图出现异常,再修改一下:

  X_aux=X_ .复制()

  X _ aux . index=X _ aux . index * 10 9每场比赛之间的辅助点数

  last_idx=X_aux.index[-1] 1

  X _ aux=X _ aux。reindex(range(last _ idx))

  X_aux=X_aux.interpolate()

  # -为xg血型创建的补助的系列(Y_for)

  Y_for_aux=Y_for.copy()

  Y _ for _ aux.index=Y _ for _辅助。指数* 10

  last_idx=Y_for_aux.index[-1] 1

  Y _ for _ aux=Y _ for _ auxreindex(range(last _ idx))

  Y _ for _ aux=Y _ for _ aux插值()

  #-xG让步的辅助系列(Y_ag)

  Y_ag_aux=Y_ag.copy()

  Y _ ag _ aux。index=Y _ ag _ aux。指数* 10

  last_idx=Y_ag_aux.index[-1] 1

  Y _ ag _ aux=Y _ ag _ aux。reindex(range(last _ idx))

  Y_ag_aux=Y_ag_aux.interpolate()

  fig,ax=plt.subplots(figsize=(7,3),dpi=200)

  # -删除脊线并添加网格线

  ax.spines[左]。set_visible(False)

  ax.spines[top].set_visible(False)

  ax.spines[右]。set_visible(False)

  ax.grid(ls= -,lw=0.25,color=#4E616C )

  # -数据

  for_=ax.plot(X_,Y_for,marker=o ,mfc=white ,ms=5)

  ag_=ax.plot(X_,Y_ag,marker=o ,mfc=white ,ms=5)

  # -填充之间

  对于范围内的索引(len(X_aux) - 1):

  #根据顶部线条选择颜色

  如果Y _ for _ aux。iloc[index 1]Y _ ag _ aux。iloc[索引1]:

  color=for_[0].get_color()

  否则:

  color=ag_[0].get_color()

  #在当前点和咕噜咕噜叫扩展系列中的下一个点之间填充。

  ax.fill_between([X_aux[index],X_aux[index 1]],

  [Y_for_aux.iloc[index],Y_for_aux.iloc[index 1]],

  [Y_ag_aux.iloc[index],Y_ag_aux.iloc[index 1]],

  颜色=颜色,zorder=2,alpha=0.2,ec=无)

  # -调整滚动条和书脊以匹配网格的风格

  斧头。xaxis。set _ major _ locator(ticker .多重定位器(2)) #收报机每2个比赛日

  X ticks _=ax。xaxis。set _ tick标签([X-1表示范围内的X(0,len(X_) 3,2)])

  斧头。xaxis。set _ tick _ params(length=2,color=#4E616C ,labelcolor=#4E616C ,labelsize=6)

  斧头。雅克斯。set _ tick _ params(length=2,color=#4E616C ,labelcolor=#4E616C ,labelsize=6)

  ax.spines[bottom].set _ edge颜色(# 4e 616 c)

  5.把功能打包成函数上面的样子都还不错啦,接下来把这些东西都打包成一个函数。方便后面直接出图def plot_xG_rolling(team,ax,window=5,color_for=blue ,color_ag=orange ,data=df):

  此功能为给定团队和滚动创建一个滚动平均xg血型图

  窗户。

  团队(str):团队的名称

  ax (obj):一个Matplotlib轴。

  窗口(整数):我们的滚动平均的周期数。

  颜色_for(字符串):为xg血型创建的十六进制颜色代码。

  color_af (str):让步xg血型的十六进制颜色代码。

  数据(数据帧):我们的df和xg血型数据。

  # -准备数据

  home_df=data.copy()

  home _ df=home _ df。melt(id _ vars=[ date , home_team_name , away_team_name])

  home_df[venue]=H

  home _ df。rename(columns={ home _ team _ name : team , away _ team _ name : opposite },inplace=True)

  home _ df。replace({ variable :{ home _ team _ xG : xG _ for , away_team_xG:xG_ag}},inplace=True)

  away_df=data.copy()

  远离_ df=远离_ df。melt(id _ vars=[ date , away_team_name , home_team_name])

  away_df[venue]=A

  away _ df。rename(columns={ away _ team _ name : team , home _ team _ name : opposite },inplace=True)

  away _ df。replace({ variable :{ away _ team _ xG : xG _ for , home_team_xG:xG_ag}},inplace=True)

  df=pd.concat([home_df,away_df]).reset_index(drop=True)

  # -过滤数据

  y _ for=df[(df[队]==队)(df[变量]= xG _ for )][值].reset_index(drop=True)

  y _ ag=df[(df[ team ]==team)(df[ variable ]= xG _ ag )][ value ].reset_index(drop=True)

  X_=pd .系列(range(len(Y_for)))

  如果Y_for.shape[0]==0:

  提高值错误(fTeam {team}不在数据帧中)

  # -计算滚动平均值

  Y_for=Y_for.rolling(窗口=5,最小周期=0).平均值()#最小周期数用于部分平均值。

  Y_ag=Y_ag.rolling(window=5,min_periods=0).平均值()

  # -为曲线之间的填充创建辅助系列

  X_aux=X_ .复制()

  X _ aux . index=X _ aux . index * 10 9每场比赛之间的辅助点数

  last_idx=X_aux.index[-1] 1

  X _ aux=X _ aux。reindex(range(last _ idx))

  X_aux=X_aux.interpolate()

  # -为xg血型创建的补助的系列(Y_for)

  Y_for_aux=Y_for.copy()

  Y _ for _ aux.index=Y _ for _辅助。指数* 10

  last_idx=Y_for_aux.index[-1] 1

  Y _ for _ aux=Y _ for _ auxreindex(range(last _ idx))

  Y _ for _ aux=Y _ for _ aux插值()

  #-xG让步的辅助系列(Y_ag)

  Y_ag_aux=Y_ag.copy()

  Y _ ag _ aux。index=Y _ ag _ aux。指数* 10

  last_idx=Y_ag_aux.index[-1] 1

  Y _ ag _ aux=Y _ ag _ aux。reindex(range(last _ idx))

  Y_ag_aux=Y_ag_aux.interpolate()

  # -绘制我们的数据

  # -删除脊线并添加网格线

  ax.spines[左]。set_visible(False)

  ax.spines[top].set_visible(False)

  ax.spines[右]。set_visible(False)

  ax.grid(ls= -,lw=0.25,color=#4E616C )

  # -数据

  for_=ax.plot(X_,Y_for,marker=o ,mfc=white ,ms=4,color=color_for)

  ag_=ax.plot(X_,Y_ag,marker=o ,mfc=white ,ms=4,color=color_ag)

  # -填充之间

  对于范围内的索引(len(X_aux) - 1):

  #根据顶部线条选择颜色

  如果Y _ for _ aux。iloc[index 1]Y _ ag _ aux。iloc[索引1]:

  color=for_[0].get_color()

  否则:

  color=ag_[0].get_color()

  #在当前点和咕噜咕噜叫扩展系列中的下一个点之间填充。

  ax.fill_between([X_aux[index],X_aux[index 1]],

  [Y_for_aux.iloc[index],Y_for_aux.iloc[index 1]],

  [Y_ag_aux.iloc[index],Y_ag_aux.iloc[index 1]],

  颜色=颜色,zorder=2,alpha=0.2,ec=无)

  # -确保Y轴的最小值为零

  ax.set_ylim(0)

  # -调整滚动条和书脊以匹配网格的风格

  斧头。xaxis。set _ major _ locator(ticker .多重定位器(2)) #收报机每2个比赛日

  X ticks _=ax。xaxis。set _ tick标签([X-1表示范围内的X(0,len(X_) 3,2)])

  斧头。xaxis。set _ tick _ params(length=2,color=#4E616C ,labelcolor=#4E616C ,labelsize=6)

  斧头。雅克斯。set _ tick _ params(length=2,color=#4E616C ,labelcolor=#4E616C ,labelsize=6)

  ax.spines[bottom].set _ edge颜色(# 4e 616 c)

  # -传奇和团队名称

  Y_for_last=Y_for.iloc[-1]

  Y_ag_last=Y_ag.iloc[-1]

  # -添加团队名称

  team_=ax.text(

  x=0,y=ax。get _ ylim()[1]ax。get _ ylim()[1]/20,

  s=f"{ team } ",

  color=#4E616C ,

  va=中心,

  哈=左,

  尺寸=7

  )

  # -添加xg血型创建的标签

  for_label_=ax.text(

  x=X_ .iloc[-1] 0.75,y=Y_for_last,

  s=f{Y_for_last:1f} xGF ,

  color=color_for,

  va=中心,

  哈=左,

  尺寸=6.5

  )

  # -添加xg血型让步标签

  ag_label_=ax.text(

  x=X_ .iloc[-1] 0.75,y=Y_ag_last,

  s=f{Y_ag_last:1f} xGA ,

  color=color_ag,

  va=中心,

  哈=左,

  尺寸=6.5

  )6.1 测试函数file _ id= 1yM _ f93 ny 4 qkxjlkl 3 gzdccqenbia 2 ltb

  url=fhttps://drive.google.com/uc?id={文件id}

  df=pd.read_csv(url,index _ col=0)fig=PLT。图(图大小=(5,2),dpi=200)

  ax=plt.subplot(111)

  plot_xG_rolling(Sassuolo ,ax,color_for=#00A752 ,color_ag=black ,data=df)

  plt.tight_layout()

  再设置更加丰富的颜色:

  fig=plt.figure(figsize=(5,8),dpi=200,facecolor=#EFE9E6 )

  ax1=plt.subplot(411,facecolor=#EFE9E6 )

  ax2=plt.subplot(412,facecolor=#EFE9E6 )

  ax3=plt.subplot(413,facecolor=#EFE9E6 )

  ax4=plt.subplot(414,facecolor=#EFE9E6 )

  plot_xG_rolling(Sassuolo ,ax1,color_for=#00A752 ,color_ag=black ,data=df)

  plot_xG_rolling(Lazio ,ax2,color_for=#87D8F7 ,color_ag=#15366F ,data=df)

  plot_xG_rolling(Hellas Verona ,ax3,color_for=#153aab ,color_ag=#fdcf41 ,data=df)

  plot_xG_rolling(Empoli ,ax4,color_for=#00579C ,color_ag=black ,data=df)

  plt.tight_layout()

  最后其实本文主要是对两个折线图做了一系列的优化和改进而已,主要是强调细节部分。

  涉及到的绘制精美的图表的知识,也主要是在扁虱,背景颜色、填充_之间部分。

  技术交流欢迎转载、收藏、有所收获点赞支持一下!数据、代码可以找我获取

  目前开通了技术交流群,群友已超过2000人,添加时最好的备注方式为:来源兴趣方向,方便找到志同道合的朋友

  方式微信搜索公众号:Python学习与数据挖掘,后台回复:加群

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: