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模块

相关文章
|
29天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
28天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
16天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
102 80
|
2月前
|
存储 索引 Python
Python编程数据结构的深入理解
深入理解 Python 中的数据结构是提高编程能力的重要途径。通过合理选择和使用数据结构,可以提高程序的效率和质量
150 59
|
5天前
|
Python
[oeasy]python055_python编程_容易出现的问题_函数名的重新赋值_print_int
本文介绍了Python编程中容易出现的问题,特别是函数名、类名和模块名的重新赋值。通过具体示例展示了将内建函数(如`print`、`int`、`max`)或模块名(如`os`)重新赋值为其他类型后,会导致原有功能失效。例如,将`print`赋值为整数后,无法再用其输出内容;将`int`赋值为整数后,无法再进行类型转换。重新赋值后,这些名称失去了原有的功能,可能导致程序错误。总结指出,已有的函数名、类名和模块名不适合覆盖赋新值,否则会失去原有功能。如果需要使用类似的变量名,建议采用其他命名方式以避免冲突。
27 14
|
15天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
49 2
|
23天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
64 8
|
28天前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
46 10
|
1月前
|
机器学习/深度学习 人工智能 Java
Python 语言:强大、灵活与高效的编程之选
本文全面介绍了 Python 编程语言,涵盖其历史、特点、应用领域及核心概念。从 1989 年由 Guido van Rossum 创立至今,Python 凭借简洁的语法和强大的功能,成为数据科学、AI、Web 开发等领域的首选语言。文章还详细探讨了 Python 的语法基础、数据结构、面向对象编程等内容,旨在帮助读者深入了解并有效利用 Python 进行编程。
|
30天前
|
机器学习/深度学习 人工智能 数据挖掘
探索Python编程的奥秘
在数字世界的海洋中,Python如同一艘灵活的帆船,引领着无数探险者穿梭于数据的波涛之中。本文将带你领略Python编程的魅力,从基础语法到实际应用,一步步揭开Python的神秘面纱。
44 12