我有一个正态分布曲线和两个在2个不同y值处的直线,我只需要填充这三个之间的区域。我一直在看fill_between和多边形,但都不能为我工作。
#Probability plot
final_prices.sort()
price_mean = np.mean(final_prices)
price_standard = np.std(final_prices)
normalized_df = stats.norm.pdf(final_prices, price_mean, price_standard)
ax2.tick_params(direction='in', length=6, width=2, colors=color_tick, right=True, labelright='on')
ax2.plot(normalized_df, final_prices, color=color_line)
ax2.set_xlim([min(normalized_df), max(normalized_df)])
ax2.set_ylim([min(final_prices), max(final_prices)])
ax2.invert_xaxis()
#mean line
probability_frame = pd.DataFrame(final_prices, normalized_df)
mean_price = probability_frame.loc[max(normalized_df), :].iloc[0]
# ax2.axhline(y = mean_value, color=color_midline, linestyle='--')
#standard deviation lines
sigma = statistics.pstdev(final_prices)
sigma_up_one = mean_price + sigma
sigma_down_one = mean_price - sigma
ax2.axhline(y=(sigma_up_one), color=color_sigma, linestyle='-')
ax2.axhline(y=(sigma_down_one), color=color_sigma, linestyle='-')
ax2.axhline(y=(sigma_up_one + sigma), color=color_sigma2, linestyle='-')
ax2.axhline(y=(sigma_down_one - sigma), color=color_sigma2, linestyle='-')
ax2.set_xlabel('Probability')
ax2.set_ylabel('Price')
ax2.set_title('Price Probability Distribution ' + ticker, color=color_label)
ax2.xaxis.label.set_color(color_label)
ax2.yaxis.label.set_color(color_label)
plt.tight_layout()
plt.show()
这是我当前的输出。
我需要填充最里面的线之间的区域,这些区域代表与平均值的第一标准偏差,但仅直到曲线线为止。预先谢谢你。
plt.fill_betweenx
可用于填充x = 0和高斯曲线之间的区域。 where=
参数可以将填充限制为标准偏差所定义的y值之间的区域。
import matplotlib.pyplot as plt
import numpy as np
from scipy import stats
price_mean = 216
price_standard = 19
final_prices = np.linspace(price_mean - 4*price_standard, price_mean + 4*price_standard, 200)
norm_prices = stats.norm.pdf(final_prices, price_mean, price_standard)
plt.plot(norm_prices, final_prices, color='crimson')
plt.axhline(price_mean - price_standard)
plt.axhline(price_mean + price_standard)
plt.fill_betweenx(final_prices, 0, norm_prices,
where=(final_prices >= price_mean - price_standard) & (final_prices <= price_mean + price_standard),
color='green', alpha=0.3)
plt.gca().invert_xaxis()
plt.xlim(xmax=0)
plt.show()