Python 在matplotlib中创建静态(不是每次缩放或移动时都重新绘制)打印
一般来说,我对python比较陌生,但我发现它非常有用,而且比其他编程语言直观得多 我目前正试图绘制一个包含大量数据点的光谱图,似乎每次我移动,放大我们的图像,matplotlib都会重新绘制该图,这需要一些时间(每次移动5到20秒) 这使得扫描光谱变得相当乏味,我在想,如果我能找到一种方法,一次性地创建一个图形,然后只显示其中的一部分,在静态图形中移动,而不重新绘制,这将节省我大量的空闲时间 我的问题是:在matplotlib中有没有一种(相当简单的)方法可以做到这一点,还是应该开始研究其他绘图软件? 我已经查阅了文档,但老实说,大部分内容我都不懂 谢谢你的意见 干杯 如果有人想知道,以下是我的代码:Python 在matplotlib中创建静态(不是每次缩放或移动时都重新绘制)打印,python,matplotlib,plot,Python,Matplotlib,Plot,一般来说,我对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,在看了链接之后,似乎这也是一个互动的图形,这对我没有多大帮助。但是谢谢你的投入。