plt.subplots一个图上多条折线怎么画
时间: 2023-07-23 22:44:11 浏览: 90
使用plt.subplots可以方便地在一个图上绘制多个子图,每个子图可以绘制一条或多条折线。下面的代码演示如何在一个图上绘制两条折线:
```
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y1 = [1, 4, 9, 16]
y2 = [2, 5, 10, 17]
fig, ax = plt.subplots()
ax.plot(x, y1)
ax.plot(x, y2)
plt.show()
```
这段代码中,plt.subplots()会返回一个包含fig和ax两个对象的元组,其中fig表示整个图像,ax表示子图。调用ax.plot函数可以在子图中绘制折线,从而在同一个图中绘制多条折线。需要注意的是,在绘制多个子图时,可以通过plt.subplots()的参数来指定子图的行列数和位置。例如,plt.subplots(2,2)可以返回一个包含4个子图的2x2网格,plt.subplots(2,3)可以返回一个包含6个子图的2x3网格。
相关问题
def plot_rate( rate_his, rolling_intv = 50, ylabel='标准化计算速率',ax=None): import matplotlib.pyplot as plt import pandas as pd import matplotlib as mpl rate_array = np.asarray(rate_his) # 将一个 Python 列表 rate_his 转换为 NumPy 数组 rate_array df = pd.DataFrame(rate_his) # 创建了一个名为df的Pandas DataFrame对象,将rata_his数据进行索引拆分过滤排序 if ax is None: fig, ax = plt.subplots(figsize=(15, 8)) mpl.style.use('seaborn') #设置matplotlib 库的绘图风格为 seaborn 风格 fig, ax = plt.subplots(figsize=(15,8))# 使用 Matplotlib 库创建一个带有指定大小的子图对象,宽为15,高为8 plt.plot(np.arange(len(rate_array))+1, np.hstack(df.rolling(rolling_intv, min_periods=1).mean().values), 'b') #使用plt.plot函数将生成的x轴和y轴坐标绘制成折线图,并且'b' 表示蓝色的线条。 plt.fill_between(np.arange(len(rate_array))+1, np.hstack(df.rolling(rolling_intv, min_periods=1).min()[0].values), np.hstack(df.rolling(rolling_intv, min_periods=1).max()[0].values), color = 'b', alpha = 0.2) #将这两个曲线之间的区域填充成颜色为蓝色、透明度为0.2的矩形 plt.ylabel(ylabel)# 设置纵轴标签 plt.xlabel('Time Frames')#设置横轴标签 plt.show(), plot_rate(Q.sum(axis=1)/N, 100, 'Average Data Queue') plot_rate(energy.sum(axis=1)/N, 100, 'Average Energy Consumption'),将多个函数绘制于横坐标相同的同一张图
可以通过将多个函数的数据合并成一个 NumPy 数组,然后在同一个子图对象上使用 plt.plot() 函数来绘制多条线路。下面是一个示例代码,其中包括两个函数 plot_rate() 的调用,用于在同一张图上绘制两条线路:
``` python
import numpy as np
import matplotlib.pyplot as plt
def plot_rate(rate_his, rolling_intv=50, ylabel='标准化计算速率', ax=None):
import pandas as pd
import matplotlib as mpl
rate_array = np.asarray(rate_his)
df = pd.DataFrame(rate_his)
if ax is None:
fig, ax = plt.subplots(figsize=(15, 8))
mpl.style.use('seaborn')
ax.plot(np.arange(len(rate_array))+1, np.hstack(df.rolling(rolling_intv, min_periods=1).mean().values), 'b')
ax.fill_between(np.arange(len(rate_array))+1, np.hstack(df.rolling(rolling_intv, min_periods=1).min()[0].values), np.hstack(df.rolling(rolling_intv, min_periods=1).max()[0].values), color='b', alpha=0.2)
ax.set_ylabel(ylabel)
ax.set_xlabel('Time Frames')
# Generate some sample data
N = 1000
Q = np.random.normal(0.0, 1.0, (N, 10))
energy = np.random.normal(10.0, 1.0, (N, 10))
# Create a figure with two subplots
fig, (ax1, ax2) = plt.subplots(nrows=2, ncols=1, figsize=(15, 10))
# Plot the data queue rate on the first subplot
plot_rate(Q.sum(axis=1)/N, 100, 'Average Data Queue', ax=ax1)
# Plot the energy consumption rate on the second subplot
plot_rate(energy.sum(axis=1)/N, 100, 'Average Energy Consumption', ax=ax2)
# Show the plot
plt.show()
```
这段代码将生成两个包含随机数据的 NumPy 数组 Q 和 energy。我们使用这些数组中的数据来调用 plot_rate() 函数,将数据队列速率和能量消耗速率绘制在同一张图上的两个子图中。在这个示例中,我们使用了 plt.subplots() 函数来创建一个包含两个子图的图形,然后在每个子图上调用 plot_rate() 函数来绘制数据。
MatplotlibDeprecationWarning: Support for FigureCanvases without a required_interactive_framework attribute was deprecated in Matplotlib 3.6 and will be removed two minor releases later. fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(4, 4), dpi=300)
这个警告信息是由于 Matplotlib 3.6 开始,要求 FigureCanvas 对象必须有一个 `required_interactive_framework` 属性。如果 FigureCanvas 没有这个属性,就会出现这个警告信息。
解决这个警告信息的方法是为 FigureCanvas 添加 `required_interactive_framework` 属性。例如,如果您正在使用 Qt5Agg 后端,可以按照以下方式调整代码:
```python
import matplotlib.pyplot as plt
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
# 创建 Figure 对象和 FigureCanvas 对象
fig = plt.Figure(figsize=(4, 4), dpi=300)
canvas = FigureCanvas(fig)
# 添加 required_interactive_framework 属性
canvas.required_interactive_framework = 'qt5'
# 在 Figure 对象上绘制图形
ax = fig.add_subplot(111)
ax.plot([1, 2, 3], [4, 5, 6])
# 显示图形
canvas.draw()
```
在这个示例中,我们从 `matplotlib.backends` 中导入了 `FigureCanvasQTAgg` 类,它是一个使用 Qt5 后端的 FigureCanvas 类。然后,我们创建 Figure 对象和 FigureCanvas 对象,并将 `required_interactive_framework` 属性设置为 `'qt5'`。最后,我们在 Figure 对象上绘制了一条简单的折线,并在 Canvas 上绘制了图形。
请注意,您需要根据您使用的后端来设置 `required_interactive_framework` 属性。如果您使用的是其他后端,请查看 Matplotlib 文档以获取更多详细信息。
阅读全文