Python 在matplotlib中创建静态(不是每次缩放或移动时都重新绘制)打印

Python 在matplotlib中创建静态(不是每次缩放或移动时都重新绘制)打印,python,matplotlib,plot,Python,Matplotlib,Plot,一般来说,我对python比较陌生,但我发现它非常有用,而且比其他编程语言直观得多 我目前正试图绘制一个包含大量数据点的光谱图,似乎每次我移动,放大我们的图像,matplotlib都会重新绘制该图,这需要一些时间(每次移动5到20秒) 这使得扫描光谱变得相当乏味,我在想,如果我能找到一种方法,一次性地创建一个图形,然后只显示其中的一部分,在静态图形中移动,而不重新绘制,这将节省我大量的空闲时间 我的问题是:在matplotlib中有没有一种(相当简单的)方法可以做到这一点,还是应该开始研究其他绘

一般来说,我对python比较陌生,但我发现它非常有用,而且比其他编程语言直观得多

我目前正试图绘制一个包含大量数据点的光谱图,似乎每次我移动,放大我们的图像,matplotlib都会重新绘制该图,这需要一些时间(每次移动5到20秒)

这使得扫描光谱变得相当乏味,我在想,如果我能找到一种方法,一次性地创建一个图形,然后只显示其中的一部分,在静态图形中移动,而不重新绘制,这将节省我大量的空闲时间

我的问题是:在matplotlib中有没有一种(相当简单的)方法可以做到这一点,还是应该开始研究其他绘图软件? 我已经查阅了文档,但老实说,大部分内容我都不懂

谢谢你的意见

干杯

如果有人想知道,以下是我的代码:

import numpy as np
import matplotlib.pyplot as plt


def show_shifted_lines(z, nb_lines, color='red'):
    # Draws a vertical line with its name at the location 
    # of the line (shifted by (1+z) )

    # Writes the name of the line
    for i in range(nb_lines):
        plt.text(rest_wl[i]*(1.+z), 200., line_name[i], color=color, rotation=50, rotation_mode='anchor')
        # Writes the vertical line
        for j in range(20):
            plt.text(rest_wl[i]*(1.+z), 190-8*j, '|', color=color)
    return 

f = open('spectrum.dat', 'r')

## Plot Spectrum ##
wavelength = []
flux = []
for line in f :
    line = line.strip()
    columns = line.split()
    wavelength.append(float(columns[0]))
    flux.append(float(columns[1]))
flux = np.asarray(flux, dtype=float)
wavelength = np.asarray(wavelength, dtype=float)
plt.plot(wavelength, flux, color='black')
plt.xlabel(r'Wavelength (A)')
plt.ylabel(r'Flux (erg s$^{-1}$ cm$^{-2}$ A$^{-1}$)')
plt.grid(True)
f.close()


## Show location of redshifted lines ##    
f = open('list_of_restframe_lines.txt','r')
line_name  = []
rest_wl    = []
# Redshifts of various absorption-line systems 
z1  = 3.04976
z2  = 2.27831
z3  = 1.80335
z4  = 2.218
z5  = 2.2155
z6  = 2.2164
z7  = 2.8913

# Create array for not-shifted lines
for line in f :
    line = line.strip()
    columns = line.split()
    line_name.append(columns[0])
    rest_wl.append(float(columns[1]))
rest_wl = np.asarray(rest_wl, dtype=float)  
f.close()

show_shifted_lines(z1, len(rest_wl))
show_shifted_lines(z2, len(rest_wl), 'magenta')
show_shifted_lines(z3, len(rest_wl), 'lightgreen')
show_shifted_lines(z4, len(rest_wl), 'green')
show_shifted_lines(z5, len(rest_wl), 'darkorange')
show_shifted_lines(z6, len(rest_wl), 'orange')
show_shifted_lines(z7, len(rest_wl), 'blue')

plt.show()

最终,我的光谱看起来是这样的:

我不认为这个链接与你的要求有任何关系。这是关于为
matplotlib
文档制作图表的问题。我不知道你的问题,但我想指出的是,numpy有一个很好的导入csv的功能,名为genfromtxt()。你看过这个功能了吗?它创造了一个。哦,谢谢汤姆,这可能就是为什么它对我来说毫无意义。阿希姆,我想你的建议是更快地读取我的输入文件?谢谢你,我会记下来的,但事实上,这对我的问题没有帮助。Schorsch,在看了链接之后,似乎这也是一个互动的图形,这对我没有多大帮助。但是谢谢你的投入。