Python绘图 \ 数据可视化

Python绘图 \ 数据可视化

  • 绘图基础知识
    • PyLab
    • Pyplot
  • 科研绘图
  • 格式设置

本文旨在介绍Python绘图的基本知识,通过介绍绘图基础知识并具体列举三种常用的绘图工具来帮助读者了解绘图工具的适用。在文末笔者给出了科研绘图的一般格式以供参考。

为了方便大家,先在此放上从Excel中提取数据并直接进行数据处理的代码,读者可以在实操过程中不断深入学习相关知识。

import pandas as pd
import matplotlib.pyplot as plt

# 读取Excel数据
file_path = "D:\filepath\example.xlsx"
sheet = pd.read_excel(file_path, sheet_name = "Sheet1") # sheet_name不指定时默认返回全表数据
col_name = sheet.columns

### 设置格式
# 设置坐标轴刻度向内
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'

plt.rcParams['font.sans-serif']=['Times New Roman']  # 设置全局字体,可选择需要的字体替换掉‘Times New Roman’
font1={'family': 'Times New Roman', 'weight': 'light', 'size': 12}  # 设置字体模板,
font2={'family': 'Times New Roman', 'weight': 'light', 'size': 16}  # 设置字体模板,

plt.title("Title",fontdict=font2)  # 标题

# # 设置坐标轴的取值范围
# plt.xlim((0.5, 6.5))
# plt.ylim((0, 36))

plt.title("Title")
plt.minorticks_on()   # 副刻度线
plt.xlabel('x - label',fontdict=font1)
plt.ylabel('y - label',fontdict=font1)

plt.ticklabel_format(axis='both',style='sci')  # 设置文章风格
plt.savefig("example.png",format="png",dpi=600)  # 自动保存图片
linestyle = ['r-+', 'g-o', 'b-*','y-^', 'c-v', 'm-x'] # 线条颜色及样式列表

for i in range(1,len(col_name)):
    plt.plot(sheet[col_name[0]], sheet[col_name[i]],linestyle[i%len(linestyle)],lw=1.5,label=col_name[i])#,marker = 'o')

plt.legend(loc="upper right",scatterpoints=1,prop=font1,shadow=False,frameon=True)  # 添加图例 loc控制图例位置,“best”为最佳位置,“bottom”,"top",“topringt"等

plt.ticklabel_format(axis='both',style='sci')  # 设置文章风格
plt.savefig("example.png",format="png",dpi=600)  # 自动保存图片
plt.show()

待处理数据如下
Python绘图 \ 数据可视化_第1张图片
处理结果
Python绘图 \ 数据可视化_第2张图片
emmmm,选取的数据不是很好,don’t carry,接下来就是Python绘图与数据可视化的详细介绍了。

绘图基础知识

  • 画板figure,画纸Sublpot
  • 画纸上最上方是标题title
  • 坐标轴Axis
  • 图例Legend
  • 网格Grid
  • 点 Markers

Python绘图 \ 数据可视化_第3张图片

Python绘图 \ 数据可视化_第4张图片

Python绘图 \ 数据可视化_第5张图片

绘图类型

函数名称 描述
Bar 绘制条形图
Barh 绘制水平条形图
Boxplot 绘制箱型图
Hist 绘制直方图
his2d 绘制2D直方图
Pie 绘制饼状图
Plot 在坐标轴上画线或者标记
Polar 绘制极坐标图
Scatter 绘制x与y的散点图
Stackplot 绘制堆叠图
Stem 用来绘制二维离散数据绘制(又称为“火柴图”)
Step 绘制阶梯图
Quiver 绘制一个二维按箭头

接下来,我们对Python中最常适用的三种绘图工具进行介绍。

Matplotlib 是一款用于数据可视化的 Python 软件包,支持跨平台运行,它能够根据 NumPy 数组来绘制 2D 图像,其使用简单、代码清晰易懂。

PyLab

PyLab 是一个面向 Matplotlib 的绘图库接口,其语法和 MATLAB 十分相近。它和 Pyplot 模快都够实现 Matplotlib 的绘图功能。

import numpy
import pylab 

x = numpy.linspace(-3, 3, 30)
y = x**2

pylab.plot(x, y)
pylab.show()
from pylab import *   # 使用此方法导入的库 其函数前不需再加库名
plot(x, sin(x))
plot(x, cos(x), 'r-')
plot(x, -sin(x), 'g--')
show()

Pyplot

在 Matplotlib 中,面向对象编程的核心思想是创建图形对象(figure object)。通过图形对象来调用其它的方法和属性,这样有助于我们更好地处理多个画布。在这个过程中,pyplot 负责生成图形对象,并通过该对象来添加一个或多个 axes 对象(即绘图区域)。

Matplotlib 提供了matplotlib.figure图形类模块,它包含了创建图形对象的方法。通过调用 pyplot 模块中 figure() 函数来实例化 figure 对象。如下所示:

基础案例

# 导入matplotlib的pyplot模块
import matplotlib.pyplot as plt

# 第一步:定义x和y坐标轴上的点
x = [1,2,3,4]
y = [1,4,9,16]

# 第二步:使用plot绘制线条 第1个参数是x的坐标值 第2个参数是y的坐标值
plt.plot(x,y)

# 第三步:显示图形
plt.show()

绘图属性设置

'''
color:线条颜色
marker:点的形状
linestyle:线条形状
axis:坐标轴范围
'''
plt.plot(x,y,color='r',marker='o',linestyle='dashed')
# plt.plot(x,y,'ro')
plt.axis([0,6,0,20])
plt.show()

添加文字

# 在绘图时在plt.plot(x,y)语句后可添加文字说明
plt.xlabel('x-label') # x轴
plt.ylabel('y-label') # y轴
plt.title('title') # 标题

绘制正弦图像

from matplotlib import pyplot as plt
import numpy as np
import math
# 调用math.pi方法弧度转为角度
x = np.arange(0, math.pi*2, 0.05)
y = np.sin(x)
plt.plot(x,y)
plt.xlabel("angle")
plt.ylabel("sine")
plt.title('sine wave')
# 使用show展示图像
plt.show()

描点

import matplotlib.pyplot as plt
import numpy as np

xpoints = np.array([1, 8])
ypoints = np.array([3, 10])

plt.plot(xpoints, ypoints, 'o')
plt.show()

绘制直线

import matplotlib.pyplot as plt
import numpy as np

xpoints = np.array([0, 6])
ypoints = np.array([0, 100])
#xpoints = np.array([1, 2, 6, 8])
#ypoints = np.array([3, 8, 1, 10])

plt.plot(xpoints, ypoints)
plt.show()

绘制正余弦

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0,4*np.pi,0.1)   # start,stop,step
y = np.sin(x)
z = np.cos(x)
plt.plot(x,y,x,z)
#plt.plot(x,y,x,z, marker = 'o')
plt.show()

格式设置

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.plot(x, y)

plt.title("RUNOOB TEST TITLE")
plt.xlabel("x - label")
plt.ylabel("y - label")

plt.show()

subplot() 方法绘制多张图

import matplotlib.pyplot as plt
import numpy as np

# plot 1:
xpoints = np.array([0, 6])
ypoints = np.array([0, 100])

plt.subplot(1, 2, 1)
plt.plot(xpoints,ypoints)
plt.title("plot 1")

# plot 2:
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])

plt.subplot(1, 2, 2)
plt.plot(x,y)
plt.title("plot 2")

plt.suptitle("RUNOOB subplot Test")
plt.show()
import matplotlib.pyplot as plt
import numpy as np

# plot 1:
x = np.array([0, 6])
y = np.array([0, 100])

plt.subplot(2, 2, 1)
plt.plot(x,y)
plt.title("plot 1")

# plot 2:
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])

plt.subplot(2, 2, 2)
plt.plot(x,y)
plt.title("plot 2")

# plot 3:
x = np.array([1, 2, 3, 4])
y = np.array([3, 5, 7, 9])

plt.subplot(2, 2, 3)
plt.plot(x,y)
plt.title("plot 3")

# plot 4:
x = np.array([1, 2, 3, 4])
y = np.array([4, 5, 6, 7])

plt.subplot(2, 2, 4)
plt.plot(x,y)
plt.title("plot 4")

plt.suptitle("RUNOOB subplot Test")
plt.show()
import matplotlib.pyplot as plt
import numpy as np

# 创建一些测试数据
x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x**2)

# 创建一个画像和子图
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Simple plot')

# 创建两个子图 
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
ax1.plot(x, y)
ax1.set_title('Sharing Y axis')
ax2.scatter(x, y)

# 创建四个子图 
fig, axs = plt.subplots(2, 2, subplot_kw=dict(projection="polar"))
axs[0, 0].plot(x, y)
axs[1, 1].scatter(x, y)

plt.show()

scatter() 方法来绘制散点图

import matplotlib.pyplot as plt
import numpy as np

x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18, 25, 19, 31, 28, 14])

plt.scatter(x, y)

# 设置图标大小
#sizes = np.array([20,50,100,200,500,1000,60,90])
#plt.scatter(x, y, s=sizes)

# 设置颜色
#plt.scatter(x, y, color = '#88c999')

# 根据颜色条添加颜色并添加颜色条
#colors = np.array([0, 10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])
#plt.scatter(x, y, c=colors, cmap='afmhot_r') # 根据颜色条添加颜色
#plt.colorbar() # 添加颜色条

plt.show()

bar() 绘制柱形图

import matplotlib.pyplot as plt
import numpy as np

x = np.array(["Runoob-1", "Runoob-2", "Runoob-3", "C-RUNOOB"])
y = np.array([12, 22, 6, 18])

plt.bar(x,y)
# 设置柱形图宽度,bar() 方法使用 width 设置,barh() 方法使用 height 设置 height
#plt.bar(x, y, width = 0.1)
plt.show()

绘制饼图

import matplotlib.pyplot as plt
import numpy as np

y = np.array([35, 25, 25, 15])

plt.pie(y)
# plt.pie(y,
#         labels=['A','B','C','D'], # 设置饼图标签
#         colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"], # 设置饼图颜色
#         explode=(0, 0.2, 0, 0), # 第二部分突出显示,值越大,距离中心越远
#         autopct='%.2f%%', # 格式化输出百分比
#        )
# plt.title("RUNOOB Pie Test") # 设置标题

plt.show()

科研绘图

下面笔者给出一种较为全面的绘图程序,读者可自行修改参数适用。

import numpy as np
import matplotlib.pyplot as plt

# 可结合Pyhon处理Excel数据部分,使用Excel数据直接绘图
x = np.array([1, 2, 3, 4, 5, 6])

y1=[1,3,5,7,9,11]
y2=[2,8,13,19,22,29]

# 设置坐标轴刻度向内
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'

plt.rcParams['font.sans-serif']=['Times New Roman']  # 设置全局字体,可选择需要的字体替换掉‘Times New Roman’
font1={'family': 'Times New Roman', 'weight': 'light', 'size': 12}  # 设置字体模板,
font2={'family': 'Times New Roman', 'weight': 'light', 'size': 16}  # 设置字体模板,

plt.title("Title",fontdict=font2)  # 标题
plt.plot(x,y1,'r-',lw=1.5,label="theory",marker = 'o')  # 红色直线
plt.plot(x,y2,'b-',lw=1.5,label="simulation",marker = 'o')  # 蓝色直线

# plt.plot(x, y1, x, y2, marker = 'o') # 自动线条格式


# 设置坐标轴的取值范围
plt.xlim((0.5, 6.5))
plt.ylim((0, 36))

plt.title("Title")
plt.minorticks_on()   # 副刻度线
plt.xlabel('x - label',fontdict=font1)
plt.ylabel('y - label',fontdict=font1)
plt.legend(loc="upper right",scatterpoints=1,prop=font1,shadow=False,frameon=True)  # 添加图例 loc控制图例位置,“best”为最佳位置,“bottom”,"top",“topringt"等

plt.ticklabel_format(axis='both',style='sci')  # 设置文章风格
plt.savefig("example.png",format="png",dpi=600)  # 自动保存图片
plt.show()

运行结果:
Python绘图 \ 数据可视化_第6张图片

格式设置

颜色(color 简写为 c):
蓝色: 'b' (blue)
绿色: 'g' (green)
红色: 'r' (red)![请添加图片描述](https://img-blog.csdnimg.cn/6457112caf4c42dfba77a64ed2d0b3cc.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATW9zdGVyMjQ2OQ==,size_20,color_FFFFFF,t_70,g_se,x_16)

蓝绿色(墨绿色): 'c' (cyan)
红紫色(洋红): 'm' (magenta)
黄色: 'y' (yellow)
黑色: 'k' (black)
白色: 'w' (white)

线型(linestyle 简写为 ls):
实线: '-'
虚线: '--'
虚点线: '-.'
点线: ':'
点: '.' 

点型(标记marker):
像素: ','
圆形: 'o'
上三角: '^'
下三角: 'v'
左三角: '<'
右三角: '>'
方形: 's'
加号: '+' 
叉形: 'x'
棱形: 'D'
细棱形: 'd'
垂直线: '|'
水平线: '_'

你可能感兴趣的:(Python,python,Python绘图,数据可视化,matplotlib)