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天前
|
机器学习/深度学习 数据采集 数据挖掘
探索Python编程的奥秘
【10月更文挑战第7天】本文将带你走进Python的世界,探索其背后的逻辑与魅力。我们将从基础语法开始,逐步深入到函数、面向对象编程等高级特性,最后通过实际项目案例,让你体验Python的强大与便捷。无论你是编程新手,还是有一定基础的开发者,都能在这篇文章中找到你需要的信息和启发。
|
2天前
|
IDE 开发工具 Python
Python 编程入门:打造你的第一个程序
【10月更文挑战第6天】编程,这个听起来高大上又充满神秘感的领域,其实就像学习骑自行车一样。一开始你可能会觉得难以掌握平衡,但一旦你学会了,就能自由地穿梭在广阔的道路上。本文将带你走进 Python 的世界,用最简单的方式让你体验编写代码的乐趣。不需要复杂的理论,我们将通过一个简单的例子——制作一个猜数字游戏,来实践学习。准备好了吗?让我们开始吧!
|
4天前
|
存储 人工智能 Java
Python编程入门:从基础到实战
【10月更文挑战第4天】本文旨在为初学者提供一个全面而深入的Python编程学习路径。我们将从Python的基本语法和概念开始,然后逐步深入到更复杂的主题,如数据结构、面向对象编程和异常处理等。最后,我们将通过一些实际的项目案例,帮助读者将理论知识应用到实践中去。无论你是编程新手,还是有一定经验的开发者,都可以在这篇文章中找到适合自己的学习内容。让我们一起开启Python编程的学习之旅吧!
|
3天前
|
存储 人工智能 数据挖掘
探索Python编程:从基础到进阶
【10月更文挑战第5天】在数字时代的浪潮中,掌握编程技能已成为一项宝贵的能力。本文旨在为初学者提供一个深入浅出的Python编程之旅,从基本概念到实际应用,逐步揭示编程之美。无论你是编程新手还是希望深化理解,跟随这篇文章的脚步,你将学会如何用Python语言构建你的第一个程序,并了解代码背后的逻辑。让我们开始吧,解锁编程的秘密,开启你的技术成长之路!
|
4天前
|
数据可视化 Python
Python编程之数据可视化入门
【10月更文挑战第4天】在数字时代的洪流中,数据如同星辰般璀璨,而将它们绘制成图表,便是我们探索宇宙的方式。本文将带你启航,用Python这艘航船,驶向数据可视化的奥秘。我们将从安装必要的工具包开始,逐步深入到数据的呈现,最后通过代码示例点亮知识的灯塔,指引你在数据海洋中航行。让我们握紧舵盘,乘风破浪,揭开数据背后的故事吧!
|
3天前
|
数据采集 程序员 开发者
Python编程入门:从基础到实战
【10月更文挑战第5天】本文旨在为初学者提供一条清晰的Python学习路径,涵盖基础知识、关键概念、实战项目以及常见问题解答。我们将通过简单易懂的语言和实际代码示例,帮助读者快速掌握Python编程技能。无论你是零基础的新手还是有一定经验的开发者,都能在这篇文章中找到有价值的信息。让我们一起开启Python编程之旅吧!
|
4天前
|
开发者 Python
Python 语法糖:让编程更简单
Python 语法糖:让编程更简单
16 3
|
4天前
|
开发者 Python
Python 语法糖:让编程更简单(续)
Python 语法糖:让编程更简单(续)
13 3
|
5天前
|
人工智能 数据挖掘 程序员
Python 编程入门:打造你的第一个程序
【10月更文挑战第3天】编程,这个看似高深莫测的技能,实际上就像学骑自行车一样,一旦掌握,便能开启全新的世界。本文将带领初学者步入Python编程的殿堂,从基础语法到编写实用程序,一步步解锁编程的乐趣。
|
5天前
|
小程序 Python
利用Python编程提取身份证的信息
利用Python编程提取身份证的信息
12 2