#python #numpy #matplotlib #plot
#питон #numpy #matplotlib #сюжет
Вопрос:
У меня есть данные, сохраненные с помощью функции savetxt от numpy, и я извлекаю их для построения графика. Когда я его строю, скрипт выполняется без ошибок, но не показывает кривые — только пустые окна. Это странно, потому что:
- Тот же сценарий создает точный график, когда я импортирую данные .txt из другого файла (также сохраненные с помощью savetxt).
- Если я создаю точки данных внутри скрипта, например, с помощью arange, он строит график.
- Данные .txt загружаются — я распечатал их на экране.
- Я проверил свой бэкэнд, и это TkAgg, который, по мнению интернета, должен быть.
Мой код таков
# this script makes the plots of the eigenvalue distributions for the AAS 17-225 paper
# import python modules
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
# set plot options
mpl.rcParams['xtick.major.size'] = 7
mpl.rcParams['xtick.major.width'] = 3.0
mpl.rcParams['ytick.major.size'] = 7
mpl.rcParams['ytick.major.width'] = 3.0
mpl.rcParams['axes.linewidth'] = 3.5
plt.rc('text',usetex=True)
mpl.rcParams['text.latex.preamble']=[r"usepackage{amsmath}"]
plt.rc('font',family='serif')
plt.rc('axes',labelsize=24)
plt.rc('xtick',labelsize=24)
plt.rc('ytick',labelsize=24)
plt.rc('font',weight='bold')
plt.rc('axes',titlesize=20)
# plot method arguments
lw = 2 # linewidth
left_adj = 0.055 # left adjustment
right_adj = 0.985 # left adjustment
top_adj = 0.975 # left adjustment
bottom_adj = 0.075 # left adjustment
wspace = 0.205 # horizontal space between plots
hspace = 0.2 # verticle space between plots
n_suplot_rows = 2 # number of subplot rows
n_suplot_columns = 3 # number of subplot columns
# load data
dataDir ='/mnt/E0BA55A7BA557B4C/research/independent/recursivequats/paperCode/'
df1 = dataDir 'lamda_0p1_0p1.txt'
df2 = dataDir 'lamda_0.1_0.5.txt'
df3 = dataDir 'lamda_0.1_1.0.txt'
df4 = dataDir 'lamda_0.5_0.5.txt'
df5 = dataDir 'lamda_0.5_1.0.txt'
df6 = dataDir 'lamda_1.0_1.0.txt'
profile1 = np.loadtxt(df1)
profile2 = np.loadtxt(df2)
profile3 = np.loadtxt(df3)
profile4 = np.loadtxt(df4)
profile5 = np.loadtxt(df5)
profile6 = np.loadtxt(df6)
fig = plt.figure()
ax1 = fig.add_subplot(n_suplot_rows,n_suplot_columns,1)
p1, = ax1.plot(profile1[:,1],profile1[:,0],linewidth=lw)
ax2 = fig.add_subplot(n_suplot_rows,n_suplot_columns,2)
p1, = ax2.plot(profile2[:,1],profile2[:,0],linewidth=lw)
ax3 = fig.add_subplot(n_suplot_rows,n_suplot_columns,3)
p1, = ax3.plot(profile3[:,1],profile3[:,0],linewidth=lw)
ax4 = fig.add_subplot(n_suplot_rows,n_suplot_columns,4)
p1, = ax4.plot(profile4[:,1],profile4[:,0],linewidth=lw)
ax5 = fig.add_subplot(n_suplot_rows,n_suplot_columns,5)
p1, = ax5.plot(profile5[:,1],profile5[:,0],linewidth=lw)
ax6 = fig.add_subplot(n_suplot_rows,n_suplot_columns,6)
p1, = ax5.plot(profile6[:,1],profile6[:,0],linewidth=lw)
plt.subplots_adjust(left=left_adj,right=right_adj,top=top_adj,bottom=bottom_adj,wspace=wspace,hspace=hspace)
plt.show()
Комментарии:
1. Распечатайте данные, которые вы пытаетесь отобразить, чтобы убедиться, что данные были прочитаны правильно.
2. данные состоят из матриц 3333 x 2, поэтому такой подход неосуществим. Однако я построил данные аналогичного размера без каких-либо проблем.
3. Вам не нужно печатать все данные. Взгляните, скажем, на первые три и последние три точки, которые вы пытаетесь отобразить. Также проверьте
profile1.shape
,profile1.dtype
,profile1.max()
,profile1.min()
.4. ОК. В этом случае, да, я провел эти простые тесты, и все выглядит нормально. Я также создал некоторые данные «вручную», сохранил их в каталоге как .txt и без проблем построил их
5. Что такое, скажем,
profile1.shape
иprofile1.dtype
?
Ответ №1:
что ж, еще немного покопавшись, и проблема была выявлена. Сценарий строится, но масштабирование графиков настолько низкое, что они скрыты толстыми линиями на границе. Итак, проблема заключалась в ошибке пользователя.
Вот почему инженеры не должны пытаться быть художниками…