超详细的Python matplotlib 绘制柱状图

Posted 编程简单学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了超详细的Python matplotlib 绘制柱状图相关的知识,希望对你有一定的参考价值。

复习回顾

Python 为数据展示提供了大量优秀的功能包,其中 matplotlib 模块可以方便绘制制作折线图、柱状图、散点图等高质量的数据包。

关于 matplotlib 模块,我们前期已经对matplotlib进行基本框架、以及常用方法的学习

Python matplotlib 绘制饼图_

python matplotlib绘制折线图_

python入门到进阶,爬虫数据分析全套资料分享讲解

Python面向对象编程:类继承和其衍生术语

Python面向对象编程:深度认识类class_

在 matplotlib 模块提供的图表中,除了折线图使用最多外,柱状图也是我们日常数据分析的图表。

本期,我们开始学习绘制柱状图相关属性和方法,let's go~

1. 柱状图概述

  • 什么是柱状图

    • 柱状图又称为条形图,是一种以长方形的长度为变量数据进行统计的图表
    • 柱状图用来比较两个或以上类型
    • 柱状图只有一个以长方形的长度为变量
    • 柱状图可以横向排列或者多维方式展示
  • 柱状图使用场景

    • 柱状图适用在较小数据集的分析
    • 适用二维数据集,只比较一个维度数据差异项
    • 直观展示各个体之间数据的差异
    • 表现离散型的时间序列
  • 柱状图绘制步骤

    1. 导入matplotlib.pyplot模块
    2. 准备数据,可以使用numpy/pandas整理数据
    3. 调用pyplot.bar()绘制柱状图
  • 案例展示

    本次,我们分析过去5年内的产品年销量展示

    • 案例所用到的数据如下:

      import random
      
      x_data = ["20年".format(i) for i in range(16,21)]
      y_data = [random.randint(100,300) for i in range(6)]
      复制代码
    • 绘制柱状图

      
      import matplotlib.pyplot as plt
      
      plt.rcParams["font.sans-serif"]=['SimHei']
      plt.rcParams["axes.unicode_minus"]=False
      
      for i in range(len(x_data)):
          plt.bar(x_data[i],y_data[i])
      
      plt.title("销量分析")
      plt.xlabel("年份")
      plt.ylabel("销量")
      
      plt.show()
      复制代码

       

2. 柱状图属性

  • 柱状体颜色填充

    • facecolor(fc)关键字

    • color 关键字

    • 颜色简称:

    属性值说明属性值说明
    "b"/"bule"蓝色"m"/"magenta"品红
    "g" /"green"绿色"y"/"yellow"黄色
    "r"/"red"红色"k"/"black"黑色
    "c"/"cyan"青色"w"/"white"白色
    • rgb:

      • 格式形式:(r,g,b)
      • 取值范围:0~1
  • 柱状描边设置

    • 柱状体边框颜色

      • edgecolor 或者 ec
    • 柱状体边框样式

      • linestyle 或者 ls

      • 线条样式:

      属性值说明
      "-" 、"solid"默认实线显示
      "--"、"dashed"虚线
      "-." "dashdot"点划线
      ":"、"dotted"虚线
      "None" """"
    • 柱状体边框宽度

      • linewidth 或者 lw
  • 柱状图填充样式

    • hatch: 设置填充样式
    • 属性取值:'/', '', '|', '-', '+', 'x', 'o', 'O', '.', '*' |
  • 柱状图刻度标签

    • tickle label:默认使用数字标签
  • 我们对 第一节柱状图添加边框样式为"--",添加指定rgb颜色,填充圆圈

    for i in range(len(x_data)):
       plt.bar(x_data[i],y_data[i],color=(0.2*i,0.2*i,0.2*i),linestyle="--",hatch="o")
    复制代码

     

3. 堆叠柱状图

在柱状图中,我们会在同时对比两组数据在同一类中的表现形式,因此需要绘制堆叠柱状图

  • bottom : 条形底座的y坐标,默认值为0

  • 在第一节案例中,添加一组y轴数据所有数据如下:

     x_data = ["20年".format(i) for i in range(16,21)]
     y_data = list(random.randint(100,300) for i in range(5))
     y2_data = list(random.randint(100,300) for i in range(5))
    复制代码
  • 再添加一次pyplot.bar方法,添加bottom属性

     plt.bar(x_data,y_data,lw=0.5,fc="r",label="Phone")
     plt.bar(x_data,y2_data,lw=0.5,fc="b",label="android",bottom=y_data)
    复制代码

     

4. 并列柱状图

在绘制并列的柱状图中,要控制好每个柱状体的位置和大小可以使用width属性

  • width: 设置每组柱状体的宽度

  • x轴:x轴的宽度每组直接也要设置好

  • 例如继续改造上面案例,我们为bar1和bar2添加了width属性后,单独设置x轴并排的宽度为0.3

    x_width = range(0,len(x_data))
    x2_width = [i+0.3 for i in x_width]
    
    
    plt.bar(x_width,y_data,lw=0.5,fc="r",width=0.3,label="Phone")
    plt.bar(x2_width,y2_data,lw=0.5,fc="b",width=0.3,label="Android")
    
    plt.xticks(range(0,5),x_data)
    复制代码

     

5. 水平柱状图

柱状图中,有时候需要让柱状图水平放置,比较差异,我们这时候需要使用到barh方法

  • pyplot.barh(y,width):绘制水平柱状图

  • 结合上述案例,改用barh方法

  x_data = ["20年".format(i) for i in range(16,21)]
  y_data = list(random.randint(100,300) for i in range(5))
  y2_data = list(random.randint(100,300) for i in range(5))

  x_width = range(0,len(x_data))
  x2_width = [i+0.3 for i in x_width]

  plt.barh(x_width,y_data,lw=0.5,fc="r",height=0.3,label="Phone")
  plt.barh(x2_width,y2_data,lw=0.5,fc="b",height=0.3,label="Android")
  plt.yticks(range(0,5),x_data)

  plt.legend()

  plt.title("销量分析")
  plt.ylabel("年份")
  plt.xlabel("销量")

  plt.show()
复制代码

 

6. 添加折线柱状图

我们在查看柱状图时,有时候会需要辅助折线来查看

  • 使用pyplot.plot()方法汇总折线图

  • 同时使用pyplot.text()显示坐标值

  • 当堆叠图时,需要计算好折线相对位置

    plt.plot(x_data,y_data,color="pink",linestyle="--")
    
    plt.plot(x_data, y2_data+200, color="skyblue", linestyle="-.")
    
    # 柱状图
    plt.bar(x_data,y_data,lw=0.5,fc="r",width=0.3,label="Phone",alpha=0.5)
    plt.bar(x_data,y2_data, lw=0.5, fc="b", width=0.3, label="Android",alpha=0.5,bottom=y_data)
    
    for i,j in zip(x_data,y_data):
    
       plt.text(i,j+0.05,"%d"%j,ha="center",va="bottom")
    
    for i2,j2 in zip(x_data,y2_data):
    
       plt.text(i2,j2+180,"%d"%j2,ha="center",va="bottom")
    复制代码

     

7. 正负柱状图

我们需要使用Axes对象来设置坐标轴的位置

  • 首先使用pyplot.gca()方法创建axes对象

  • 然后使用matplotlib.spines模块调用set_position设置坐标轴位置

  • set_position 设置轴位置点

  • spines[]选项有"left"|"bottom"|"width"|"height"

  • set_position 值格式为(位置类型,数量);位置类型;"outward"|"axes"|"data"|;数量:中心->("轴",0.5),零->("数据",0.0)

    y_data = np.random.randint(100, 300,5)
    y2_data = np.random.randint(100, 300,5)
    
    ax = plt.gca()
    ax.spines["bottom"].set_position(('data', 0))
    
    plt.bar(x_data,+y_data,lw=0.5,fc="r",width=0.3,label="Phone")
    plt.bar(x_data,-y2_data, lw=0.5, fc="b", width=0.3, label="Android")
    
    for i,j in zip(x_data,y_data):
    
        plt.text(i,j,"%d"%j,ha="center",va="top")
    
    for i2,j2 in zip(x_data,y2_data):
    
        plt.text(i2,-j2,"%d"%j2,ha="center",va="bottom")
    复制代码

总结

本期,我们对matplotlib模块中详细学习绘制各种柱状图标相关属性和方法,在遇到需要直观展示离散数据点的差异时,我们可以使用bar()或者barh()绘制美观的图表。

以上是本期内容,欢迎大佬们点赞评论,下期见~

Python可视化库matplotlib(超详细)

Matplotlib简介

Matplotlib 是一个Python的2D绘图库。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。

通过学习Matplotlib,可让数据可视化,更直观的真实给用户。使数据更加客观、更具有说服力。 Matplotlib是Python的库,又是开发中常用的库。

在这里插入图片描述

  • 是专门用于开发2D图表(包括3D图表)
  • 以渐进、交互式方式实现数据可视化

开发环境搭建

如果使用的是Anaconda Python开发环境,那么Matplotlib已经被集成进Anaconda,并不需要单独安装。

安装 Anaconda 请参考 Tensorflow 2.0 最新版(2.4.1) 安装教程

如果使用的是标准的Python开发环境,可以使用下面的命令安装Matplotlib:

  1. Windows 系统安装 Matplotlib,执行如下命令:
pip install matplotlib

如果要了解Matplotlib更详细的情况,请访问官方网站。网址如下:https://matplotlib.org

安装完Matplotlib后,可以测试一下Matplotlib是否安装成功。进入Python的环境使用下面的语句导入matplotlib.pyplot 模块。如果不出错,就说明Matplotlib已经安装成功了。

import matplotlib.pyplot as plt

虽然上述的安装方式比较简单,但是有时候不能确保安装成功或者并不能保证安装的Matplotlib版本适合当今Python环境。在这个时候,建议读者登录Python官方网站https://www.python.org/,点击菜单PyPI输入Matplotlib到下载页如下图所示,在这个页面中查找与你使用的Python版本匹配的wheel文件(扩展名为“.whl”的文件)。

例如:使用的是64位的Python3.6,则需要下载matplotlib-3.1.0-cp36-cp36m-win_amd64.whl

在这里插入图片描述
当读者下载到得到的文件是matplotlib-3.1.0-cp36-cp36m-win_amd64.whl,将这个文件保存在” E:/matp”目录下。接下来,需要打开一个命令窗口,并切换到“e:/matp”目录下。执行如下命令安装Matplotlib

pip install   matplotlib-3.1.0-cp36-cp36m-win_amd64.whl

为什么要学习Matplotlib

可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法。

  • 能将数据进行可视化,更直观的呈现
  • 使数据更加客观、更具说服力

例如:下面两个图为数字展示和图形展示:

在这里插入图片描述

绘制基础

在使用Matplotlib绘制图形时,其中有两个最为常用的场景。一个是画点,一个是画线。pyplot基本方法的使用如下表。

在这里插入图片描述
matplotlib.pytplot包含了一系列类似于matlab的画图函数。

import matplotlib.pyplot as plt

图形绘制流程

  1. 创建画布 – plt.figure()

plt.figure(figsize=(), dpi=)
figsize:指定图的长宽
dpi:图像的清晰度
返回fig对象

  1. 绘制图像 – plt.plot(x, y)
  2. 显示图像 – plt.show()

认识Matplotlib图像结构

在这里插入图片描述

实现基础绘图功能

import matplotlib.pyplot as plt
import random
from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ['SimHei']
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False

# 0.准备数据
x = range(60)
y = [random.uniform(15, 18) for i in x]  # random.uniform:返回一个随机浮点数 N ,当 a <= b 时 a <= N <= b ,当 b < a 时 b <= N <= a

'''
DPI(Dots Per Inch,每英寸点数)是一个量度单位,用于点阵数码影像,指每一英寸长度中,取样、可显示或输出点的数目。
DPI是打印机、鼠标等设备分辨率的度量单位。是衡量打印机打印精度的主要参数之一,一般来说,DPI值越高,表明打印机的打印精度越高。
'''
# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)  # 画布大小,dpi:清晰度

# 2.绘制图像
plt.plot(x, y)

# 3.图像显示
plt.show()

在这里插入图片描述

设置标签文字和线条粗细

在上面的实例直线结果不够完美,开发者可以绘制的线条样式进行灵活设置。例如:可以设置线条的粗细、设置文字等。

绘制折线图并设置样式

import matplotlib.pyplot as plt
datas=[1,2,3,4,5]
squares=[1,4,9,16,25]
plt.plot(datas,squares,linewidth=5) #设置线条宽度
#设置图标标题,并在坐标轴上添加标签
plt.title('Numbers',fontsize=24)
plt.xlabel('datas',fontsize=14)
plt.ylabel('squares',fontsize=14)
plt.show()

在这里插入图片描述

解决中文乱码&符号不正常显示

在这里插入图片描述
在这里插入图片描述

Matplotlib 默认情况不支持中文,我们可以使用以下简单的方法来解决:

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签

中文乱码和符号不正常显示:

from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ['SimHei']
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False

解决标签、标题中的中文问题

import matplotlib.pyplot as plt
datas=[1,2,3,4,5]
squares=[1,4,9,16,25]
plt.plot(datas,squares,linewidth=5) #设置线条宽度
#设置中文乱码问题
plt.rcParams['font.sans-serif'] = ['SimHei']
#设置图标标题,并在坐标轴上添加标签
plt.title('标题设置',fontsize=24)
plt.xlabel('x轴',fontsize=14)
plt.ylabel('y轴',fontsize=14)
plt.show()

在这里插入图片描述

绘制直线

在使用Matplotlib绘制线性图时,其中最简单的是绘制线图。在下面的实例代码中,使用Matplotlib绘制了一个简单的直线。具体实现过程如下:

(1)导入模块pyplot,并给它指定别名plt,以免反复输入pyplot。在模块pyplot中包含很多用于生产图表的函数。
(2)将绘制的直线坐标传递给函数plot()。
(3)通过函数plt.show()打开Matplotlib查看器,显示绘制的图形。

根据两点绘制一条线

import matplotlib.pyplot as plt
#将(0,1)点和(2,4)连起来
plt.plot([0,2],[1,4])
plt.show()

在这里插入图片描述

绘制折线图

折线图:以折线的上升或下降来表示统计数量的增减变化的统计图

特点:能够显示数据的变化趋势,反映事物的变化情况。(变化)

api:plt.plot(x, y)

在上述的实例代码中,使用两个坐标绘制一条直线,接下来使用平方数序列1、4、9、16和25来绘制一个折线图。

import matplotlib.pyplot as plt
x=[1,2,3,4,5]
squares=[1,4,9,16,25]
plt.plot(x,squares)
plt.show()

在这里插入图片描述
举例:展现上海一周的天气,比如从星期一到星期日的天气温度如下:

import matplotlib.pyplot as plt 
# 1.创建画布 
plt.figure(figsize=(10, 10), dpi=100) 
# 2.绘制折线图 
plt.plot([1, 2, 3, 4, 5, 6 ,7], [17,17,18,15,11,11,13]) 
# 3.显示图像 
plt.show()

在这里插入图片描述
举例:正弦曲线

import numpy as np

# 0. 准备数据
x = np.linspace(-10, 10, 1000)  # 等差数列
y = np.sin(x)  # sin()

# 1. 创建画布
plt.plot(x, y)
# 2.1 添加网格显示
plt.grid(True, linestyle='--', alpha=0.5)
# 2.2 设置标题
plt.title('折线图')

# 3. 显示图像
plt.show()

在这里插入图片描述

折线图案例

折线图的应用场景

  • 呈现公司产品(不同区域)每天活跃用户数
  • 呈现app每天下载数量
  • 呈现产品新功能上线后,用户点击次数随时间的变化
  • 拓展:画各种数学函数图像
    • 注意:plt.plot()除了可以画折线图,也可以用于画各种数学函数图像

为了更好地理解所有基础绘图功能,我们通过天气温度变化的绘图来融合所有的基础API使用 需求:画出某城市11点到12点1小时内每分钟的温度变化折线图,温度范围在15度~18度。

准备数据并画出初始折线图

import matplotlib.pyplot as plt
import random
from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ['SimHei']
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False

# 0.准备数据
x = range(60)
y = [random.uniform(15, 18) for i in x]  # random.uniform:返回一个随机浮点数 N ,当 a <= b 时 a <= N <= b ,当 b < a 时 b <= N <= a

'''
DPI(Dots Per Inch,每英寸点数)是一个量度单位,用于点阵数码影像,指每一英寸长度中,取样、可显示或输出点的数目。
DPI是打印机、鼠标等设备分辨率的度量单位。是衡量打印机打印精度的主要参数之一,一般来说,DPI值越高,表明打印机的打印精度越高。
'''
# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)  # 画布大小,dpi:清晰度

# 2.绘制图像
plt.plot(x, y)

# 3.图像显示
plt.show()

在这里插入图片描述

添加自定义x,y刻度

  • plt.xticks(x, **kwargs)
    • x:要显示的刻度值
  • plt.yticks(y, **kwargs)
    • y:要显示的刻度值
# 增加以下两行代码 
# 构造x轴刻度标签 
x_ticks_label = ["11点{}分".format(i) for i in x] 
# 构造y轴刻度 
y_ticks = range(40) 
# 修改x,y轴坐标的刻度显示 
plt.xticks(x[::5], x_ticks_label[::5]) 
plt.yticks(y_ticks[::5])

添加网格显示

为了更加清楚地观察图形对应的值

plt.grid(True, linestyle='--', alpha=0.5)

添加描述信息

添加x轴、y轴描述信息及标题
通过fontsize参数可以修改图像中字体的大小

plt.xlabel("时间") 
plt.ylabel("温度") 
plt.title("中午11点0分到12点之间的温度变化图示", fontsize=20)

图像保存

# 保存图片到指定路径 
plt.savefig("test.png")

注意plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片。

完整代码

import matplotlib.pyplot as plt
import random
from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ['SimHei']
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False

# 0.准备数据
x = range(60)
y = [random.uniform(15, 18) for i in x]  # random.uniform:返回一个随机浮点数 N ,当 a <= b 时 a <= N <= b ,当 b < a 时 b <= N <= a

'''
DPI(Dots Per Inch,每英寸点数)是一个量度单位,用于点阵数码影像,指每一英寸长度中,取样、可显示或输出点的数目。
DPI是打印机、鼠标等设备分辨率的度量单位。是衡量打印机打印精度的主要参数之一,一般来说,DPI值越高,表明打印机的打印精度越高。
'''
# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)  # 画布大小,dpi:清晰度

# 2.绘制图像(折线图)
plt.plot(x, y)

# 2.1 添加x,y轴刻度
x_ticks_label = ['11点{}分'.format(i) for i in x]
y_ticks = range(40)

# 修改x,y轴刻度显示
# plt.xticks(x_ticks_label[::5])  坐标刻度不可以直接通过字符串进行修改
# tick:对号; 钩号; 记号
plt.xticks(x[::5], x_ticks_label[::5])  # 先修改为数字刻度,之后替换中文刻度
plt.yticks(y_ticks[::5])

# 2.2 添加网格显示
plt.grid(True, linestyle='--', alpha=0.5)

# 2.3 添加描述信息
plt.xlabel('时间')
plt.ylabel('温度')
plt.title('中午11点-12点某城市温度变化图', fontsize=20)

# 2.4 图像保存(放在show前面,show()会释放figure资源,如果显示图像之后保存图片只能保存空图片)
plt.savefig('./test.png')

# 3.图像显示
plt.show()

在这里插入图片描述

在一个坐标系中绘制多个图像

多次plot即可

收集到北京当天温度变化情况,温度在1度到3度。怎么去添加另一个在同一坐标系当中的不同图形,其实很简单只需要再次plot即可,但是需要区分线条,如下:

# 0.准备数据
x = range(60)
# random.uniform:返回一个随机浮点数 N ,当 a <= b 时 a <= N <= b ,当 b < a 时 b <= N <= a
y_sh = [random.uniform(15, 18) for i in x]
y_bj = [random.uniform(1, 3) for i in x]

'''
DPI(Dots Per Inch,每英寸点数)是一个量度单位,用于点阵数码影像,指每一英寸长度中,取样、可显示或输出点的数目。
DPI是打印机、鼠标等设备分辨率的度量单位。是衡量打印机打印精度的主要参数之一,一般来说,DPI值越高,表明打印机的打印精度越高。
'''
# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)  # 画布大小,dpi:清晰度

# 2.绘制图像(折线图)
plt.plot(x, y_sh, label='上海')
# 设置线的风格,颜色,添加图例
plt.plot(x, y_bj, color='r', linestyle='--', label='北京')

# 2.1 添加x,y轴刻度
x_ticks_label = ['11点{}分'.format(i) for i in x]
y_ticks = range(40)

# 修改x,y轴刻度显示
# plt.xticks(x_ticks_label[::5])  坐标刻度不可以直接通过字符串进行修改
# tick:对号; 钩号; 记号
plt.xticks(x[::5], x_ticks_label[::5])  # 先修改为数字刻度,之后替换中文刻度
plt.yticks(y_ticks[::5])

# 2.2 添加网格显示
plt.grid(True, linestyle='--', alpha=0.5)

# 2.3 添加描述信息
plt.xlabel('时间')
plt.ylabel('温度')
plt.title('中午11点-12点某城市温度变化图', fontsize=20)

# 2.4 图像保存(放在show前面,show()会释放figure资源,如果显示图像之后保存图片只能保存空图片)
# plt.savefig('./test.png')

# 2.5 显示图例
plt.legend(loc="best")  # 0

# 3.图像显示
plt.show()

在这里插入图片描述
我们仔细观察,用到了两个新的地方,一个是对于不同的折线展示效果,一个是添加图例。

显示图例

注意:如果只在plt.plot()中设置label还不能最终显示出图例,还需要通过plt.legend()将图例显示出来。

# 绘制折线图 
plt.plot(x, y_shanghai, label="上海") 
# 使用多次plot可以画多个折线 
plt.plot(x, y_beijing, color='r', linestyle='--', label="北京") 
# 显示图例 
plt.legend(loc="best")

参数 loc

在这里插入图片描述

多个坐标系实现绘图

多个坐标系显示—plt.subplots(面向对象的画图方法)

可以通过subplots函数实现(旧的版本中有subplot,使用起来不方便),推荐subplots函数

matplotlib.pyplot.subplots(nrows=1, ncols=1, **fig_kw)创建一个带有多个axes(坐标系/绘图区)的图:

Parameters: 
	nrows, ncols : 设置有几行几列坐标系 
		int, optional, default: 1, Number of rows/columns of the subplot grid. 
	Returns: 
	fig : 图对象 
	axes : 返回相应数量的坐标系 

	设置标题等方法不同: 
	set_xticks 
	set_yticks 
	set_xlabel 
	set_ylabel

关于axes子坐标系的更多方法:请参考:
https://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes

注意plt.函数名()相当于面向过程的画图方法,axes.set_方法名()相当于面向对象的画图方法。

# 0.准备数据
x = range(60)
# random.uniform:返回一个随机浮点数 N ,当 a <= b 时 a <= N <= b ,当 b < a 时 b <= N <= a
y_sh = [random.uniform(15, 18) for i in x]
y_bj = [random.uniform(1, 3) for i in x]

'''
DPI(Dots Per Inch,每英寸点数)是一个量度单位,用于点阵数码影像,指每一英寸长度中,取样、可显示或输出点的数目。
DPI是打印机、鼠标等设备分辨率的度量单位。是衡量打印机打印精度的主要参数之一,一般来说,DPI值越高,表明打印机的打印精度越高。
'''
# 1.创建画布
# plt.figure(figsize=(20, 8), dpi=100)  # 画布大小,dpi:清晰度
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(
    20, 8), dpi=100)  # 画布fig对象,区域axes对象()

# 2.绘制图像(折线图)
# plt.plot(x, y_sh, label='上海')
# # 设置线的风格,颜色,添加图例
# plt.plot(x, y_bj, color='r', linestyle='--', label='北京')
axes[0].plot(x, y_sh, label='上海')
# 设置线的风格,颜色,添加图例
axes[1].plot(x, y_bj, color='r', linestyle='--', label='北京')

# 2.1 添加x,y轴刻度
x_ticks_label = ['11点{}分'.format(i) for i in x]
y_ticks = range(40)

# 修改x,y轴刻度显示
# plt.xticks(x_ticks_label[::5])  坐标刻度不可以直接通过字符串进行修改
# tick:对号; 钩号; 记号
# plt.xticks(x[::5], x_ticks_label[::5])  # 先修改为数字刻度,之后替换中文刻度
# plt.yticks(y_ticks[::5])
axes[0].set_xticks(x[::5])
axes[0].set_yticks(y[::5])
axes[0].set_xticklabels(x_ticks_label[::5])
axes[1].set_xticks(x[::5])
axes[1].set_yticks以上是关于超详细的Python matplotlib 绘制柱状图的主要内容,如果未能解决你的问题,请参考以下文章

python3——matplotlib绘图1

如何使用matplotlib绘制柱条?

如何利用Python中的Pandas库绘制柱形图

100天精通Python(可视化篇)——第80天:matplotlib绘制不同种类炫酷柱状图代码实战(簇状堆积横向百分比3D柱状图)

Python可视化神器:pyecharts,轻松绘制 30+ 种超实用精美图表!

Python基础 | 还不会python绘图?两万字博文教你Matplotlib库(超详细总结)