python plt 绘图详解(plt.版本)

一.plt介绍

  python中的绘图工具 :matplotli,专门用于画图。

二.安装与导入

  工具包安装:

conda install matplotli

  导入:

import matplotlib.pyplot as plt

三.使用说明

1. 使用plt.plot与plt.show绘制并显示图像

plt.plot(x, y, color, linestyle, marker, markersize, markeredgewidth, markeredgecolor, markerfacecolor, alpha, linewidth)

(1)曲线颜色(color 简写为 c):

rgbyk
红色绿色蓝色黄色黑色

(2)点型(标记marker):

+o*.xsd^vp
加号圆圈星号实心点叉号正方形钻石形上三角下三角五角星

(3)线型(linestyle 简写为 ls):

--.
实线虚线点线点横线

(4)剩余参数说明

markersize 简写为 ms(标记大小):实数

markeredgewidth 简写为 mew(标记边缘宽度):实数

markeredgecolor 简写为 mec(标记边缘颜色):颜色选项中的任意值

markerfacecolor 简写为 mfc(标记表面颜色):颜色选项中的任意值

alpha(透明度): [0,1]之间的浮点数

linewidth(线宽):实数

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号

x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y2 = [1, 4, 9, 16, 25, 36, 49, 64, 81]

# 绘制的曲线属性设置
line1, = plt.plot(x, y, color='r', marker='d', linestyle='--', markersize=6, alpha=0.5, linewidth=3)
line2, = plt.plot(x, y2, color='g', marker='*', linestyle='-', markersize=6, alpha=0.5, linewidth=3)
# plt.plot(x, y, 'rd--')  # 可以使用这种方式进行画图的属性设置

# x,y坐标轴名称设置,可以同时设置标签的字体大小颜色等
plt.xlabel(u'x坐标轴', fontsize=14, color='r')
plt.ylabel(u'y坐标轴', fontsize=14, color='b')

# 显示曲线图像
plt.show()
plt.show()显示结果

2.图像属性设置

(1)坐标轴标签设置

# 注意,要使用中文的话,需要在引入库后,添加下列代码
plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号

# x,y坐标轴名称设置,可以同时设置标签的字体大小颜色等
plt.xlabel(u'x坐标轴', fontsize=14, color='r')
plt.ylabel(u'y坐标轴', fontsize=14, color='b')

(2)图像标题设置

# 设置图表标题
plt.title(u"图像标题", fontsize=14, color='k')

(3)图例设置

# 添加图例
plt.legend([line1, line2], ["Weekend", "Weekday"], loc='upper left')

(4)坐标轴范围设置

# 设置x轴的范围为[0, 100],y轴的范围为[0, 100], 或者通过xlim, ylim设置XY轴的范围上下限
plt.axis([0, 10, 0, 100])
# plt.xlim(0, 10)
# plt.ylim(0, 100)

(5)坐标间隔设定

plt.xticks(参数一,参数二,参数三) 用来实现对x轴和y轴坐标间隔(也就是轴记号)的设定。

  • 参数一:x或者y的参数
  • 参数二:新的标签,个数必须和参数一个数相同
  • 参数三:旋转角度
# 坐标间隔及标签设定
a = [1, 2, 3, 4, 5]
labels = ['A', 'B', 'C', 'D', 'E']
plt.xticks(a, labels, rotation=0)

(6)添加网格

# 添加网格
plt.grid(visible=True, axis='x')  # 只显示x轴网格线
plt.grid(visible=True, axis='y')  # 只显示y轴网格线
最终显示效果

全部代码

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号

x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y2 = [1, 4, 9, 16, 25, 36, 49, 64, 81]

# 绘制的曲线属性设置
line1, = plt.plot(x, y, color='r', marker='d', linestyle='--', markersize=6, alpha=0.5, linewidth=3)
line2, = plt.plot(x, y2, color='g', marker='*', linestyle='-', markersize=6, alpha=0.5, linewidth=3)
# plt.plot(x, y, 'rd--')  # 可以使用这种方式进行画图的属性设置

# x,y坐标轴名称设置,可以同时设置标签的字体大小颜色等
plt.xlabel(u'x坐标轴', fontsize=14, color='r')
plt.ylabel(u'y坐标轴', fontsize=14, color='b')

# 设置图表标题
plt.title(u"图像标题", fontsize=14, color='k')

# 添加图例
plt.legend([line1, line2], ["Weekend", "Weekday"], loc='upper left')

# 设置x轴的范围为[0, 100],y轴的范围为[0, 100], 或者通过xlim, ylim设置XY轴的范围上下限
plt.axis([0, 10, 0, 100])
# plt.xlim(0, 10)
# plt.ylim(0, 100)

# 坐标间隔及标签设定
a = [1, 2, 3, 4, 5]
labels = ['A', 'B', 'C', 'D', 'E']
plt.xticks(a, labels, rotation=0)

# 添加网格
plt.grid(visible=True, axis='x')  # 只显示x轴网格线
plt.grid(visible=True, axis='y')  # 只显示y轴网格线

# 显示曲线图像
plt.show()


3.一张图像上绘制多个图

  • 使用plt.figure(arg)创建画板,arg为画板名称
  • 使用plt.subplot(arg1, arg2, arg3)方法创建画纸,并选择当前画纸并绘图。其中,ag1代表第几行,arg2代表第几列,arg3代表第几个图像
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号

x = np.arange(0, 100, 10)

plt.figure(1)  # 生成第一个图,且当前要处理的图为fig.1

plt.subplot(1, 2, 1)  # fig.1是一个一行两列布局的图,且现在画的是左图
y1 = np.exp(x)
plt.plot(x, y1, color="r", linestyle="-", marker="^", linewidth=1)  # 画图
plt.xlabel("x")
plt.ylabel("y1")

plt.figure(1)  # 当前要处理的图为fig.1,而且当前图是fig.1的左图
plt.subplot(1, 2, 2)  # 当前图变为fig.1的右图
y2 = np.exp(1.5 * x)
plt.plot(x, y2, color="b", linestyle="-", marker="v", linewidth=1)
plt.xlabel("x")
plt.ylabel("y2")

plt.show()
多图显示

4.在一张图上绘制双坐标轴

主要通过fig.add_subplot()来添加坐标轴,然后把坐标轴绘制在同一张图上

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号

# 生成数据
x = np.arange(1, 12, 4)
y = np.arange(1, 4, 1)
x2 = x * 10
y2 = y ** 2

# 设置画布大小
width, height = 16, 14  # 单位为cm;因为保存图片时使用 bbox_inches = 'tight' 可能使图片尺寸略微放大,所以此处宽度设置得略小

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

# 绘制图像
lns = []  # 用于存储绘图句柄以合并图例的list

# 创建画布并设置大小
fig = plt.figure()
fig.set_size_inches(width / 2.54, height / 2.54)  # 因为画布输入大小为厘米,此处需转换为英寸,所以除以2.54

# 通过 add_subplot 方式创建两个坐标轴,相当于在同一个子图上叠加了两对坐标系
ax = fig.add_subplot(111, label="1")
ax2 = fig.add_subplot(111, label="2", frame_on=False)

# 绘制图1并将绘图句柄返回,以便添加合并图例
lns1 = ax.plot(x, y, color='r', label='r')
lns = lns1
lns2 = ax2.plot(x2, y2, color='b', label='b')
lns += lns2

# 调整第二对坐标轴的label和tick位置,以实现双X轴双Y轴效果
ax2.xaxis.tick_top()
ax2.yaxis.tick_right()
ax2.xaxis.set_label_position('top')
ax2.yaxis.set_label_position('right')

# 设置坐标轴标注
ax.set_xlabel("X1", color='r', fontsize=12)
ax.set_ylabel("Y1", color='r', fontsize=12)
ax2.set_xlabel('X2', color='b', fontsize=12)
ax2.set_ylabel('Y2', color='b', fontsize=12)

# 设置图表标题
fig.suptitle("Title", fontsize=12)

# 设置坐标轴刻度颜色
ax.tick_params(axis='x', colors='r')
ax.tick_params(axis='y', colors='r')
ax2.tick_params(axis='x', colors='b')
ax2.tick_params(axis='y', colors='b')

# 设置坐标轴线颜色
ax.spines["left"].set_color("r")  # 修改左侧颜色
ax.spines["right"].set_color("b")  # 修改右侧颜色
ax.spines["top"].set_color("b")  # 修改上边颜色
ax.spines["bottom"].set_color("r")  # 修改下边颜色

# 添加图例
labs = [l.get_label() for l in lns]
ax.legend(lns, labs, loc=0, fontsize=12)
plt.tight_layout()
plt.show()
### Matplotlib 空白画布解决方案 当遇到 `matplotlib` 中绘制图形时显示空白画布的情况,通常是因为缺少必要的绘图命令或配置不当。以下是几种常见原因及其对应的解决方案: #### 1. 缺少数据输入 如果调用了 `plt.plot()` 但是未传递任何数据,则不会有任何线条被绘制出来。 ```python import matplotlib.pyplot as plt # 错误示范:无数据传入 plt.figure() plt.plot() # 这里应该有x, y的数据参数 plt.show() # 正确做法:提供具体数值给plot函数 x_values = [0, 1, 2, 3, 4] y_values = [0, 2, 1, 3, 4] plt.figure() plt.plot(x_values, y_values) # 提供了具体的xy坐标点 plt.show() ``` #### 2. 显示窗口关闭过早 有时程序执行得太快,在展示图表之前就已经结束了运行,可以通过加入暂停来防止这种情况发生。 ```python import time import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) line, = ax.plot([1, 2, 3], label='Linear') ax.legend() plt.draw() time.sleep(5) # 让图像停留更长时间以便观察 plt.close(fig) ``` #### 3. 使用交互模式 开启交互模式可以使得每次绘图后自动刷新屏幕上的内容而不需要显式调用 `show()` 方法。 ```python import numpy as np import matplotlib.pyplot as plt plt.ion() # 开启interactive mode for i in range(10): y = np.random.rand(10) plt.clf() # 清除当前figure的内容 plt.plot(y) # 绘制新的曲线 plt.pause(0.5) # 延迟一段时间再继续下一次循环 plt.ioff() # 关闭interactive mode plt.show() # 展示最终的结果 ``` #### 4. 设置合适的轴范围 如果没有设置好横纵坐标的取值区间,默认情况下可能会因为超出可视区域而导致看不到所期望的图案。 ```python import matplotlib.pyplot as plt data_x = [-10, -9, ..., 8, 9, 10] data_y = list(map(lambda x : (x ** 2), data_x)) plt.figure(figsize=(7, 5)) plt.title('Quadratic Function') plt.xlabel('X Axis Label') plt.ylabel('Y Axis Label') plt.xlim(-15, 15) # 设定x轴可见范围 plt.ylim(min(data_y)-10,max(data_y)+10)# 设定y轴可见范围 plt.grid(True) # 添加网格线辅助查看位置关系 plt.plot(data_x, data_y,'r')# 'r'表示红色实线风格 plt.show() ``` 通过以上方法之一或多者组合应用,应当能够有效解决 `matplotlib` 图形界面为空白的问题[^1]。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AoDeLuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值