前言:
如今你们对“python折线图折线混乱”大概比较关怀,你们都想要学习一些“python折线图折线混乱”的相关内容。那么小编也在网络上汇集了一些有关“python折线图折线混乱””的相关内容,希望咱们能喜欢,我们一起来了解一下吧!在上一篇文章中少即是多!如何在复杂混乱的折线图中突出一条线(附Python代码),介绍了在很多条折线中凸显某一个折线。
本篇不再赘述数据读取和处理部分,可翻看前面的文章了解。
下面老海统一介绍四种方法,实现突出多组折线数据中最重要的那一条数据
其中,小倍图概念来自可视化大师的推荐,主旨是化繁为简,less is more!
方法一:强调突出某条折线
# 画出其他城市的折线for i in City_name[1:6]: # 按照城市筛选数据 City_data = Sales_data_sum.loc[Sales_data_sum['门店城市']==i] # 画出每个城市的折线 plt.plot(City_data.index, City_data['购买数量'], color='grey') # 设置为灰色 # 画出每个城市的数据标签,如城市名称 plt.text(City_data.index[-1], City_data['购买数量'][-1], i,color='grey') # 设置为灰色 # 画出重点突出的折线One_City_data = Sales_data_sum.loc[Sales_data_sum['门店城市']==City_name[0]] # 本案例具体是指北京plt.plot(One_City_data.index, One_City_data['购买数量'], color='orange', linewidth=4, alpha=0.7)plt.text(One_City_data.index[0], One_City_data['购买数量'][0], City_name[0], color='orange')# 设置图表的其他元素plt.title("北京5月份销量变化情况", loc='left', fontsize=30, fontweight=0, color='orange') # 设置图表标题plt.xlabel("时间") # 设置X轴坐标名称plt.ylabel("购买数量") # 设置Y轴坐标名称sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()
方法二:将复杂的多组折线,切分为小倍图
import mathimport matplotlib.dates as mdate# start_time = pd.to_datetime('2015-05-01',format="%Y/%m/%d")# end_time = pd.to_datetime('2015-05-31',format="%Y/%m/%d")n = 2 # 设置画板切为几行显示,由数据字段个数/行数,来控制列数plt.figure(figsize=(10*n,10)) # 也可控制画板高度 mapnum = 0for i in City_name: mapnum+=1 plt.subplot(n,math.ceil(len(City_name)/n), mapnum) # !!按照城市筛选数据,优先画出重点城市的折线 City_data = Sales_data_sum.loc[Sales_data_sum['门店城市']==i] # 画出每个城市的折线 plt.plot(City_data.index, City_data['购买数量'], color=colors[mapnum]) # 设置为突出颜色 # 画出每个城市的数据标签,如城市名称 plt.text(City_data.index[-1], City_data['购买数量'][-1], i,color=colors[mapnum], # 设置为突出颜色 fontsize=12) # !!画出其他城市的所有折线 for j in City_name: if j != i: # 按照城市筛选数据 City_data = Sales_data_sum.loc[Sales_data_sum['门店城市']==j] # 画出每个城市的折线 plt.plot(City_data.index, City_data['购买数量'], color='grey', # # 设置为灰色 alpha=0.3) # 画出每个城市的数据标签,如城市名称 plt.text(City_data.index[-1], City_data['购买数量'][-1], j,color='grey',fontsize=12) # 设置为灰色 # -------------------------------------------------------------------------------------------# plt.xlim(start_time,end_time) # 如果为数值型坐标轴可以设置相同的区间# plt.ylim(0,Sales_data_sum['购买数量'].max()) # 设置Y轴的取值范围# 以上两行在这里不用使用,因为X轴为时间型数据比较特殊,Y轴的刻度间隔过大,需要调整# ------------------------------------------------------------------------------------------- # 横轴为时间坐标,同时设置刻度间隔大小,此处非常关键,一般都是同一时间段内的对比 ax = plt.gca() #表明设置图片的各个轴,plt.gcf()表示图片本身 ax.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d')) # 设置横坐标标签显示的日期格式 plt.xticks(pd.date_range('2015-05-01','2015-05-31',freq='10d'),fontsize=10) # 设置刻度范围以及间隔大小 plt.yticks(np.arange(0,Sales_data_sum['购买数量'].max(),step=2),fontsize=10) # 为了更加美化,对各个子图的边框进行统一处理,全部去掉,包括上下左右边框 for key, spine in ax.spines.items(): spine.set_visible(False) # 去除所有的边框,效果更好! # -------------------------------------------------------------- # 当然可以进行选择了的去除某个边框,以下为去除某个或者某几个时的代码# 'left', 'right', 'bottom', 'top'# if key == 'right' or key == 'top':# spine.set_visible(False)# -------------------------------------------------------------- # 为了更加美化,还需要去掉X,Y轴的刻度线 plt.tick_params(bottom=False) # 去除底部的刻度线 plt.tick_params(left=False) # 去除左边的刻度线 # 为了更加美化,还需求去掉非边缘的子图的刻度标签,仅保留最左边和最底部的标签 if mapnum in range(1,4) : plt.tick_params(labelbottom=False) # 去掉X轴的刻度标签 if mapnum not in [1,4] : plt.tick_params(labelleft=False) # 去掉Y轴的刻度标签 # 设置每个子图的小标题 plt.title(i, loc='center', fontsize=12, fontweight=0, color=colors[mapnum])# 设置整个画板的标题plt.suptitle("各个城市5月份销售数量情况", fontsize=40,horizontalalignment='right', color='black')# 统一调整子图间的行间距和列间距plt.subplots_adjust(wspace =0.5, hspace =0.5)# 设置坐标轴名称,注意这里是在画布插入坐标标题文字,这个位置是画布的相对比例一般是0-1之间!plt.figtext(0.5,0.05, '时间', ha='center', va='center')plt.figtext(0.1,0.5, '购买数量', ha='center', va='center', rotation='vertical')# sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()
方法三:利用颜色强调 + “小倍图”模式
import mathimport matplotlib.dates as mdate# start_time = pd.to_datetime('2015-05-01',format="%Y/%m/%d")# end_time = pd.to_datetime('2015-05-31',format="%Y/%m/%d")n = 2 # 设置画板切为几行显示,由数据字段个数/行数,来控制列数plt.figure(figsize=(10*n,10)) # 也可控制画板高度 mapnum = 0for i in City_name: mapnum+=1 plt.subplot(n,math.ceil(len(City_name)/n), mapnum) # !!按照城市筛选数据,优先画出重点城市的折线 City_data = Sales_data_sum.loc[Sales_data_sum['门店城市']==i] # 画出每个城市的折线 plt.plot(City_data.index, City_data['购买数量'], color=colors[mapnum]) # 设置为突出颜色 # 画出每个城市的数据标签,如城市名称 plt.text(City_data.index[-1], City_data['购买数量'][-1], i,color=colors[mapnum], # 设置为突出颜色 fontsize=12) # !!画出其他城市的所有折线 for j in City_name: if j != i: # 按照城市筛选数据 City_data = Sales_data_sum.loc[Sales_data_sum['门店城市']==j] # 画出每个城市的折线 plt.plot(City_data.index, City_data['购买数量'], color='grey', # # 设置为灰色 alpha=0.3) # 画出每个城市的数据标签,如城市名称 plt.text(City_data.index[-1], City_data['购买数量'][-1], j,color='grey',fontsize=12) # 设置为灰色 # -------------------------------------------------------------------------------------------# plt.xlim(start_time,end_time) # 如果为数值型坐标轴可以设置相同的区间# plt.ylim(0,Sales_data_sum['购买数量'].max()) # 设置Y轴的取值范围# 以上两行在这里不用使用,因为X轴为时间型数据比较特殊,Y轴的刻度间隔过大,需要调整# ------------------------------------------------------------------------------------------- # 横轴为时间坐标,同时设置刻度间隔大小,此处非常关键,一般都是同一时间段内的对比 ax = plt.gca() #表明设置图片的各个轴,plt.gcf()表示图片本身 ax.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d')) # 设置横坐标标签显示的日期格式 plt.xticks(pd.date_range('2015-05-01','2015-05-31',freq='10d'),fontsize=10) # 设置刻度范围以及间隔大小 plt.yticks(np.arange(0,Sales_data_sum['购买数量'].max(),step=2),fontsize=10) # 为了更加美化,对各个子图的边框进行统一处理,全部去掉,包括上下左右边框 for key, spine in ax.spines.items(): spine.set_visible(False) # 去除所有的边框,效果更好! # -------------------------------------------------------------- # 当然可以进行选择了的去除某个边框,以下为去除某个或者某几个时的代码# 'left', 'right', 'bottom', 'top'# if key == 'right' or key == 'top':# spine.set_visible(False)# -------------------------------------------------------------- # 为了更加美化,还需要去掉X,Y轴的刻度线 plt.tick_params(bottom=False) # 去除底部的刻度线 plt.tick_params(left=False) # 去除左边的刻度线 # 为了更加美化,还需求去掉非边缘的子图的刻度标签,仅保留最左边和最底部的标签 if mapnum in range(1,4) : plt.tick_params(labelbottom=False) # 去掉X轴的刻度标签 if mapnum not in [1,4] : plt.tick_params(labelleft=False) # 去掉Y轴的刻度标签 # 设置每个子图的小标题 plt.title(i, loc='center', fontsize=12, fontweight=0, color=colors[mapnum])# 设置整个画板的标题plt.suptitle("各个城市5月份销售数量情况", fontsize=40,horizontalalignment='right', color='black')# 统一调整子图间的行间距和列间距plt.subplots_adjust(wspace =0.5, hspace =0.5)# 设置坐标轴名称,注意这里是在画布插入坐标标题文字,这个位置是画布的相对比例一般是0-1之间!plt.figtext(0.5,0.05, '时间', ha='center', va='center')plt.figtext(0.1,0.5, '购买数量', ha='center', va='center', rotation='vertical')# sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()
方法四:折线面积图 + 小倍图模式
# ------------由于X轴为时间序列,个数太多,此处单独设置一下字体大小来美化展示plt.rcParams['font.sans-serif']=['Source Han Sans CN'] # 显示中文不乱码,思源黑体 plt.rcParams['font.size'] = 10 # 设置图表全局字体大小,后期某个元素的字体大小可以自行调整plt.rcParams['xtick.labelsize'] = 5 # 设置图表X轴全局字体大小,此处单独设置因为是时间序列plt.rcParams['axes.unicode_minus'] = False # 显示负数不乱码# ------------------------------------------------------------------------------n = 2 # 设置画板切为几行显示,由数据字段个数/行数,来控制列数# 创建不同城市的面积图切片City_chart = sns.FacetGrid(Sales_data_new, col='门店城市', hue='门店城市', col_wrap=math.ceil(len(City_name)/n)) # 通过折线功能,画出折线图效果,此时与多折线小倍图效果一致City_chart.map(plt.plot, '订单日期', '购买数量')# 通过填充方法,画出面积填充颜色,此时完成类似面积图效果City_chart.map(plt.fill_between, '订单日期', '购买数量', alpha=0.2) # 给每个图添加名称 City_chart.set_titles("{col_name}") # 设置各个子图的标题# 设置子图的刻度范围及间隔,以及刻度的显示范围,以及刻度标签的大小。注意!如果使用SNS默认风格,这些都不用操作# City_chart.set_xticklabels(fontsize=5) # 设置X轴标签大小# City_chart.set_yticklabels(fontsize=5) # 设置Y轴标签大小City_chart.set(xticks=(pd.date_range('2015-05-01','2015-05-31',freq='10d'))) # 设置各个子图的X轴刻度范围及间隔City_chart.set(yticks=(np.arange(0,Sales_data_new['购买数量'].max(),step=2))) # 设置各个子图的Y轴刻度范围及间隔City_chart.set(xlim=(pd.to_datetime('2015-05-01',format="%Y/%m/%d"), pd.to_datetime('2015-06-02',format="%Y/%m/%d"))) # 设置X轴的显示范围City_chart.set(ylim=(0,Sales_data_new['购买数量'].max())) # 设置Y轴的显示范围# 设置边框,把边框取消sns.despine(top=True, right=True, left=True, bottom=True)# 设置刻度线,把刻度线取消ax = City_chart.fig.get_axes()for i in ax: i.tick_params(bottom=False) i.tick_params(left=False)# 设置标题与图表的间隔,以及子图之间的间隔City_chart.fig.subplots_adjust(top=0.85,wspace=.2,hspace=.2) #子图和子图之间的间隔设置# 给整个画板添加一个标题City_chart.fig.suptitle("各个城市5月份销售数量情况")plt.show()
写在最后
以上方法,利用PYTHON完成,代码量不小。老海已经想办法优化了,可惜还是不少。
建议我们利用突出 + 切分的核心思路,来设计图表展示,而不要局限于何种工具。
OK,今天先到这里了,以上为本文全部内容,如果觉得喜欢,请动动小手转发和关注一下我们。
我是老海,来自数据炼金术师
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #python折线图折线混乱