具有多个图和for循环的matplotlib动画

时间:2017-04-27 23:02:55

标签: python-3.x matplotlib

嘿我正在尝试使用matplotlib.animation在一个图中绘制n个图,就像下面的第一个代码块一样,但是当我运行脚本时,一切似乎都在运行,除了没有任何一个图表出现。

import matplotlib.pyplot as plt

# Data to be ploted
x = []
y = []
x2 = []
y2 = []
for i in range(-9,9):
    x.append(i)
    y.append(i**2)
    x2.append(i)
    y2.append(i**3)
# plot the data
plt.plot(x,y, label = 'first line')
# plot other data points
plt.plot(x2,y2, label = 'second line')
# add this before plt.show() to add labels to graph
plt.xlabel('X value')
plt.ylabel('Y value')
# add a title to graph
plt.title('interesting graph\nsubtitle')
plt.legend()
plt.show()

这是使用animate的代码:

import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib import style

# better face
style.use('fivethirtyeight')

fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)

def anima(i):
    graph_data = open('a.txt').read()
    lines = graph_data.split('\n')
    dataPoints = []
    for i in lines:
        # ignor empty lines

        if len(i) > 1:
            line = i.split('|') # delimiter is |

            for a in range(len(line)):
                try:
                    dataPoints[a].append(int(line[a]))
                # if there is no dataPoint[a] it gets created
                except:
                    dataPoints.append(int(line[a]))
    # modify axis
    ax1.clear()
    # plot
    for i in range(len(dataPoints)-1):
        ax1.plot(dataPoints[1],dataPoints[i+1])

#where to animate, what to animate, how often to update
ani = animation.FuncAnimation(fig, anima, interval = 1000)
plt.show()

在a.txt中我有这个:

1|56|80|62
2|123|135|55
12|41|12|23
60|12|45|23
12|43|56|54
25|123|23|31
2|213|31|84
61|1|68|54
62|2|87|31
63|4|31|53
64|8|13|13
65|16|51|65
66|32|43|84
80|62|42|15

更新: 我放弃了阅读文件,并且有一个线程函数为我生成值,而不是在一个图中包含所有内容我在子图中拥有所有内容(该编号即将被编辑)。当我用正常的情节运行代码时,它可以正常工作,但是当我尝试使用动画时......它会显示图形,但不再显示情节。我的问题是显示动画情节

# check if os is linux
import platform
if str(platform.system()).lower() == str('linux').lower():
    # must be set befor importing any other matplotlib
    import matplotlib
    matplotlib.use('TkAgg')

import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib import style
from threading import Thread

# Change style
style.use('fivethirtyeight')
fig = plt.figure()
#list with all datapoints eg: [timeList],[graph1List].... 
data_points = []
# 'name' of each graph in the list
graphs_ = [0]

def create_plots():
    xs = []
    ys = []
    for i in range(-10,11):
        x = i
        y = i**3

        xs.append(x)
        ys.append(y)
    data_points.append(xs)
    data_points.append(ys)

t = Thread(target=create_plots)
t.start()

def anima(i):
    for i in range(len(graphs_)):
        graphs_[i]=fig.add_subplot(211+i)
        graphs_[i].clear()
        graphs_[i].plot(0,i+1)

while len(data_points) == 0:
    print('.')


ani = animation.FuncAnimation(fig, anima, interval=1000)
plt.show()

1 个答案:

答案 0 :(得分:0)

1)您确定要调用anima(i)函数吗?

2)为什么要覆盖anima(i)中的变量i并再次排队?

    for i in lines:
        # ignor empty lines