【Python数据可视化】matplotlib之绘制常用图形:折线图、柱状图(条形图)、饼图和直方图

文章传送门

Python 数据可视化
matplotlib之绘制常用图形:折线图、柱状图(条形图)、饼图和直方图
matplotlib之设置坐标:添加坐标轴名字、设置坐标范围、设置主次刻度、坐标轴文字旋转并标出坐标值
matplotlib之增加图形内容:设置图例、设置中文标题、设置网格效果
matplotlib之设置子图:绘制子图、子图共享x轴坐标
matplotlib之绘制高级图形:散点图、热力图、等值线图、极坐标图
matplotlib之绘制三维图形:三维散点图、三维柱状图、三维曲面图

目录

  • [简述 / 前言](#简述 / 前言)
  • [1. 折线图](#1. 折线图)
  • [2. 柱状图(条形图)](#2. 柱状图(条形图))
  • [3. 饼图](#3. 饼图)
  • [4. 直方图](#4. 直方图)

简述 / 前言

这篇文章主要讲解Python数据可视化库 matplotlib 的一些操作,由于知识点较多,所以应该会分多篇文章进行分享。具体可以参考 matplotlib 官网,下面附上一些小贴士,5 张图片掌握 matplotlib 主要知识点,这5张图片来源于 matplotlib 官网的备忘录。后面的文章只会总结一些重点内容,不会面面俱到,所以对绘制某一个图形感兴趣的伙伴,可以直接去官网看教程和例子。更详细的教程可能会在 Python 教程那里给出,等有时间再写吧~





这一篇主要分享用 matplotlib 绘制常用图形:折线图、柱状图(条形图)、饼图和直方图。

画完图都要使用 show() 方法才能看到图像哦~


1. 折线图

绘制折线图,一般需要读取 x, y 轴的数据,再通过 plot 方法绘制折线图,示例如下:

py 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 设置x轴和y轴的坐标
x = np.arange(0, 9, 2)      # [0, 9) 每间隔1个数取一次值,即:x = [0 2 4 6 8]
y = np.array([0, 1, 4, 6, 8])
print(f"x = {x}")
print(f"y = {y}")

plt.plot(x, y)  # 通过plot方法绘制折线
plt.show()  # 通过show方法展示

输出:

可以看到在绘制折线图时,只给了它坐标轴的值,但是没有给线条颜色、样式等属性,这是因为 matplotlib 已经封装好一些默认值了,如果要修改,可以通过可变参数 **kwargs 来改动,常用的属性如下:

属性 含义
color 线的颜色
linewidth 线的宽度(厚度)
linestyle 线的样式 【虚线::,破折线:--,点划线:-.
marker 坐标点的标记方式 【实心圆:o,加号:+,五角星:*,点:.,叉叉:x,上三角形:^,下三角形:v,左三角形:<,右三角形:>,正方形:s,菱形:d,五边形:p,六边形:h,下划线:(_或者数字的01)】
alpha 透明度,取值范围:[0, 1],值越小越透明

现在对上面的折线图进行修改,看看效果:

py 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 设置x和y轴的坐标
x = np.arange(0, 9, 2)
plt.plot(x, x * 0.5, color='#33141e', linewidth='10', linestyle=':', alpha=0.2)
plt.plot(x, x, color='blue', linewidth='1', linestyle='--', marker='v', alpha=0.5)
plt.plot(x, x * 1.5, color='red', linewidth='3', linestyle='-.', marker='o', alpha=1)
plt.show()

输出:

2. 柱状图(条形图)

关键语句:matplotlib.pyplot.bar(x, height, ...)

一般会这么写:matplotlib.pyplot.bar(x, height, alpha=alpha, width=width, color=color, edgecolor=edgecolor, label=label, lw=lw),各参数含义如下:

属性 含义
x x轴的位置序列
height 每个x对应的条形图高度,注意:len(x) == len(height)
alpha 透明度,取值范围:[0, 1],值越小越透明
width 每条柱状图的宽度(也可以只填一个数,这时全部柱状图的宽度都是一致的)
color 每个柱状图的颜色【它会根据你给的颜色循环使用,比如有4条柱状图,你只给了3种颜色:红黄蓝 ,那么最后图形的颜色就是:红黄蓝红
edgecolor 边缘的颜色
label 图例
lw 边缘线的宽度

示例:

py 复制代码
import matplotlib.pyplot as plt

x = [1, 2, 3, 4]  # x轴刻度
height = [10, 20, 15, 18]  # y轴刻度(height)
color = ['red', 'yellow', 'blue', 'green']
x_label = ['class1', 'class2', 'class3', 'class4']
# 绘制x刻度标签
plt.xticks(x, x_label)
# 绘制柱状图
plt.bar(x, height, color=color, edgecolor='black')
plt.show()

输出:

修改一些样式,并只给定3种颜色:

py 复制代码
import matplotlib.pyplot as plt

x = [1, 2, 3, 4]  # x轴刻度
height = [10, 20, 15, 18]  # y轴刻度
color = ['red', 'yellow', 'blue']   # 只给定3种颜色
x_label = ['class1', 'class2', 'class3', 'class4']
# 绘制x刻度标签
plt.xticks(x, x_label)
# 绘制柱状图
plt.bar(x, height, alpha=0.8, width=0.2, color=color, edgecolor='black', lw=3)
plt.show()

输出:

:因为在语句中加入了 plt.xticks(x, x_label),所以x轴显示的不是数值,如果注释掉那句话,那么图形是这样的~

如果不是一次性传入数据,而是传一次数据,画一个柱状图,那么每个柱状图的颜色就会不一样。

示例:

py 复制代码
import matplotlib.pyplot as plt

x = [1, 2, 3, 4]  # x轴刻度
height = [10, 20, 15, 18]  # y轴刻度
color = ['red', 'yellow', 'blue']   # 只给定3种颜色
x_label = ['class1', 'class2', 'class3', 'class4']
# 绘制x刻度标签
# plt.xticks(x, x_label)
# 绘制柱状图
# plt.bar(x, height)
for xi, yi in zip(x, height):	# 一个一个柱状图画
    plt.bar(xi, yi)
plt.show()

输出:

3. 饼图

关键语句:matplotlib.pyplot.pie(sizes, ...)

一般会这么写:matplotlib.pyplot.pie(sizes, explode=explode, labels=labels, colors=colors, startangle=startangle, radius=radius),其中各属性含义如下:

属性 含义
sizes 饼图每个块的值
explode 离开中心点的距离(注意:len(explode) == len(sizes)
labels 饼图每个块要说明的文字
colors 饼图每个块的颜色【它会根据你给的颜色循环使用,比如有4块饼图,你只给了3种颜色:红黄蓝 ,那么最后图形的颜色就是:红黄蓝红
autopct 显示每块饼图划分的比例,并设置显示的小数位数
shadow (布尔值)是否显示阴影
startangle 起始角度,默认是从x轴正方向逆时针开始画图
radius 饼图的半径

示例:

py 复制代码
import matplotlib.pyplot as plt

sizes = [10, 20, 15, 18, 50]
explode = (0.1, 0.1, 0.1, 0.1, 0.1)
labels = ['class1', 'class2', 'class3', 'class4', 'class5']
colors = ['blue', 'red', 'green', 'yellow', 'pink', 'black']
plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%.1f%%', shadow=True, startangle=30, radius=0.8)
plt.show()

输出:

如果颜色没给够,那么图形就是这样的:

py 复制代码
import matplotlib.pyplot as plt

sizes = [10, 20, 15, 18, 50]
explode = (0, 0.1, 0, 0, 0)
labels = ['class1', 'class2', 'class3', 'class4', 'class5']
colors = ['blue', 'red', 'green']
plt.pie(sizes, explode=explode, labels=labels, colors=colors, startangle=30, radius=1.2)
plt.show()

输出:

:这样看上去就很难区分每部分了,甚至还会出现两个块颜色相同合并在了一起,所以颜色一定要给够!哪怕颜色给多了也不会报错,它只会按照给的颜色顺序赋值!!!

4. 直方图

关键语句:matplotlib.pyplot.hist(x, bins, ...)

一般会这么写:matplotlib.pyplot.hist(x, bins, density=density, histtype=histtype, align=align, color=color, label=label),其中各属性含义如下:

属性 含义
x 在x轴上的数值y(数据分布情况)
bins 柱状图个数(数据区间)
density 是否将直方图的频数转换成频率,默认值为:False(y轴为频数),可以改为 True(y轴为频率)
histtype 直方图形状,可以选:barbarstackedstep(梯形)、stepfilled(对梯形内部进行填充),默认是bar
align 不建议修改 】控制柱状图水平分布,可以选:leftmid(默认值)、right
color 直方图颜色
label 标签,展示图标时使用

示例:

py 复制代码
import matplotlib.pyplot as plt
import numpy as np

x = np.random.randint(10, 51, 300)
bins = np.arange(10, 51, 2)     # 设置连续的边界值,即直方图的分布区间
# 绘制直方图
plt.hist(x, bins)
plt.show()

输出:

修改一些属性试试:

py 复制代码
import matplotlib.pyplot as plt
import numpy as np

x = np.random.randint(10, 51, 300)
bins = np.arange(10, 51, 2)     # 设置连续的边界值,即直方图的分布区间
# 绘制直方图
plt.hist(x, bins, density=True, histtype='step', align='left', color='green')
plt.show()

输出:

相关推荐
杨超越luckly13 分钟前
Python应用指南:高德交通态势数据
python·arcgis·数据挖掘·数据分析·交通态势
c的s18 分钟前
朴素贝叶斯方法
python·算法·机器学习
码农丁丁28 分钟前
[python3]Excel解析库-calamine,10倍openpyxl性能
开发语言·python·excel·calamine
背太阳的牧羊人36 分钟前
df.replace({‘b‘: r‘\s*\.\s*‘}, {‘b‘: np.nan}, regex=True)
python·正则表达式
&白帝&1 小时前
Java数据类型
java·python·算法
m0_748233361 小时前
基于python的网络爬虫爬取天气数据及可视化分析(Matplotlib、sk-learn等,包括ppt,视频)
爬虫·python·matplotlib
勇敢磊磊学IT2 小时前
IO编程与正则表达式
python·正则表达式
是十一月末2 小时前
Opencv查找、绘制轮廓、圆形矩形轮廓和近似轮廓
人工智能·python·opencv·计算机视觉
机器懒得学习2 小时前
基于人脸识别和 MySQL 的考勤管理系统实现
数据库·人工智能·python·科技·mysql
亲持红叶3 小时前
Chapter4.3:Implementing a feed forward network with GELU activations
人工智能·python·gpt·自然语言处理·transformer