Python Matplotlib数据可视化绘图之(一)————柱状图

文章目录

前言

本文我们主要介绍利用Python中的Matplotlib模块进行几种柱状图的画法,包括整张图片只有一种颜色的不分组柱状图、整张图片有好几种颜色的不分组柱状图、整张图片有好几种颜色的分组柱状图等。

一、所用到的模块

主要利用Python中的Matplotlib模块完成该功能。

二、单一颜色的普通不分组柱状图

1.示例数据如下

表格如下(示例):

语言种类2020年用户量(人数)C2000C++3000Python3000Java5000Java Script2000PHP1000Ruby800

现在需要把表格中的数据绘制成柱状图,从而进一步分析各类语言的用户的使用情况。

2.代码如下

2.1 代码如下(示例):

2.1.1 Case1:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

plt.rcParams['axes.unicode_minus'] = False

x_labels = ['C', 'C++', 'Python', 'Java', 'Java Script', 'PHP', 'Ruby']
y = [2000, 3000, 3000, 5000, 2000, 1000, 800]
fig = plt.figure(figsize=(8, 6), facecolor='#B0C4DE')
ax = fig.add_subplot(facecolor='white')

color_list = ['#FF0000', '#FF8C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#800080']
x_loc = np.arange(7)

ax.bar(x_loc, y, color=color_list[1])
plt.grid(True, ls=':', color='b', alpha=0.3)
plt.xlabel('编程语言类别', fontweight='bold')
plt.ylabel('编程语言用户量(人数)', fontweight='bold')
plt.title('编程语言用户量数据分析图', fontweight='bold')
plt.show()

输出结果如下:

Python Matplotlib数据可视化绘图之(一)————柱状图

注意:此时图片的横坐标的刻度标签没有按照我们的要求把各个语言的名字显示出来,并且图片中没有网格,不方便我们查看对应的纵轴的值。

2.1.2 Case2:

因此,我们对上述代码优化如下:
(1)把横坐标的刻度标签加上去:

ax.set_xticklabels(x_labels)

(2)加上网格:

plt.grid(True, ls=':', color='b', alpha=0.3)

此时完整代码如下:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

plt.rcParams['axes.unicode_minus'] = False

x_labels = ['C', 'C++', 'Python', 'Java', 'Java Script', 'PHP', 'Ruby']
y = [2000, 3000, 3000, 5000, 2000, 1000, 800]
fig = plt.figure(figsize=(8, 6), facecolor='#B0C4DE')
ax = fig.add_subplot(facecolor='white')

color_list = ['#FF0000', '#FF8C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#800080']
x_loc = np.arange(7)

ax.bar(x_loc, y, color=color_list[1])
ax.set_xticklabels(x_labels)
plt.grid(True, ls=':', color='b', alpha=0.3)
plt.xlabel('编程语言类别', fontweight='bold')
plt.ylabel('编程语言用户量(人数)', fontweight='bold')
plt.title('编程语言用户量数据分析图', fontweight='bold')
plt.show()

输出结果如下:

Python Matplotlib数据可视化绘图之(一)————柱状图

注意:此时坐标轴还是没有按照我们想要的样子来呈现对应的刻度标签,并且会报出如下的错误提示:

Python Matplotlib数据可视化绘图之(一)————柱状图

2.1.3 Case3:

小编经过一番debug发现出现这个报错的原因是我们在ax.set_xticklabels(x_labels)前面没有加上ax.set_xticks(x_labels)这句语句。下面我们把这句语句加上去,再试试。此时完整代码如下:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

plt.rcParams['axes.unicode_minus'] = False

x_labels = ['C', 'C++', 'Python', 'Java', 'Java Script', 'PHP', 'Ruby']
y = [2000, 3000, 3000, 5000, 2000, 1000, 800]
fig = plt.figure(figsize=(8, 6), facecolor='#B0C4DE')
ax = fig.add_subplot(facecolor='white')

color_list = ['#FF0000', '#FF8C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#800080']
x_loc = np.arange(7)

ax.bar(x_loc, y, color=color_list[1])
ax.set_xticks(x_loc)
ax.set_xticklabels(x_labels)
plt.grid(True, ls=':', color='b', alpha=0.3)
plt.xlabel('编程语言类别', fontweight='bold')
plt.ylabel('编程语言用户量(人数)', fontweight='bold')
plt.title('编程语言用户量数据分析图', fontweight='bold')
plt.show()

输出结果如下:

Python Matplotlib数据可视化绘图之(一)————柱状图

三、多种颜色的普通不分组柱状图

1.示例数据如下

表格如下(示例):

语言种类2020年用户量(人数)C2000C++3000Python3000Java5000Java Script2000PHP1000Ruby800

现在需要把表格中的数据绘制成柱状图,从而进一步分析各类语言的用户的使用情况。

2.代码如下

2.1 代码如下(示例):

2.1.1 Case1:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

plt.rcParams['axes.unicode_minus'] = False

x_labels = ['C', 'C++', 'Python', 'Java', 'Java Script', 'PHP', 'Ruby']
y = [2000, 3000, 3000, 5000, 2000, 1000, 800]
fig = plt.figure(figsize=(8, 6), facecolor='#B0C4DE')
ax = fig.add_subplot(facecolor='white')

color_list = ['#FF0000', '#FF8C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#800080']
x_loc = np.arange(7)

ax.bar(x_loc, y, color=color_list)
ax.set_xticks(x_loc)
ax.set_xticklabels(x_labels)
plt.grid(True, ls=':', color='b', alpha=0.3)
plt.xlabel('编程语言类别', fontweight='bold')
plt.ylabel('编程语言用户量(人数)', fontweight='bold')
plt.title('编程语言用户量数据分析图', fontweight='bold')
plt.show()

输出结果如下:

Python Matplotlib数据可视化绘图之(一)————柱状图

四、多种颜色的普通分组柱状图

1.示例数据如下

假如增加了2021和2022年每种语言的用户量情况,数据如下表所示(示例):

语言种类2020年用户量人数2021年用户量人数2022年用户量人数C200030005000C++300040006000Python3000600010000Java500040006000Java Script200040003000PHP100020002000Ruby80010001000

现在需要把表格中的数据绘制成柱状图,从而进一步分析各类语言的用户的使用情况。

2.代码如下

2.1 代码如下(示例):

2.1.1 Case1:

  • *代码如下:
import matplotlib
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

plt.rcParams['axes.unicode_minus'] = False

x_labels = ['C', 'C++', 'Python', 'Java', 'Java Script', 'PHP', 'Ruby']
y_2020 = [2000, 3000, 3000, 5000, 2000, 1000, 800]
y_2021 = [3000, 4000, 6000, 4000, 4000, 2000, 1000]
y_2022 = [5000, 6000, 10000, 6000, 3000, 2000, 1000]
legend_labels = ['2020', '2021', '2022']
y = [y_2020, y_2021, y_2022]
fig = plt.figure(figsize=(8, 6), facecolor='#B0C4DE')
ax = fig.add_subplot(facecolor='white')

color_list = ['#FF0000', '#FF8C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#800080']
x_loc = np.arange(7)

total_width = 0.8

total_num = 3

each_width = total_width / total_num
if total_num % 2 == 0:
    x1 = x_loc - (total_num / 2 - 1) * each_width - each_width / 2
else:
    x1 = x_loc - ((total_num - 1) / 2) * each_width
x_list = [x1 + each_width * i for i in range(total_num)]
print(x_list)

for i in range(0, len(y)):
    ax.bar(x_list[i], y[i], color=color_list[i], width=each_width, label=legend_labels[i])
ax.set_xticks(x_loc)
ax.set_xticklabels(x_labels)
ax.grid(True, ls=':', color='b', alpha=0.3)
ax.set_xlabel('编程语言类别', fontweight='bold')
ax.set_ylabel('编程语言用户量(人数)', fontweight='bold')
plt.title('编程语言用户量数据分析图', fontweight='bold', pad=25)

ax_twinx = ax.twinx()
ax_twinx.plot(x_loc, y_2021, linestyle='-', marker='o', markersize=3, color=color_list[1], label='Middle')
fig.legend(loc='upper center', bbox_to_anchor=(0.5, 0.96), frameon=False, ncol=5, handlelength=0.9, handleheight=0.9, fontsize='small')
ax_twinx.set_ylabel('Middle', fontweight='bold')
fig.tight_layout()
fig.subplots_adjust(top=0.9)
plt.show()
  • 输出结果如下:
    Python Matplotlib数据可视化绘图之(一)————柱状图

2.2 我们可以看到,在上述作图过程中,我们把画布(fig)背景色设置为#B0C4DE,把轴域(ax)背景色或者称为绘图区域背景色设置为white(纯白色),以上图片都是我截图保存下来的,所以能够保持我们对fig和ax的背景色的设置,但是如果我们想用plt.savefig()语句把图片保存到本地,且仍然保留我们对fig和ax的背景色的设置的话,需要使用以下语句参数,如下所示:

plt.savefig(picturename + '.jpg', facecolor=self.fig.get_facecolor())

五、总结

以上就是今天要讲的内容,本文仅仅简单介绍了Python中Matplotlib模块对于绘制柱状图时需要注意的方面,对于不同类型的柱状图,我们需要设置不同的参数来调控。希望对广大初学者网友有帮助。

Original: https://blog.csdn.net/Mr_Dragon66/article/details/127814055
Author: 北极熊在南极_whl
Title: Python Matplotlib数据可视化绘图之(一)————柱状图

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/763878/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【Pygame实战】怀旧经典—这款给娃的棋类游戏,你还记得叫什么吧?(一定要收藏)

    导语 大家以前应该都听说过一个游戏:叫做 走四棋儿 这款游戏出来到现在时间挺长了,小时候的家乡农村条件有限,附近也没有正式的玩具店能买 到玩具,因此小朋友们聚在一起玩耍时,其玩具大…

    Python 2023年9月18日
    060
  • 一步步带你设计MySQL索引数据结构

    前言 MySQL的索引是一个非常重要的知识点,也基本上是面试必考的一个技术点,所以非常重要。那你了解MySQL索引的数据结构是怎么样的吗?为什么要采用这样的数据结构? 现在化身为M…

    Python 2023年10月13日
    041
  • pytest入门[3]

    一、@pytest.mark.parametrize()基本用法 二、YAML文件详解—实现接口自动化 三、接口测试以及接口自动化的行业 四、requests库简介 五…

    Python 2023年9月12日
    050
  • python 实现循环链表

    -*- coding: utf-8 -*-# ——————————————————————-…

    Python 2023年6月6日
    080
  • 15. Python 赋值运算

    赋值运算 文章目录 15. 赋值运算 * 1. 赋值运算符 2. 赋值运算符语法 3. 直接赋值 4. 链式赋值 5. 参数赋值 6. 系列包赋值 7. 总结 1. 赋值运算符 赋…

    Python 2023年8月25日
    065
  • Python中的字典合并与列表合并

    Original: https://www.cnblogs.com/123456feng/p/16198894.htmlAuthor: 蚂蚁ailingTitle: Python中…

    Python 2023年11月3日
    045
  • Github基于令牌身份验证配置及使用

    1、前言 2、配置 3、使用 1、前言 从2021年8月31日起,Github不再支持通过密码进行身份验证,将要求使用基于令牌(token)的身份验证。 2、配置 第一步:进入GI…

    Python 2023年6月11日
    089
  • Python写实用小工具-实现图片转字符画

    一、介绍 字符画,是一系列字符的组合,我们可以把每个字符看成是一个大的像素,一个字符可以代表一种颜色,字符各类越多,可体现的颜色越多,字符画就更有层次感。 灰度值,指黑白图像中点的…

    Python 2023年11月2日
    050
  • 一篇文章让你轻松学会python爬取的数据保存到MySQL中,有案例哦

    文章目录 pymysql 基本使用 八个步骤以及案例分析 * 一.导入pymysql模块 二.获取到database的链接对象 三.创建数据表的方法 四.获取执行sql语句的光标对…

    Python 2023年8月2日
    055
  • 升级版飞机大战来袭,手把手教学,万字详解,你还学不会嘛?

    前言 嗨!好几天没更新了,有没有想我?最近大家都在干嘛呢? 哈哈哈 我知道了,大家再准备1024程序员节嘛~ 上一期给大家制作了一个简易版本的飞机大战大家还记得嘛,不记得的话可以看…

    Python 2023年9月17日
    053
  • Xxl-job的使用

    官方文档地址 项目开发中,常常以下场景需要分布式任务调度:1、同一服务多个实例的任务存在互斥时,需要统一协调2、定时任务的执行需要支持高可用、监控运维、故障告警3、需要统一管理和追…

    Python 2023年10月1日
    0108
  • Python 函数进阶-全局空间和局部空间

    全局空间和局部空间 命名空间 命名空间的概念是为了划分和控制变量是否可见以及生命周期的长度;命名空间的作用域称为作用域。 [En] The concept of namespace…

    Python 2023年5月24日
    091
  • 数据分析——Pandas(进阶)

    编辑器:jupyter notebook 一、数据统计 import numpy as np import pandas as pd 1. 创建DataFrame对象 生成100行…

    Python 2023年8月22日
    045
  • Python matplotlib__legend

    Python matplotlib__legend 1. 准备数据 width=4 height=width*0.618 fig, ax = plt.subplots(figsiz…

    Python 2023年9月6日
    042
  • 24-爬虫-scrapy-Item Pipeline

    给IT入门加星标,提升编程技能 当Item在Spider中被收集之后, 它将会被传递到Item Pipeline 每个Item Pipeline组件接收到Item,定义一些操作行为…

    Python 2023年10月2日
    045
  • Scrapy分布式【05】

    抵扣说明: 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。 Original: https://blo…

    Python 2023年10月7日
    042
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球