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()

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

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

  1. Python 数据可视化教程 绘制精美的双 Y 轴折线图

    在可视化作图的时候,有时候需要将几条曲线放在同一个图中,但这些曲线值的大小范围不同,需要的刻度不同.如果都用同一个 Y 轴刻度,值较小的曲线变化将不明显(如深度学习训练和测试的 Loss 变化).下面 ...

  2. Python数据可视化matplotlib(一)—— 图表的基本元素

    Python数据可视化matplotlib(一)-- 图表的基本元素 图表创建 plt.show() # 图表窗口1 → plt.show()plt.plot(np.random.rand(10)) ...

  3. Python数据可视化matplotlib:第四回:文字图例尽眉目

    Python数据可视化matplotlib:第四回:文字图例尽眉目 1. Figure和Axes上的文本 大家可以看到有些论文或者博客上都有绘制的很漂亮的图,其中大部分都在图形绘制上进行一定的注释说明 ...

  4. 每日一课 | Python数据可视化—Matplotlib初体验

    04. Matplotlib初体验 大家好,我是小C,上期给大家分享--Python数据可视化-如何做好启动准备(小白必读) 本期分享内容:Python数据可视化-Matplotlib初体验 本期小C ...

  5. 第十九章 python 数据可视化 Matplotlib Pygal

    python 数据可视化 一.使用Matplotlib生成数据图 1. matplotlib画图中文乱码小方框的解决方法 2. 知识点 3. 安装Matplotlib包 4. Matplotlib数据 ...

  6. Python数据可视化:如何创建箱线图

    一图胜千言,使用Python的matplotlib库,可以快速创建高质量的图形. 我们团队推出一个新的系列教程:Python数据可视化,针对初级和中级用户,将理论和示例代码相结合,使用matplotl ...

  7. python数据可视化 matplotlib(2) 小白 - 典型图形进阶版:堆积折线图/并列柱状图/阶梯图/箱线图

    今天依然是matplotlib,在入门版的基础上加入了更多的组合和样式设置,matplotlib库是建立在Numpy基础上的绘图库. 典型统计图形对比 柱状图 堆积图:将若干统计图形堆叠起来的统计图形 ...

  8. Python数据可视化--Matplotlib

    一.基本概念 Matplotlib 是一个 Python 的 2D 绘图库,是一个非常强大的 Python 画图工具.在机器学习和深度学习中,面对海量的数据集,我们时常需要通过绘图直观的呈现出这些数据 ...

  9. Python数据可视化 Matplotlib详解(一) —— 折线图与时序数据绘制

    目录 本小节内容 基础代码 实例讲解 如何多图绘制 多行多列的情况 多行单列的情况 Matplotlib 绘制时序数据 多时序变量绘图 如何给数据添加注释 Reference 本小节内容 今天这一小节 ...

  10. Python数据可视化01:饼图(扇形统计图)

    底下有投票!!! 01_认识饼图 饼图英文学名为Sector Graph,又名Pie Graph.常用于统计学模块.2D饼图为圆形,手画时,常用圆规作图. 仅排列在工作表的一列或一行中的数据可以绘制到 ...

最新文章

  1. PowerDesign的简单使用方法
  2. 如何跟程序员谈一场没有Bug的恋爱
  3. 【那么普通却那么自信,一分钟学Source Insight】Source Insight 4 tab设置为4个空格
  4. 线性支持向量机完全理解版
  5. 【转】Windows Azure的账户体系
  6. 24个经典的MySQL索引问题,你都遇到过哪些?
  7. redis学习笔记之虚拟内存
  8. 2799元起!小米CC9 Pro正式开售:1亿像素加持DXOMark总分第一
  9. Trello使用向导
  10. JDBC 学习笔记(三)—— 数据源(数据库连接池):DBCP数据源、C3P0 数据源以及自定义数据源技术...
  11. MediaWiki自动登陆和更新页面
  12. oracle瓶颈,解决Oracle数据库性能瓶颈问题
  13. 关于nginx报499的问题排查分析
  14. AI算法之Encoder-Decoder 和 Seq2Seq
  15. 非常喜欢的一期《晓松奇谈》
  16. RHCA回忆录---RH236介绍
  17. cups ipp oracle,基于IPP的逐步打印服务器使用CUPS
  18. ArcGIS中矢量裁剪栅格影像及影像合并【附练习数据下载】
  19. 【python】20行代码实现有道翻译api接口调用
  20. 区块链培训就业方向多不多?

热门文章

  1. HTML图片设置成为页面背景 ( 五个小步骤)
  2. 软件测试b s环境如何配置,B/S架构测试环境搭建_SQLServer篇(Win32系统)
  3. Android 时间格式化
  4. qt linux不能读写u盘文件,Qt读取U盘文件内容
  5. 量子计算机游戏,第3章 量子计算机中的游戏
  6. js控制键盘按键(回车、空格)
  7. 大二web期末大作业——动漫海贼王(可以很好的应付老师的作业)
  8. 日照喜来登酒店启幕;万豪旗下万枫酒店品牌首次亮相宁波;平湖万怡酒店正式开业 | 全球旅报...
  9. 前台使用viewbag
  10. php:获取字符串的长度