python数据可视化(matplotlib条形图、饼图、箱状图、直方图、折线图)(代码)

您所在的位置:网站首页 vba自动刷新条形图的代码是什么 python数据可视化(matplotlib条形图、饼图、箱状图、直方图、折线图)(代码)

python数据可视化(matplotlib条形图、饼图、箱状图、直方图、折线图)(代码)

2024-02-25 22:24| 来源: 网络整理| 查看: 265

python数据可视化(matplotlib条形图、饼图、箱状图、直方图、折线图) matplotlib(条形图)一.简单条形图1、简单垂直条形图2、简单水平条形图 二、水平交错条形图三、垂直堆叠条形图 matplotlib(饼图)matplotlib(箱线图)matplotlib(直方图)一、一元直方图二、二元直方图 matplotlib(折线图)一、一元折线图的绘制二、多元折线图 本程序来自于网络,自己做汇总,方便自己以及新手查阅,每段程序附有相应的数据集。

matplotlib(条形图) 一.简单条形图

(基于一种离散变量的情况,使用简单条形图)

rcParams:1)设置字体为微软雅黑,2)避免坐标轴不能正常的显示负号;bar函数:指定条形图的x轴、y轴值、x轴刻度标签为水平居中、条形图的填充色为铁蓝色、透明度alpha为0.8;循环添加条形图的数值标签。 1、简单垂直条形图 # 导入绘图模块 import matplotlib.pyplot as plt # 构造数据 GDP = [12406.8, 13908.57, 9386.87, 9143.64] # 中文乱码的处理 plt.rcParams['font.sans-serif'] = [u'SimHei'] plt.rcParams['axes.unicode_minus'] = False # 绘图 plt.bar(range(4), GDP, align = 'center', color = 'steelblue', alpha = 0.8) # 添加轴标签 plt.ylabel('GDP') # 添加标题 plt.title('四个直辖市GDP大比拼') # 添加刻度标签 plt.xticks(range(4), ['北京市', '上海市', '天津市', '重庆市']) # 设置Y轴的刻度范围 plt.ylim([5000, 15000]) # 为每个条形图添加数值标签 for x,y in enumerate(GDP): plt.text(x, y+100, '%s' %round(y,1), ha='center') # 显示图形 plt.show()

在这里插入图片描述

2、简单水平条形图 调用barh函数来完成;数值标签设置不一样,标签垂直居中显示,使用va参数即可 # 导入绘图模块 import matplotlib.pyplot as plt # 构建数据 price = [39.5,39.9,45.4,38.9,33.34] # 中文乱码的处理 plt.rcParams['font.sans-serif'] =[u'SimHei'] plt.rcParams['axes.unicode_minus'] = False # 绘图 plt.barh(range(5), price, align = 'center',color='steelblue', alpha = 0.8) # 添加轴标签 plt.xlabel('价格') # 添加标题 plt.title('不同平台书的最低价比较') # 添加刻度标签 plt.yticks(range(5),['亚马逊','当当网','中国图书网','京东','天猫']) # 设置X轴的刻度范围 plt.xlim([32,47]) # 为每个条形图添加数值标签 for x,y in enumerate(price): plt.text(y+0.1,x,'%s' %y,va='center') # 显示图形 plt.show() 二、水平交错条形图

(两种离散变量的条形图我们可以使用水平交错条形图和堆叠条形图)

思路:在第一个条形图绘制好的基础上,往左移一定的距离,再去绘制第二个条形图(两个bar函数)需在bar函数中添加label参数;两次for循环给条形图添加数值标签 # 导入绘图模块 import matplotlib.pyplot as plt import numpy as np # 构建数据 Y2016 = [15600,12700,11300,4270,3620] Y2017 = [17400,14800,12000,5200,4020] labels = ['北京','上海','香港','深圳','广州'] bar_width = 0.45 # 中文乱码的处理 plt.rcParams['font.sans-serif'] =[u'SimHei'] plt.rcParams['axes.unicode_minus'] = False # 绘图 plt.bar(np.arange(5), Y2016, label = '2016', color = 'steelblue', alpha = 0.8, width = bar_width) plt.bar(np.arange(5)+bar_width, Y2017, label = '2017', color = 'indianred', alpha = 0.8, width = bar_width) # 添加轴标签 plt.xlabel('Top5城市') plt.ylabel('家庭数量') # 添加标题 plt.title('亿万财富家庭数Top5城市分布') # 添加刻度标签 plt.xticks(np.arange(5)+bar_width,labels) # 设置Y轴的刻度范围 plt.ylim([2500, 19000]) # 为每个条形图添加数值标签 for x2016,y2016 in enumerate(Y2016): plt.text(x2016, y2016+100, '%s' %y2016, ha='center') for x2017,y2017 in enumerate(Y2017): plt.text(x2017+bar_width, y2017+100, '%s' %y2017, ha='center') # 显示图例 plt.legend() # 显示图形 plt.show()

在这里插入图片描述

三、垂直堆叠条形图 思路:与水平相似提供x,y轴的数值以及bottom参数(在某个条形图顶端的基础上,绘制其他条形图)图例的位置选择在了正上方,列数为4,以一排的形式展现 # 导入模块 import matplotlib.pyplot as plt import numpy as np import pandas as pd # 导入数据 data = pd.read_excel('货运.xls') # 绘图 plt.bar(np.arange(8), data.loc[0,:][1:], color = 'red', alpha = 0.8, label = '铁路', align = 'center') plt.bar(np.arange(8), data.loc[1,:][1:], bottom = data.loc[0,:][1:], color = 'green', alpha = 0.8, label = '公路', align = 'center') plt.bar(np.arange(8), data.loc[2,:][1:], bottom = data.loc[0,:][1:]+data.loc[1,:][1:], color = 'm', alpha = 0.8, label = '水运', align = 'center') plt.bar(np.arange(8), data.loc[3,:][1:], bottom = data.loc[0,:][1:]+data.loc[1,:][1:]+data.loc[2,:][1:], color = 'black', alpha = 0.8, label = '民航', align = 'center') # 添加轴标签 plt.xlabel('月份') plt.ylabel('货物量(万吨)') # 添加标题 plt.title('2017年各月份物流运输量') # 添加刻度标签 plt.xticks(np.arange(8),data.columns[1:]) # 设置Y轴的刻度范围 plt.ylim([0,500000]) # 为每个条形图添加数值标签 for x_t,y_t in enumerate(data.loc[0,:][1:]): plt.text(x_t,y_t/2,'%sW' %(round(y_t/10000,2)),ha='center', color = 'white') for x_g,y_g in enumerate(data.loc[0,:][1:]+data.loc[1,:][1:]): plt.text(x_g,y_g/2,'%sW' %(round(y_g/10000,2)),ha='center', color = 'white') for x_s,y_s in enumerate(data.loc[0,:][1:]+data.loc[1,:][1:]+data.loc[2,:][1:]): plt.text(x_s,y_s-20000,'%sW' %(round(y_s/10000,2)),ha='center', color = 'white') # 显示图例 plt.legend(loc='upper center', ncol=4) # 显示图形 plt.show()

Alt

matplotlib(饼图)

(适用于离散变量)

函数:matplotlib库中的pie函数 plt.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False) 参数说明: x: 指定绘图的数据; explode: 指定饼图某些部分的突出显示,即呈现爆炸式; labels: 为饼图添加标签说明,类似于图例说明; colors: 指定饼图的填充色; autopct: 自动添加百分比显示,可以采用格式化的方法显示; pctdistance: 设置百分比标签与圆心的距离; shadow: 是否添加饼图的阴影效果; labeldistance: 设置各扇形标签(图例)与圆心的距离; startangle: 设置饼图的初始摆放角度; radius: 设置饼图的半径大小; counterclock: 是否让饼图按逆时针顺序呈现; wedgeprops: 设置饼图内外边界的属性,如边界线的粗细、颜色等; textprops: 设置饼图中文本的属性,如字体大小、颜色等; center: 指定饼图的中心点位置,默认为原点 frame: 是否要显示饼图背后的图框,如果设置为True的话,需要同时控制图框x轴、y轴的范围和饼图的中心位置; # 导入第三方模块 import matplotlib.pyplot as plt # 设置绘图的主题风格(不妨使用R中的ggplot分隔) plt.style.use('ggplot') # 构造数据 edu = [0.2515,0.3724,0.3336,0.0368,0.0057] labels = ['中专','大专','本科','硕士','其他'] explode = [0,0.1,0,0,0] # 用于突出显示大专学历人群 colors=['#9999ff','#ff9999','#7777aa','#2442aa','#dd5555'] # 自定义颜色 # 中文乱码和坐标轴负号的处理 plt.rcParams['font.sans-serif'] = [u'SimHei'] plt.rcParams['axes.unicode_minus'] = False # 设置图片大小 plt.figure(figsize = (20,8)) # 将横、纵坐标轴标准化处理,保证饼图是一个正圆,否则为椭圆 plt.axes(aspect='equal') # 控制x轴和y轴的范围 plt.xlim(0,4) plt.ylim(0,4) # 绘制饼图 plt.pie(x = edu, # 绘图数据 explode = explode, # 突出显示大专人群 labels = labels, # 添加教育水平标签 colors = colors, # 设置饼图的自定义填充色 autopct = '%.1f%%', # 设置百分比的格式,这里保留一位小数 pctdistance = 0.8, # 设置百分比标签与圆心的距离 labeldistance = 1.15, # 设置教育水平标签与圆心的距离 startangle = 180, # 设置饼图的初始角度 radius = 1.5, # 设置饼图的半径 counterclock = False, # 是否逆时针,这里设置为顺时针方向 wedgeprops = {'linewidth': 1.5, 'edgecolor':'green'},# 设置饼图内外边界的属性值 textprops = {'fontsize':12, 'color':'k'}, # 设置文本标签的属性值 center = (1.8,1.8), # 设置饼图的原点 frame = 1 )# 是否显示饼图的图框,这里设置显示 # 删除x轴和y轴的刻度 plt.xticks(()) plt.yticks(()) # 添加图标题 plt.title('芝麻信用失信用户教育水平分布') # 显示图形 plt.show()

在这里插入图片描述

matplotlib(箱线图)

适用于数值型变量(箱线图、直方图、折线图、面积图、散点图)

展现数据的分布(如上下四分位值、中位数等)反映数据的异常情况boxplot函数参数 plt.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None) 参数说明 x: 指定要绘制箱线图的数据; notch: 是否是凹口的形式展现箱线图,默认非凹口; sym: 指定异常点的形状,默认为+号显示; vert: 是否需要将箱线图垂直摆放,默认垂直摆放; whis: 指定上下须与上下四分位的距离,默认为1.5倍的四分位差; positions: 指定箱线图的位置,默认为[0,1,2…]; widths: 指定箱线图的宽度,默认为0.5; patch_artist: 是否填充箱体的颜色; meanline: 是否用线的形式表示均值,默认用点来表示; showmeans: 是否显示均值,默认不显示; showcaps: 是否显示箱线图顶端和末端的两条线,默认显示; showbox: 是否显示箱线图的箱体,默认显示; showfliers: 是否显示异常值,默认显示; boxprops: 设置箱体的属性,如边框色,填充色等; labels: 为箱线图添加标签,类似于图例的作用; filerprops: 设置异常值的属性,如异常点的形状、大小、填充色等; medianprops: 设置中位数的属性,如线的类型、粗细等; meanprops: 设置均值的属性,如点的大小、颜色等; capprops: 设置箱线图顶端和末端线条的属性,如颜色、粗细等; whiskerprops: 设置须的属性,如颜色、粗细、线的类型等;箱线图结构 下四分位数是第一四分位数的位置:表示有25%的数据小于此值上四分位数是第三四分位数的位置:表示有75%的数据小于等于此值整个四分位间距框(如图最大方框):代表的是数据集中50%(即75%-25%)的数据;四分位间距框的高度:数据涉及的范围,表现出数据的集中程度数据中位数的位置:表示数据中位数上边缘(Whisker上限):延伸至距框顶部1.5倍框高范围内的最大数据点下边缘(Whisker下限):延伸至距框底部1.5倍框高范围内的最小数据点异常值:超出Whisker上限或下限的数值将使用星号*表示 在这里插入图片描述

单个箱线图 kaggle数据下载:可用谷歌账号登陆下载 百度云数据下载:提取码: ai3x

# 导入第三方模块 import pandas as pd import matplotlib.pyplot as plt # 读取Titanic数据集 titanic = pd.read_csv('titanic_train.csv') # 检查年龄是否有缺失 any(titanic.Age.isnull()) # 不妨删除含有缺失年龄的观察 titanic.dropna(subset=['Age'], inplace=True) # 设置图片大小 plt.figure(figsize=(10,8)) # 设置图形的显示风格 plt.style.use('ggplot') # 设置中文和负号正常显示 plt.rcParams['font.sans-serif'] = [u'SimHei'] plt.rcParams['axes.unicode_minus'] = False # 绘图:整体乘客的年龄箱线图 plt.boxplot(x = titanic.Age, # 指定绘图数据 patch_artist = True, # 要求用自定义颜色填充盒形图,默认白色填充 showmeans = True, # 以点的形式显示均值 widths = 0.2, boxprops = {'color':'black','facecolor':'#9999ff'}, # 设置箱体属性,填充色和边框色 flierprops = {'marker':'o','markerfacecolor':'red','color':'black'}, # 设置异常值属性,点的形状、填充色和边框色 meanprops = {'marker':'D','markerfacecolor':'indianred'}, # 设置均值点的属性,点的形状、填充色 medianprops = {'linestyle':'--','color':'orange'}) # 设置中位数线的属性,线的类型和颜色 # 设置y轴的范围 plt.ylim(0,85) # 去除箱线图的上边框与右边框的刻度标签 plt.tick_params(top='off', right='off') # 显示图形 plt.show()

在这里插入图片描述

结果分析 乘客的平均年龄在30岁有四分之一的人低于20岁有四分之一的人超过38岁(换言之,一半的人在20~38岁之间)均值(红色的菱形)略高于中位数(黄色虚线):年龄是有偏的,并且是右偏红色的异常值:异常值的年龄均在64岁以上

多个箱线图

# 按舱级排序,为了后面正常显示分组盒形图的顺序 titanic.sort_values(by = 'Pclass', inplace=True) # 通过for循环将不同仓位的年龄人群分别存储到列表Age变量中 Age = [] Levels = titanic.Pclass.unique() for Pclass in Levels: Age.append(titanic.loc[titanic.Pclass==Pclass,'Age']) plt.figure(figsize=(10,8)) # 绘图 plt.boxplot(x = Age, patch_artist=True, labels = ['一等舱','二等舱','三等舱'], # 添加具体的标签名称 showmeans=True, boxprops = {'color':'black','facecolor':'#9999ff'}, flierprops = {'marker':'o','markerfacecolor':'red','color':'black'}, meanprops = {'marker':'D','markerfacecolor':'indianred'}, medianprops = {'linestyle':'--','color':'orange'}) # 显示图形 plt.show()

在这里插入图片描述

结果分析 趋势:舱位等级越高的乘客,他们的年龄越高三种舱位的平均年龄为38、30和25:年龄越大,经济能力越强,舱位等级越高二等舱和三等舱内,乘客的年龄上存在一些异常 matplotlib(直方图)

功能:展现数据的分布(如快速的判断数据是否近似服从正态分布。)

函数plt.hist plt.hist(x, bins=10, range=None, normed=False, weights=None, cumulative=False, bottom=None, histtype=‘bar’, align=‘mid’, orientation=‘vertical’, rwidth=None, log=False, color=None, label=None, stacked=False) 参数说明: x: 指定要绘制直方图的数据; bins: 指定直方图条形的个数; range: 指定直方图数据的上下界,默认包含绘图数据的最大值和最小值; normed: 是否将直方图的频数转换成频率; weights: 该参数可为每一个数据点设置权重; cumulative: 是否需要计算累计频数或频率; bottom: 可以为直方图的每个条形添加基准线,默认为0; histtype: 指定直方图的类型,默认为bar,除此还有’barstacked’, ‘step’, ‘stepfilled’; align: 设置条形边界值的对其方式,默认为mid,除此还有’left’和’right’; orientation: 设置直方图的摆放方向,默认为垂直方向; rwidth: 设置直方图条形宽度的百分比; log: 是否需要对绘图数据进行log变换; color: 设置直方图的填充色; label: 设置直方图的标签,可通过legend展示其图例; stacked: 当有多个数据时,是否需要将直方图呈堆叠摆放,默认水平摆放; 一、一元直方图 # 导入第三方包 import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib.mlab as mlab # 中文和负号的正常显示 plt.rcParams['font.sans-serif'] = [u'SimHei'] plt.rcParams['axes.unicode_minus'] = False # 读取Titanic数据集 titanic = pd.read_csv('titanic_train.csv') # 检查年龄是否有缺失 any(titanic.Age.isnull()) # 不妨删除含有缺失年龄的观察 titanic.dropna(subset=['Age'], inplace=True) # 设置图形的显示风格 plt.style.use('ggplot') # 绘图:乘客年龄的频数直方图 plt.hist(titanic.Age, # 绘图数据 bins = 20, # 指定直方图的条形数为20个 color = 'steelblue', # 指定填充色 edgecolor = 'k', # 指定直方图的边界色 label = '直方图' )# 为直方图呈现标签 # 去除图形顶部边界和右边界的刻度 plt.tick_params(top='off', right='off') # 显示图例 plt.legend() # 显示图形 plt.show()

在这里插入图片描述

结果分析: 类似正态分布,两边低中间高的倒钟形状。 此外,绘制累计频率直方图,并且设置5岁为组距。 # 绘图:乘客年龄的累计频率直方图 plt.hist(titanic.Age, # 绘图数据 bins = np.arange(titanic.Age.min(),titanic.Age.max(),5), # 指定直方图的组距 normed = True, # 设置为频率直方图 cumulative = True, # 积累直方图 color = 'steelblue', # 指定填充色 edgecolor = 'k', # 指定直方图的边界色 label = '直方图' )# 为直方图呈现标签 # 设置坐标轴标签和标题 plt.title('乘客年龄的频率累计直方图') plt.xlabel('年龄') plt.ylabel('累计频率') # 去除图形顶部边界和右边界的刻度 plt.tick_params(top='off', right='off') # 显示图例 plt.legend(loc = 'best') # 显示图形 plt.show()

在这里插入图片描述

结果分析: (通过累计频率直方图就可以快速的发现什么年龄段的人数占了多少比重) 如35岁以下的乘客占了7成

测试数据集是否近似服从正态分布:在直方图的基础上再绘制两条线(理论的正态分布曲线、核密度曲线),比较两条曲线的吻合度,越吻合就说明数据越近似于正态分布。

# 正态分布图 plt.hist(titanic.Age, # 绘图数据 bins = np.arange(titanic.Age.min(),titanic.Age.max(),5), # 指定直方图的组距 normed = True, # 设置为频率直方图 color = 'steelblue', # 指定填充色 edgecolor = 'k') # 指定直方图的边界色 # 设置坐标轴标签和标题 plt.title('乘客年龄直方图') plt.xlabel('年龄') plt.ylabel('频率') # 生成正态曲线的数据 x1 = np.linspace(titanic.Age.min(), titanic.Age.max(), 1000) normal = mlab.normpdf(x1, titanic.Age.mean(), titanic.Age.std()) # 绘制正态分布曲线 line1, = plt.plot(x1,normal,'r-', linewidth = 2) # 生成核密度曲线的数据 kde = mlab.GaussianKDE(titanic.Age) x2 = np.linspace(titanic.Age.min(), titanic.Age.max(), 1000) # 绘制 line2, = plt.plot(x2,kde(x2),'g-', linewidth = 2) # 去除图形顶部边界和右边界的刻度 plt.tick_params(top='off', right='off') # 显示图例 plt.legend([line1, line2],['正态分布曲线','核密度曲线'],loc='best') # 显示图形 plt.show()

在这里插入图片描述

结果分析 乘客的年龄分布与理论正态分布曲线存在一些差异,不服从正态分布年龄呈现右偏的特征 二、二元直方图

对比男女乘客的年龄直方图:通过两个hist将不同性别的直方图绘制到一张图内。

# 提取不同性别的年龄数据 age_female = titanic.Age[titanic.Sex == 'female'] age_male = titanic.Age[titanic.Sex == 'male'] # 设置直方图的组距 bins = np.arange(titanic.Age.min(), titanic.Age.max(), 2) # 男性乘客年龄直方图 plt.hist(age_male, bins = bins, label = '男性', color = 'steelblue', alpha = 0.7) # 女性乘客年龄直方图 plt.hist(age_female, bins = bins, label = '女性', alpha = 0.6) # 设置坐标轴标签和标题 plt.title('乘客年龄直方图') plt.xlabel('年龄') plt.ylabel('人数') # 去除图形顶部边界和右边界的刻度 plt.tick_params(top='off', right='off') # 显示图例 plt.legend() # 显示图形 plt.show()

在这里插入图片描述

结果分析 不同年龄组内几乎都是男性乘客比女性乘客要多;男女性别的年龄组分布几乎一致。 matplotlib(折线图)

功能:用来表示某个数值变量随着时间的推移而形成的趋势(经济走势图、销售波动图、PV监控图等)

函数:matplotlib模块中plot函数 plt.hist(x,y,linestyle,linewidth,color,marker, markersize,markeredgecolor, markerfactcolor,label,alpha) 参数说明 x: 指定折线图的x轴数据; y: 指定折线图的y轴数据; linestyle: 指定折线的类型,可以是实线、虚线、点虚线、点点线等,默认为实线; linewidth: 指定折线的宽度 marker: 可以为折线图添加点,该参数是设置点的形状; markersize: 设置点的大小; markeredgecolor: 设置点的边框色; markerfactcolor: 设置点的填充色; label: 为折线图添加标签,类似于图例的作用; 一、一元折线图的绘制

百度云数据下载:提取码: 78ah

# 导入模块 import pandas as pd import matplotlib.pyplot as plt # 设置绘图风格 plt.style.use('ggplot') # 设置中文编码和负号的正常显示 plt.rcParams['font.sans-serif'] = [u'SimHei'] plt.rcParams['axes.unicode_minus'] = False # 读取需要绘图的数据 article_reading = pd.read_excel('wechart.xlsx') # print(article_reading) # 取出8月份至9月28日的数据 sub_data = article_reading.loc[article_reading.date >= '2017-08-01' ,:] # print(sub_data) # 设置图框的大小 fig = plt.figure(figsize=(10,6)) # 绘图 plt.plot(sub_data.date, # x轴数据 sub_data.article_reading_cnts, # y轴数据 linestyle = '-', # 折线类型 linewidth = 2, # 折线宽度 color = 'steelblue', # 折线颜色 marker = 'o', # 点的形状 markersize = 6, # 点的大小 markeredgecolor='black', # 点的边框色 markerfacecolor='brown') # 点的填充色 # 添加标题和坐标轴标签 plt.title('公众号每天阅读人数趋势图') plt.xlabel('日期') plt.ylabel('人数') # 剔除图框上边界和右边界的刻度 plt.tick_params(top = 'off', right = 'off') # 为了避免x轴日期刻度标签的重叠,设置x轴刻度自动展现,并且45度倾斜 fig.autofmt_xdate(rotation = 45) # 设置x轴时间外观 # 显示图形 plt.show()

在这里插入图片描述

结果分析 数据量多时,为防止日期重叠,导致标签拥挤:让日期型的x轴刻度标签自动展现刻度标签展现形式:如“YYYY-MM-DD”、以固定的几天作为间隔 # 导入模块 import matplotlib as mpl # 设置图框的大小 fig = plt.figure(figsize=(10,6)) # 绘图 plt.plot(sub_data.date, # x轴数据 sub_data.article_reading_cnts, # y轴数据 linestyle = '-', # 折线类型 linewidth = 2, # 折线宽度 color = 'steelblue', # 折线颜色 marker = 'o', # 点的形状 markersize = 6, # 点的大小 markeredgecolor='black', # 点的边框色 markerfacecolor='steelblue') # 点的填充色 # 添加标题和坐标轴标签 plt.title('公众号每天阅读人数趋势图') plt.xlabel('日期') plt.ylabel('人数') # 剔除图框上边界和右边界的刻度 plt.tick_params(top = 'off', right = 'off') # 获取图的坐标信息 ax = plt.gca() print(ax) # 设置日期的显示格式 date_format = mpl.dates.DateFormatter("%Y-%m-%d") ax.xaxis.set_major_formatter(date_format) # 设置x轴显示多少个日期刻度 #xlocator = mpl.ticker.LinearLocator(10) # 设置x轴每个刻度的间隔天数 xlocator = mpl.ticker.MultipleLocator(5) ax.xaxis.set_major_locator(xlocator) # 为了避免x轴日期刻度标签的重叠,设置x轴刻度自动展现,并且45度倾斜 fig.autofmt_xdate(rotation = 45) # 显示图形 plt.show() AxesSubplot(0.125,0.125;0.775x0.755)

在这里插入图片描述

二、多元折线图

一张图形中画上两条折线图:写入两次plot函数即可。

# 设置图框的大小 fig = plt.figure(figsize=(10,6)) # 绘图--阅读人数趋势 plt.plot(sub_data.date, # x轴数据 sub_data.article_reading_cnts, # y轴数据 linestyle = '-', # 折线类型 linewidth = 2, # 折线宽度 color = 'steelblue', # 折线颜色 marker = 'o', # 点的形状 markersize = 6, # 点的大小 markeredgecolor='black', # 点的边框色 markerfacecolor='steelblue', # 点的填充色 label = '阅读人数') # 添加标签 # 绘图--阅读人次趋势 plt.plot(sub_data.date, # x轴数据 sub_data.article_reading_times, # y轴数据 linestyle = '-', # 折线类型 linewidth = 2, # 折线宽度 color = '#ff9999', # 折线颜色 marker = 'o', # 点的形状 markersize = 6, # 点的大小 markeredgecolor='black', # 点的边框色 markerfacecolor='#ff9999', # 点的填充色 label = '阅读人次') # 添加标签 # 添加标题和坐标轴标签 plt.title('公众号每天阅读人数和人次趋势图') plt.xlabel('日期') plt.ylabel('人数') # 剔除图框上边界和右边界的刻度 plt.tick_params(top = 'off', right = 'off') # 获取图的坐标信息 # 用ax=plt.gca()获得axes对象 ax = plt.gca() # 设置日期的显示格式 date_format = mpl.dates.DateFormatter('%m-%d') ax.xaxis.set_major_formatter(date_format) # 设置x轴显示多少个日期刻度 #xlocator = mpl.ticker.LinearLocator(10) # 设置x轴每个刻度的间隔天数 xlocator = mpl.ticker.MultipleLocator(3) ax.xaxis.set_major_locator(xlocator) # 为了避免x轴日期刻度标签的重叠,设置x轴刻度自动展现,并且45度倾斜 fig.autofmt_xdate(rotation = 45) # 显示图例 plt.legend() # 显示图形 plt.show()

在这里插入图片描述

结果分析 公众号的阅读人数与人次趋势完全一致,具有一定的周期性主要是由于双休日的时候,时间比较空闲

参考链接:

[1] https://blog.csdn.net/weixin_43593330/article/details/89452987



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3