如何用两个子图Matplotlib,Python 3绘制动态更新的图形?

时间:2018-11-28 13:51:34

标签: python-3.x matplotlib subplot

我有一个pandas.DataFrame df

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

f = [0, 10, 20, 30]
col1 = [1+1j, 2-2j, 3+3j, 4-4j]
col2 = [5+0j, 0+6j, 1-2j, 2-1j]
col1 = np.array(col1, dtype=complex)
col2 = np.array(col2, dtype=complex)
df = pd.DataFrame({'f': f, 'col1': col1, 'col2': col2}).set_index('f')

我想以子图样式绘制它们:

  • 顶部子图表示'col1''col2'的绝对值
  • 底部子图用于'col1''col2'的相角
  • 两个子图共享相同的x轴。

在每个子图中,有两行,一条用于'col1',另一条用于'col2'。我一次没有整个df,而是一次只有一行。

for iter in range(4):
    df_one_row = df.iloc[iter]  # this line is made just to mimic my real application where I receive the data row by row.
    x = df.index[iter]
    y1 = df_one_row['col1']
    y2 = df_one_row['col2']

    # update the top subplot for absolute values of two lines
    update_top_subplot(x, np.abs(y1), np.abs(y2))
    # update the bottom subplot for phase angle values of two lines.
    update_bottom_subplot(x, np.angle(y1), np.angle(y2))

我尝试搜索一些解决方案,但找不到。我找到的最接近的链接是此链接Dynamically updating plot in matplotlib。那里接受的答案显示了一种更新单个图形的方法。顺便说一句,我发现必须在该答案的plt.pause(0.1)之后加上plt.draw()才能真正显示该数字。

能否请您告诉我如何实现我的身材?谢谢。

0 个答案:

没有答案