为了方便大家,先在此放上从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()
待处理数据如下
处理结果
emmmm,选取的数据不是很好,don’t carry,接下来就是Python绘图与数据可视化的详细介绍了。
绘图类型
函数名称 | 描述 |
---|---|
Bar | 绘制条形图 |
Barh | 绘制水平条形图 |
Boxplot | 绘制箱型图 |
Hist | 绘制直方图 |
his2d | 绘制2D直方图 |
Pie | 绘制饼状图 |
Plot | 在坐标轴上画线或者标记 |
Polar | 绘制极坐标图 |
Scatter | 绘制x与y的散点图 |
Stackplot | 绘制堆叠图 |
Stem | 用来绘制二维离散数据绘制(又称为“火柴图”) |
Step | 绘制阶梯图 |
Quiver | 绘制一个二维按箭头 |
接下来,我们对Python中最常适用的三种绘图工具进行介绍。
Matplotlib 是一款用于数据可视化的 Python 软件包,支持跨平台运行,它能够根据 NumPy 数组来绘制 2D 图像,其使用简单、代码清晰易懂。
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()
在 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()
颜色(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'
垂直线: '|'
水平线: '_'