plot()函数

1
plot(*args,**kwargs)
参数名称含义
*args前2个位置参数用来设置折线图上若干个端点坐标;
第一个参数位置:x坐标;
第二个参数位置:y坐标;
第三个参数位置:颜色、线型、标记符号形状
颜色:‘r’(红色)、‘g’ (绿色)、‘b’(蓝色)、‘c’(青色)、‘m’(品红色)、‘y’(黄色)、‘k’(黑色)、‘w’(白色)
线型:’-’(实心线)、’–’(短划线)、’-.’(点划线)、’:’(点线)
标记符:’.’(圆点)、‘o’(圆圈)、‘v’(向下的三角形)、’^’(向上的三角形)、’<’(向左的三角形)、
‘>’(向右的三角形)、’*’(五角星)、’+’(加号)、’_’(下划线)、‘x’(x符号)、‘D’(菱形)
**kwargs_alpha:指定透明度,介于0到1之间,默认为1,表示完全不透明;
antialiased或aa:TRUE表示图形启用抗锯齿或反走样,False表示不启用,默认为True;
color 或 c:线条颜色;
label:线条标签;
linestyle 或 ls:线型;
linewidth 或 lw:线条宽度,单位为像素;
marker:标记符形状;
markeredgecolor 或 mec :标记符边线颜色;
markeredgewidth 或 mew:标记符边线宽度;
markerfacecolor 或 mfc:标记符背景色;
markersize 或 ms:标记符大小;visible:线条与标记符是否可见,默认为True

——示例

1
2
3
4
5
6
7
8
9
10
import numpy as np
import matplotlib.pyplot as plt

#模拟数据
x = np.arange(0, 2 * np.pi, 0.1)
y = np.sin(x)

#画图并显示
plt.plot(x,y)
plt.show()

基本图像属性设置

坐标轴标题

1
2
3
4
#front(标签属性):字体、大小等
font = {'family' : 'Times New Roman','weight' : 'normal','size': 12}
plt.xlabel("x",font)
plt.ylabel(r"y",font)

坐标轴范围

1
2
plt.xlim(0,100)
plt.ylim(0,100)

坐标标签

1
plt.text(np.pi/2, max(y),'Max',fontsize=14)  #添加文字

添加记号

1
plt.scatter([np.pi/2], [max(y)], marker='*', color='red', s=120) #画个记号

添加参考线

1
2
3
4
5
6
# 绘制水平线 
plt.hlines(1, xmin = 0, xmax = 0.542, ls = '--', lw = 2,\
color = 'royalblue', label = 'hlines')
# 绘制竖直线
plt.vlines(0.0296, ymin = 0, ymax = 2, ls = '--', lw = 2,\
color = 'orange', label = 'vlines')

图标标题

1
plt.title('our first plot')  #图标标题

设置figure大小、像素

1
plt.figure(figsize=(6, 4), dpi=100)

横坐标文字竖排

1
r['列'] = r['列'].map(lambda x: '\n'.join(x)) 

取消每一个的边框

1
2
3
4
5
ax1 = plt.subplot(1, 1, 1)
ax1.spines['right'].set_visible(False) #右边
ax1.spines['top'].set_visible(False) #上边
ax1.spines['left'].set_visible(False) #左边
ax1.spines['bottom'].set_visible(False) #下边

保存图片

1
plt.savefig("折线图01.png", dpi=200)

代码整合示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 2 * np.pi, 0.1)
y = np.sin(x)
plt.plot(x,y,color='green',linewidth=1,linestyle='--',marker='o',markersize=2)

plt.xlabel('X label') #x轴标题
plt.ylabel('Y label') #y轴标题
plt.xlim(0,2*np.pi) #设置x轴的范围
plt.ylim(-1,1) #设置y轴的范围
plt.text(np.pi/2, max(y),'Max',fontsize=14) #添加文字
plt.scatter([np.pi/2], [max(y)], marker='*', color='red', s=120) #画个记号
# 绘制水平线
plt.hlines(0, xmin = 0, xmax = 6, ls = '--', lw = 2,
color = 'royalblue', label = 'hlines')
# 绘制竖直线
plt.vlines(3, ymin = -1, ymax = 1, ls = '--', lw = 2,
color = 'orange', label = 'vlines')
plt.title('our first plot') #图标标题
plt.show()

中文显示问题解决方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#图上显示中文的问题
import matplotlib.pyplot as plt
import matplotlib as mpl

# 生成x轴数据 列表推导式
x_data = [i for i in range(0, 55, 5)]

# 构造y轴数据
y_data1 = [0.5, 0.62, 0.72, 0.78, 0.85, 0.7, 0.64, 0.44, 0.29, 0.15, 0.09]
y_data2 = [0.5, 0.67, 0.71, 0.76, 0.79, 0.66, 0.58, 0.44, 0.38, 0.26, 0.18]
y_data3 = [0.5, 0.59, 0.72, 0.74, 0.76, 0.68, 0.58, 0.48, 0.4, 0.36, 0.3]

# matplotlib其实是不支持显示中文的 显示中文需要一行代码设置字体
mpl.rcParams['font.family'] = 'STKAITI' #'STKAITI'——字体
plt.rcParams['axes.unicode_minus'] = False # 解决坐标轴负数的负号显示问题

# 设置图形显示风格
#plt.style.use('ggplot')

# 设置figure大小、像素
plt.figure(figsize=(6, 4), dpi=100)

# 绘制三条折线 点的形状 颜色 标签:用于图例显示
plt.plot(x_data, y_data1, marker='^', color="k", label="设备1")
plt.plot(x_data, y_data2, marker="o", color="k", label="设备2")
plt.plot(x_data, y_data3, marker="s", color="k", label="设备3")

# x y 轴标签 字体大小
plt.xlabel("时间周期/min", fontsize=13)
plt.ylabel("直接信任度值", fontsize=13)

# 显示图例
plt.legend()

# 保存图片 展示show
plt.savefig("折线图01.png", dpi=200)
plt.show()

子图设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 2 * np.pi, 0.1)
y_sin = np.sin(x)
y_cos = np.cos(x)

# 创建画布,切分绘图区域
figure = plt.figure(figsize=(8,4),dpi=100)

#各子图位置
ax1 = plt.subplot(1, 2, 1)
ax2 = plt.subplot(1, 2, 2)

# 绘制两条曲线
l1=ax1.plot(x, y_sin,'r--') # 绘制第一个子图
l2=ax2.plot(x, y_cos,'b-') # 绘制第二个子图

#设置显示标题
ax1.set_title('sin curve')
ax2.set_title('cos curve')

#调整子图之间距离
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.6, hspace=0.5)
plt.show()

循环子图,图例位置、大小和样式

——部分数据展示

——代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import pandas as pd 
import matplotlib.pyplot as plt
import matplotlib as mpl

data = pd.read_excel("data.xlsx",'y3')
df = pd.read_excel("data.xlsx",'y2')
column = data.columns.tolist()[1:39] # 列表头

# matplotlib其实是不支持显示中文的 显示中文需要一行代码设置字体
mpl.rcParams['font.family'] = 'STKAITI' #'STKAITI'——字体
plt.rcParams['axes.unicode_minus'] = False # 解决坐标轴负数的负号显示问题

# 设置figure大小、像素
fig=plt.figure(figsize=(12,8), dpi=100)

for i in range(38):
plt.subplot(5, 8, i + 1) # 5行8列子图
plt.legend(frameon=False)
plt.plot(data['txt'],data[column[i]],marker='*',) #数字化
plt.plot(df['txt'],df[column[i]],marker='^',) #传统
plt.xlabel(column[i], fontsize=15)
plt.ylim(0,1.2) #y范围
plt.xlim(2011,2021)#x范围
fig.tight_layout(h_pad=1) #子图的内边距
plt.xticks(fontsize=12) #坐标轴字体大小
plt.yticks(fontsize=12) #坐标轴字体大小
fig.legend(["1","2"],bbox_to_anchor=(1,0.2),prop = {'size':15}) #图例位置,大小

plt.show()

忽视空值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import numpy as np
import matplotlib.pyplot as plt

# 生成数据
x = np.arange(1, 6)
y1 = np.array([1, 3, np.nan, 4, 2])
y2 = np.array([2, 4, 1, 3, 5])

# 绘制折线图
plt.plot(x, y1, label='Line 1')
plt.plot(x, y2, label='Line 2')

# 将 NaN 显示为空
plt.gca().yaxis.set_major_formatter(plt.NullFormatter())

# 添加图例和标题
plt.legend()
plt.title('Two Lines')

# 显示图形
plt.show()

只显示部分坐标

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

x = [0,5,9,10,15]
y = [0,1,2,3,4]

tick_spacing = 5
fig, ax = plt.subplots(1,1)
ax.plot(x,y)
ax.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
plt.show()

tick_spacing = 1
fig, ax = plt.subplots(1,1)
ax.plot(x,y)
ax.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
plt.show()

只显示部分坐标1

只显示部分坐标2