matplotlib各种案例总结(python经典编程案例)

简介: 该文章汇总了使用matplotlib绘制不同类型图表的方法和案例,包括条形图、折线图等,并展示了如何调整颜色和线条样式等属性。

一. 绘制基本图表

颜色color和简写:

  • 红色 r: red
  • 绿色 g: green
  • 蓝色 b: blue
  • 青色 c: cyan
  • 洋红色 m: magenta
  • 黄色 y: yellow
  • 黑色 k: black
  • 白色 w: white

1.1 绘制柱状图

import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5, 6, 7, 8]
y = [60, 45, 49, 36, 42, 67, 40, 50]
plt.bar(x, y)
plt.show()

import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5, 6, 7, 8]
y = [60, 45, 49, 36, 42, 67, 40, 50]
plt.bar(x, y, width = 0.5, color = 'r')
plt.show()

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
x = ['上海', '成都', '重庆', '深圳', '北京', '长沙', '南京', '青岛']
y = [60, 45, 49, 36, 42, 67, 40, 50]
plt.bar(x, y, width = 0.5, color = 'r')
plt.show()

1.2 绘制条形图

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
x = ['上海', '成都', '重庆', '深圳', '北京', '长沙', '南京', '青岛']
y = [60, 45, 49, 36, 42, 67, 40, 50]
plt.barh(x, y, height = 0.5, color = 'r')
plt.show()

1.3 绘制折线图

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
y = [50, 45, 65, 76, 75, 85, 55, 78, 86, 89, 94, 90]
plt.plot(x, y, color = 'r', linestyle = 'dashdot', linewidth = 2)
plt.show()

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
y = [50, 45, 65, 76, 75, 85, 55, 78, 86, 89, 94, 90]
plt.plot(x, y, color = 'r', linestyle = 'dashdot', linewidth = 2, marker = '*', markersize = 10)
plt.show()

1.4 绘制面积图

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
y = [50, 45, 65, 76, 75, 85, 55, 78, 86, 89, 94, 90]
plt.stackplot(x, y, color = 'r')
# plt.show()
plt.savefig('1_4绘制面积图.png')

1.5 绘制散点图

import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_excel('汽车速度和刹车距离表.xlsx') 
x = data['汽车速度(km/h)']
y = data['刹车距离(m)'] 
plt.scatter(x, y, s = 100, color = 'r', marker = 'o', edgecolor = 'k') 
plt.show()

import pandas as pd
import matplotlib.pyplot as plt
from sklearn import linear_model
data = pd.read_excel('汽车速度和刹车距离表.xlsx') 
x = data['汽车速度(km/h)']
y = data['刹车距离(m)'] 
plt.scatter(x, y, s = 100, color = 'r', marker = 'o', edgecolor = 'k')
model = linear_model.LinearRegression().fit(x.values.reshape(-1,1), y)
pred = model.predict(x.values.reshape(-1,1)) 
plt.plot(x, pred,  color = 'k', linewidth = 3, linestyle = 'solid')
plt.show()

1.6 绘制饼图和圆环图

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
x = ['上海', '成都', '重庆', '深圳', '北京', '青岛', '南京']
y = [10, 45, 25, 36, 45, 56, 78]
plt.pie(y, labels = x, labeldistance = 1.1, autopct = '%.2f%%', pctdistance = 1.5)
plt.show()

plt.pie(y, labels = x, labeldistance = 1.1, autopct = '%.2f%%', pctdistance = 1.5, explode = [0,0,0,0,0,0.3,0], startangle = 90, counterclock = False)
plt.show()


import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
x = ['上海', '成都', '重庆', '深圳', '北京', '青岛', '南京']
y = [10, 45, 25, 36, 45, 56, 78]
plt.pie(y, labels = x, labeldistance = 1.1, autopct = '%.2f%%', pctdistance = 1.5, wedgeprops = {
   'width' : 0.3, 'linewidth' : 2, 'edgecolor' : 'white'})
plt.show()

二. 图表的绘制和美化技巧

2.1 在一张画布中绘制多张图表

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
y = [50, 45, 65, 76, 75, 85, 55, 78, 86, 89, 94, 90]
plt.subplot(2, 2, 1)
plt.pie(y, labels = x, labeldistance = 1.1, startangle = 90, counterclock = False)
plt.subplot(2, 2, 2)
plt.bar(x, y, width = 0.5, color = 'r')
plt.subplot(2, 2, 3)
plt.stackplot(x, y, color = 'r')
plt.subplot(2, 2, 4)
plt.plot(x, y, color = 'r', linestyle = 'solid', linewidth = 2, marker = 'o', markersize = 10)
plt.show()

2.2 添加图表元素

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
y = [50, 45, 65, 76, 75, 85, 55, 78, 86, 89, 94, 90]
plt.bar(x, y, width=0.6, color='r', label='销售额(万元)')
plt.title(label='销售额对比图', fontdict={
   'family': 'KaiTi', 'color': 'k', 'size': 30}, loc='center')
plt.xlabel('月份', fontdict={
   'family': 'SimSun', 'color': 'k', 'size': 20}, labelpad=20)  
plt.ylabel('销售额', fontdict={
   'family': 'SimSun', 'color': 'k', 'size': 20}, labelpad=20)  
plt.legend(loc='upper left', fontsize=15)
for a,b in zip(x, y):
    plt.text(x=a, y=b, s=b, ha='center', va='bottom', fontdict={
   'family': 'KaiTi', 'color': 'k', 'size': 20})
plt.show()

2.3 添加并设置网格线

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
y = [50, 45, 65, 76, 75, 85, 55, 78, 86, 89, 94, 90]
plt.plot(x, y, color = 'r', linestyle = 'solid', linewidth = 2)
plt.title(label = '销售额趋势图',fontdict = {
   'family' : 'KaiTi', 'color' : 'k', 'size' : 30}, loc = 'center')
plt.xlabel('月份', fontdict = {
   'family' : 'SimSun', 'color' : 'k', 'size' : 20}, labelpad = 20)  
plt.ylabel('销售额(万元)', fontdict = {
   'family' : 'SimSun', 'color' : 'k', 'size' : 20}, labelpad = 20)  
plt.grid(b = True, color = 'r', linestyle = 'dotted', linewidth = 1) 
plt.show()

plt.grid(b = True, axis = 'y', color = 'r', linestyle = 'dotted', linewidth = 1) 
plt.show()

2.4 调整坐标轴的刻度范围

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
y = [50, 45, 65, 76, 75, 85, 55, 78, 86, 89, 94, 90]
plt.plot(x, y, color = 'r', linestyle = 'solid', linewidth = 2, label = '销售额(万元)')
plt.title(label = '销售额趋势图',fontdict = {
   'family' : 'KaiTi', 'color' : 'k', 'size' : 30}, loc = 'center')
plt.legend(loc = 'upper left', fontsize = 15)
for a,b in zip(x, y):
    plt.text(a, b, b, ha = 'center', va = 'bottom', fontdict = {
   'family' : 'KaiTi', 'color' : 'k', 'size': 20})
plt.ylim(40, 100)
plt.show()

plt.axis('off')

三. 绘制高级图表

3.1 绘制气泡图

import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
data = pd.read_excel('产品销售统计.xlsx')
n = data['产品名称']
x = data['销售量(件)']
y = data['销售额(元)']
z = data['毛利率(%)']
plt.scatter(x, y, s=z * 300, color='r', marker='o')
plt.xlabel('销售量(件)', fontdict={
   'family': 'Microsoft YaHei', 'color': 'k', 'size': 20}, labelpad=20)
plt.ylabel('销售额(元)', fontdict={
   'family': 'Microsoft YaHei', 'color': 'k', 'size': 20}, labelpad=20)
plt.title('销售量、销售额与毛利率关系图', fontdict={
   'family': 'Microsoft YaHei', 'color': 'k', 'size': 30}, loc='center')
for a, b, c in zip(x, y, n):
    plt.text(x=a, y=b, s=c, ha='center', va='center', fontsize=15, color='w')
plt.xlim(50, 600)
plt.ylim(2900, 11000)
plt.show()

3.2 绘制组合图

import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
data = pd.read_excel('销售业绩表.xlsx')
x = data['月份']
y1 = data['销售额(万元)']
y2 = data['同比增长率'] 
plt.bar(x, y1, color = 'c', label = '销售额(万元)')  
plt.plot(x, y2, color = 'r', linewidth = 3, label = '同比增长率')
plt.legend(loc = 'upper left', fontsize = 15)
plt.show()

import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
data = pd.read_excel('销售业绩表.xlsx')
x = data['月份']  
y1 = data['销售额(万元)'] 
y2 = data['同比增长率'] 
plt.bar(x, y1, color = 'c', label = '销售额(万元)')  
plt.legend(loc = 'upper left', fontsize = 15)  
plt.twinx()  
plt.plot(x, y2, color = 'r', linewidth = 3, label = '同比增长率')  
plt.legend(loc = 'upper right', fontsize = 15)  
plt.show()

3.3 绘制直方图

import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
data = pd.read_excel('客户年龄统计表.xlsx')
x = data['年龄']
plt.hist(x, bins = 9)
plt.xlim(15, 60)
plt.ylim(0, 40)
plt.title('年龄分布直方图', fontsize = 20)
plt.xlabel('年龄')
plt.ylabel('人数')
plt.grid(b = True, linestyle = 'dotted', linewidth = 1)
plt.show()

3.4 绘制雷达图

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  
plt.rcParams['axes.unicode_minus'] = False 
data = pd.read_excel('汽车性能指标分值统计表.xlsx')  
data = data.set_index('性能评价指标')  
data = data.T  
data.index.name = '品牌'  
def plot_radar(data, feature):  
    columns = ['动力性', '燃油经济性', '制动性', '操控稳定性', '行驶平顺性', '通过性', '安全性', '环保性', '方便性', '舒适性', '经济性', '容量性'] 
    colors = ['r', 'g', 'y']  
    angles = np.linspace(0.1 * np.pi, 2.1 * np.pi, len(columns), endpoint = False)  
    angles = np.concatenate((angles, [angles[0]]))    
    figure = plt.figure(figsize = (6, 6))  
    ax = figure.add_subplot(1, 1, 1, projection = 'polar')
    for i, c in enumerate(feature):
        stats = data.loc[c]  
        stats = np.concatenate((stats, [stats[0]]))  
        ax.plot(angles, stats, '-', linewidth = 2, c = colors[i], label = str(c))
        ax.fill(angles, stats, color = colors[i], alpha = 0.75)  
    ax.legend(loc = 4, bbox_to_anchor = (1.15, -0.07))  
    ax.set_yticklabels([2, 4, 6, 8, 10])  
    ax.set_thetagrids(angles * 180 / np.pi, columns, fontsize = 12)  
    plt.show()
    return figure
figure = plot_radar(data, ['A品牌', 'B品牌', 'C品牌'])
figure = plot_radar(data, ['B品牌'])

3.5 绘制树状图

import squarify as sf
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
x = ['上海', '北京', '重庆', '成都', '南京', '青岛', '长沙', '武汉', '深圳']  
y = [260, 45, 69, 800, 290, 360, 450, 120, 50] 
colors = ['lightgreen', 'pink', 'yellow', 'skyblue', 'cyan', 'silver', 'lightcoral', 'orange', 'violet']
percent = ['11%', '2%', '3%', '33%', '12%', '15%', '18%', '5%', '2%']
chart = sf.plot(sizes = y, label = x, color = colors, value = percent, edgecolor = 'white', linewidth = 2)
plt.title(label = '城市销售额分布及占比图',fontdict = {
   'family' : 'KaiTi', 'color' : 'k', 'size' : 25})
plt.axis('off')
# plt.show()
plt.savefig('3_5树状图.png')

3.6 绘制箱型图

import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
data = pd.read_excel('1月销售统计表.xlsx')
x1 = data['成都']
x2 = data['上海']
x3 = data['北京']
x4 = data['重庆']
x5 = data['南京']
x = [x1, x2, x3, x4, x5]
labels = ['成都', '上海', '北京', '重庆', '南京']
plt.boxplot(x, vert = True, widths = 0.5, labels = labels, showmeans = True )
plt.title('各地区1月销售额箱形图', fontsize=20)
plt.ylabel('销售额(万元)')

plt.rcParams['font.sans-serif'] = ['KaiTi']  # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题

# plt.show()
plt.savefig("3_6绘制箱型图.png")

3.7 绘制玫瑰图

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']   
plt.rcParams['axes.unicode_minus'] = False
index = ['0~0.5', '0.6~2.0', '2.1~4.0', '4.1~6.0']
columns = ['N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE', 'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW']
np.random.seed(0)
data = pd.DataFrame(np.random.randint(30, 300, (4, 16)), index = index, columns = columns)
N = 16
theta = np.linspace(0, 2 * np.pi, N, endpoint = False)
width = np.pi / N 
labels = list(data.columns) 
plt.figure(figsize = (6, 6))
ax = plt.subplot(1, 1, 1, projection = 'polar')
for i in data.index:
    radius = data.loc[i] 
    ax.bar(theta, radius, width = width, bottom = 0.0, label = i, tick_label = labels)
ax.set_theta_zero_location('N') 
ax.set_theta_direction(-1)    
plt.title('各方向风速频数玫瑰图', fontsize = 20)
plt.legend(loc = 4, bbox_to_anchor = (1.3, 0.2)) 
plt.show()

代码在git上:https://gitee.com/cuiyonghua/Deep-Learning-Cases/tree/master/机器学习模块使用/matplotlib模块

相关文章
|
1天前
|
Unix Linux 网络安全
python中连接linux好用的模块paramiko(附带案例)
该文章详细介绍了如何使用Python的Paramiko模块来连接Linux服务器,包括安装配置及通过密码或密钥进行身份验证的示例。
8 1
|
1天前
|
Shell Linux Python
python执行linux系统命令的几种方法(python3经典编程案例)
文章介绍了多种使用Python执行Linux系统命令的方法,包括使用os模块的不同函数以及subprocess模块来调用shell命令并处理其输出。
8 0
|
1天前
|
调度 数据库 Python
python中APScheduler的使用详解(python3经典编程案例)
文章详细讲解了在Python中使用APScheduler来安排和执行定时任务的方法,包括不同调度器的配置与使用场景。
9 0
|
1天前
|
数据可视化 搜索推荐 JavaScript
pyecharts模块的几个经典案例(python经典编程案例)
文章提供了多个使用pyecharts模块创建数据可视化的Python编程案例,展示如何生成各种类型的图表并进行定制化设置。
7 0
|
1天前
|
数据挖掘 Python
用python的tushare模块分析股票案例(python3经典编程案例)
该文章提供了使用Python的tushare模块分析股票数据的案例,展示了如何获取股票数据以及进行基本的数据分析。
9 0
|
1天前
|
存储 数据库 Python
python的对象数据库ZODB的使用(python3经典编程案例)
该文章介绍了如何使用Python的对象数据库ZODB来进行数据存储,包括ZODB的基本操作如创建数据库、存储和检索对象等,并提供了示例代码。
8 0
|
3天前
|
存储 数据可视化 数据挖掘
揭秘!Matplotlib与Seaborn联手,如何让Python数据分析结果一目了然,惊艳全场?
在数据驱动时代,高效直观地展示分析结果至关重要。Python中的Matplotlib与Seaborn是两大可视化工具,结合使用可生成美观且具洞察力的图表。本文通过分析某电商平台的商品销量数据集,展示了如何利用这两个库揭示商品类别与月份间的销售关系及价格对销量的影响。首先使用Matplotlib绘制月份销量分布直方图,再借助Seaborn的箱线图进一步探索不同类别和价格区间下的销量稳定性。
23 10
|
2天前
|
数据可视化 数据挖掘 Linux
震撼发布!Python数据分析师必学,Matplotlib与Seaborn数据可视化实战全攻略!
在数据科学领域,数据可视化是连接数据与洞察的桥梁,能让复杂的关系变得直观。本文通过实战案例,介绍Python数据分析师必备的Matplotlib与Seaborn两大可视化工具。首先,通过Matplotlib绘制基本折线图;接着,使用Seaborn绘制统计分布图;最后,结合两者在同一图表中展示数据分布与趋势,帮助你提升数据可视化技能,更好地讲述数据故事。
9 1
|
15天前
|
数据可视化 Python
Python中的数据可视化:使用Matplotlib绘制图表
【9月更文挑战第11天】在这篇文章中,我们将探索如何使用Python的Matplotlib库来创建各种数据可视化。我们将从基本的折线图开始,然后逐步介绍如何添加更多的功能和样式,以使您的图表更具吸引力和信息量。无论您是数据科学家、分析师还是任何需要将数据转化为视觉形式的专业人士,这篇文章都将为您提供一个坚实的起点。让我们一起潜入数据的海洋,用视觉的力量揭示其背后的故事。
40 16
|
7天前
|
数据可视化 数据挖掘 API
使用Python进行数据可视化:探索Matplotlib和Seaborn库
【9月更文挑战第19天】在数据科学领域,将复杂的数据集转换成直观、易懂的图形是一项基本而关键的技能。本文旨在通过Python编程语言介绍两个强大的数据可视化库——Matplotlib和Seaborn,以及它们如何帮助数据分析师和研究人员揭示数据背后的故事。我们将从基础概念讲起,逐步深入到高级技巧,确保无论读者的背景如何,都能获得必要的知识和启发,以在自己的项目中实现有效的数据可视化。