文章目录

  • 前言
  • 一、所用到的模块
  • 二、单一颜色的普通不分组柱状图
    • 1.示例数据如下
    • 2.代码如下
      • 2.1 代码如下(示例):
        • 2.1.1 Case1:
        • 2.1.2 Case2:
        • 2.1.3 Case3:
  • 三、多种颜色的普通不分组柱状图
    • 1.示例数据如下
    • 2.代码如下
      • 2.1 代码如下(示例):
        • 2.1.1 Case1:
  • 四、多种颜色的普通分组柱状图
    • 1.示例数据如下
    • 2.代码如下
      • 2.1 代码如下(示例):
        • 2.1.1 Case1:
      • 2.2 我们可以看到,在上述作图过程中,我们把画布(fig)背景色设置为#B0C4DE,把轴域(ax)背景色或者称为绘图区域背景色设置为white(纯白色),以上图片都是我截图保存下来的,所以能够保持我们对fig和ax的背景色的设置,但是如果我们想用plt.savefig()语句把图片保存到本地,且仍然保留我们对fig和ax的背景色的设置的话,需要使用以下语句参数,如下所示:
  • 五、总结

前言

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


一、所用到的模块

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

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

1.示例数据如下

表格如下(示例):

语言种类 2020年用户量(人数)
C 2000
C++ 3000
Python 3000
Java 5000
Java Script 2000
PHP 1000
Ruby 800

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

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'] = Falsex_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)
# 这里颜色设置成 橙色:"#FF8C00"
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()

输出结果如下:

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


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'] = Falsex_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)
# 这里颜色设置成 橙色:"#FF8C00"
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()

输出结果如下:

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


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'] = Falsex_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)
# 这里颜色设置成 橙色:"#FF8C00"
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()

输出结果如下:


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

1.示例数据如下

表格如下(示例):

语言种类 2020年用户量(人数)
C 2000
C++ 3000
Python 3000
Java 5000
Java Script 2000
PHP 1000
Ruby 800

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

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'] = Falsex_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)
# 这里颜色设置成 橙色:"#FF8C00"
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()

输出结果如下:


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

1.示例数据如下

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

语言种类 2020年用户量人数 2021年用户量人数 2022年用户量人数
C 2000 3000 5000
C++ 3000 4000 6000
Python 3000 6000 10000
Java 5000 4000 6000
Java Script 2000 4000 3000
PHP 1000 2000 2000
Ruby 800 1000 1000

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

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'] = Falsex_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)
# x轴上每个刻度上能容纳的柱子的总的宽度设为0.8
total_width = 0.8
# 由y值可以看出x轴每个刻度上一共有3组数据, 也即3个柱子
total_num = 3
# 每个柱子的宽度用each_width表示
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)
# 这里颜色设置成 橙色:"#FF8C00"
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()
  • 输出结果如下:

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

plt.savefig(picturename + '.jpg', facecolor=self.fig.get_facecolor())
# facecolor=self.fig.get_facecolor()就是需要我们添加的参数, 这样我们就能把图片的fig和ax区域设定的背景色保存到本地了。

五、总结

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

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

  1. Python Matplotlib数据可视化绘图之(六)————图片大小、颜色、标题、纵横坐标、画布和绘图区域背景颜色、Legend(图例)等的参数设置详解

    文章目录 前言 一.图片大小的设定和调节 1. 三种调整matplotlib图片大小的方法 1.1 plt.figure(figsize=(n, n)) 1.1.1 代码如下: 1.1.2 输出结果如 ...

  2. 【Python实现数据可视化】创建3D柱状图

    虽然matplotlib主要专注于绘图,并且主要是二维的图形,但是它也有一些不同的扩展,能让我们在地理图上绘图,让我们把Excel和3D图表结合起来.在matplotlib的世界里,这些扩展叫做工具包 ...

  3. Python+matplotlib数据可视化鼠标悬停自动标注功能实现

    功能描述:根据已有数据绘制图形之后,鼠标进入轴内自动设置背景色,退出轴时自动恢复背景色,若鼠标移动时悬停于曲线附近,则自动弹出文本标注提示当前值. 参考代码: 运行效果(鼠标位于轴外时): 运行效果( ...

  4. python matplotlib数据可视化教程_matplotlib的Python数据可视化和探索——入门指南

    matplotlib--最受欢迎的Python库,用于数据可视化和探索 我喜欢在Python中使用matplotlib.这是我学会掌握的第一个可视化库,此后一直存在.matplotlib是最受欢迎的用 ...

  5. Python matplotlib数据可视化 subplot绘制多个子图

    数据可视化的时候,有时需要将多个子图放在同一个画板上进行比较.通过使用GridSpec类配合subplot,可以很容易对子区域进行划定和选择,在同一个画板上绘制多个子图. 原文链接:https://y ...

  6. python matplotlib数据可视化教程_Python使用matplotlib实现数据可视化教程

    目前有很多 工具 都可以数实现据可视化,比如我们常用的Excel,还有数据科学另一门重要的语言R,以及百度的Echarts等可视化工具.今天我们的主角是 Python 中的matplotlib库(官网 ...

  7. python matplotlib数据可视化_Python - matplotlib 数据可视化

    2  图和子图的建立 2.1  导入matplotlib import matplotlib.pyplot as plt import numpy as np 2.2  建立图和子图方式一 plt.p ...

  8. Python+matplotlib数据可视化设置图例3个精选案例

    本周推荐书目:<Python程序设计实验指导书>,董付国编著,清华大学出版社 本书详情链接二维码(清华大学出版社天猫官方旗舰店): 送书活动在继续,下周送第五批,详情链接:<Pyth ...

  9. python—matplotlib数据可视化实例注解系列-----之plot图线型设置

    本文代码源自官方实例,部分进行了修改和注解,增加不同线型的显示实例,帮助学习和查询. """ ====================================== ...

  10. python如何读取mat文件可视化_python Matplotlib数据可视化(1):简单入门

    1 matplot入门指南 matplotlib是Python科学计算中使用最多的一个可视化库,功能丰富,提供了非常多的可视化方案,基本能够满足各种场景下的数据可视化需求.但功能丰富从另一方面来说也意 ...

最新文章

  1. 04 集成学习 - Boosting - AdaBoost算法构建
  2. Python 判断类型
  3. 人工智能的浪潮中,知识图谱何去何从?
  4. SpringBoot 2.0 系列001 -- 入门介绍以及相关概念
  5. python推荐系统-python 新闻推荐系统(基于新闻内容推荐)
  6. jquery自己主动旋转的登录界面的背景代码登录页背景图
  7. 02.analyzer-tokenizer
  8. Word 2010 制作文档结构之章节自动编号
  9. 使用Maven Jenkins和JMeter自动化测试
  10. MySQL数据库变量_数据库参数_MySQL变量_系统变量_用户变量
  11. java easyui样式_【Java框架型项目从入门到装逼】第八节 - 用EasyUI绘制主界面
  12. jQuery LigerUI 插件介绍及使用之ligerGrid
  13. 赛门铁克分家前利润暴跌
  14. 深入了解基于容器的红帽PaaS和OpenShift
  15. 【人脸表情识别】基于matlab GUI LBP+SVM脸部动态特征人脸表情识别【含Matlab源码 1369期】
  16. 高速系统设计自学笔记——信号完整性6
  17. Myeclipse/Eclipse中修改WebContent/WebRoot
  18. ICPC冠军教练亲自授课 字节跳动ICPC冬令营全球招募50支受训队
  19. 他 1 个月写了个操作系统,退休后去做飞行员!
  20. 转(js幻灯片,jQuery幻灯,js焦点轮换图,js幻灯轮播代码大全(2) - 酷站代码)...

热门文章

  1. 遥感图像几何校正 ENVI
  2. php rrd graph,使用lvs-rrd工具监控存储lvs状态信息
  3. QQ揭秘:如何实现托盘闪动消息提醒?【低调赠送:QQ高仿版GG 4.1 最新源码】...
  4. wpf/sl下的复合程序-CAG入门
  5. 「电商干货」分销爆单的6个步骤
  6. 用Python实现温度转换程序
  7. 一切成功源于积累——20140219 混沌理论三原则
  8. Alexander Tropsha:AI从零自学设计新型药物分子,研究登Science子刊|42问AI与机器人未来...
  9. 【电脑讲解】电脑常用快捷键,10个常用快捷键提高电脑工作效率
  10. Mstar 648 平台遥控器/按键包POWER键配置