Matplotlib не может своевременно создать график с ошибками, несмотря на то, что MWE может это сделать - PullRequest
0 голосов
/ 14 февраля 2019

Я написал код, который показывает, что для построения графика панели ошибок с помощью пакета matplotlib требуется целая вечность.Однако, когда я на самом деле превращаю это в MWE, где я вычислял x, y, xerr и yerr и вручную вставляю их в строку панели ошибок, код работает гладко.Эти значения являются точными значениями, взятыми из исходного кода.Я не знаю, почему оригинальный код не создает графики, в то время как следующий MWE фактически производит это.Вот пример, который работает:

import numpy as np
import matplotlib.pyplot as plt
from numpy import *
from matplotlib.ticker import MaxNLocator

my_x=np.array([20.05, 20.15, 20.25, 20.35, 20.45, 20.55, 20.65, 20.75, 20.85, 20.95, 21.05, 21.15, 21.25, 21.35, 21.45, 21.55, 21.65, 21.75, 21.85, 21.95, 22.1,  22.3])
my_x_err_lolim, my_x_err_uplim=np.array([0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.1,  0.1]), np.array([0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.1,  0.1])
my_y=np.array([0.6372361,  0.74868714, 0.71499067, 0.73164494, 0.66726811, 0.58116623, 0.50617463, 0.42101772, 0.34221605, 0.29805772, 0.21592373, 0.17151431, 0.14598236, 0.09210864, 0.06828108, 0.05423759, 0.04408597, 0.02110087, 0.01564229, 0.00350187, 0.00175509, 0.00175509])
my_y_err_lolim, my_y_err_uplim=np.array([0.23176874, 0.27230452, 0.2600488, 0.26610612, 0.24269166, 0.2113756, 0.18593597, 0.1546548, 0.12570814, 0.10948721, 0.08039986, 0.06386388, 0.05528444, 0.0355843, 0.02698123, 0.02197097, 0.01785867, 0.00958897, 0.00859537, 0.00445642, 0.0022335, 0.0022335]), np.array([0.23176874, 0.27230452, 0.2600488, 0.26610612, 0.24269166, 0.2113756, 0.18593597, 0.1546548, 0.12570814, 0.10948721, 0.08039986, 0.06386388, 0.05528444, 0.0355843, 0.02698123, 0.02197097, 0.01785867, 0.00958897, 0.00859537, 0.00445642, 0.0022335, 0.0022335])


pdf_HI, (ax1) = plt.subplots(1, 1, sharex=True, sharey=False, figsize=(14,20))

ax1.errorbar(my_x, my_y, xerr = array([my_x_err_lolim, my_x_err_uplim]), yerr = array([my_y_err_lolim, my_y_err_uplim]), ecolor = 'blue', fmt= 'b.', elinewidth = 1, capsize = 2, linestyle = '', label='')
ax1.vlines(20.3, ymin=-0.1, ymax=3, colors='blue', linestyles='dotted', linewidths=2, label='DLA Column Density')
ax1.hlines(1, xmin=0, xmax=22.3, colors='black', linestyles='dotted', linewidths=2, label='')
ax1.hlines(0, xmin=0, xmax=22.3, colors='black', linestyles='dotted', linewidths=2, label='')

ax1.legend(loc='upper right', ncol=6, fontsize=15)
ax1.set_xlim([19, 23])
ax1.set_ylim([-0.1, 1.1])
ax1.yaxis.set_major_locator(MaxNLocator(prune='upper')) 
ax1.set_ylabel('$Y$', fontsize=22)
ax1.set_xlabel('X$', fontsize=22)
ax1.set_xscale("linear", nonposx='clip')
ax1.set_yscale("linear", nonposy='clip')
ax1.xaxis.set_tick_params(width=2)
ax1.yaxis.set_tick_params(width=2)
ax1.get_xaxis().tick_bottom()  
ax1.get_yaxis().tick_left()



pdf_HI.subplots_adjust(top=0.996,bottom=0.101,left=0.076,right=0.997)
plt.setp([a.get_xticklabels() for a in pdf_HI.axes[:-1]], visible=True)
pdf_HI.tight_layout()
plt.show()

Я распечатал все x, y, xerr и yerr, чтобы убедиться, что все они находятся в одном и том же последовательном шаблоне.Итак, что же такого особенного в MWE, что заставляет его работать?

...