我有一個代表 8 個分布的值串列。
當我運行此代碼時:
for pidx in range(len(names)):
name = names[pidx]
ber = stm_df.loc[x, name].tolist()
mx_ber = max([mx_ber] ber)
mn_ber = min([mn_ber] ber)
ber[0] = 0
sr = pd.Series(ber,x)
sr = sr[sr > 0]
rect = axes[1].plot(sr.index, sr.values)
它看起來應該是:

但是,當我從“.plot”更改為“.bar”時,它們看起來都是截斷代碼:
for pidx in range(len(names)):
name = names[pidx]
ber = stm_df.loc[x, name].tolist()
mx_ber = max([mx_ber] ber)
mn_ber = min([mn_ber] ber)
ber[0] = 0
sr = pd.Series(ber,x)
sr = sr[sr > 0]
rect = axes[1].bar(sr.index, sr.values)
結果:

其他一切都是一樣的。到底是怎么回事?
uj5u.com熱心網友回復:
手頭的資訊很難說,但我相信你的 bar() 的高度引數可能沒有正確配置。高度應配置為每個分布的最大點。
uj5u.com熱心網友回復:
如果您的目標是為分布曲線下的區域著色,我建議使用 plt.fill_between 如下。
# Color area under curve
from matplotlib import pyplot as plt
import numpy as np
# Get x values of the curve (a sine wave in this case)
time = np.arange(0, 10, 0.1);
# Amplitude of the sine wave across time
amplitude = np.sin(time)
# Plot a curve with time and amplitude
plt.plot(time, amplitude, color='black')
# title
plt.title('Sine wave')
# x axis label
plt.xlabel('Time')
# y axis label
plt.ylabel('Amplitude')
# add midline
plt.axhline(y=0, color='k')¨
# fill area between midline across time and amplitude
plt.fill_between(time, amplitude, color='cyan')
plt.show()

在您的示例中,這意味著只需添加 plt.fill_between(sr.index, sr.values, color=f'C{pidx})。
for pidx in range(len(names)):
name = names[pidx]
ber = stm_df.loc[x, name].tolist()
mx_ber = max([mx_ber] ber)
mn_ber = min([mn_ber] ber)
ber[0] = 0
sr = pd.Series(ber,x)
sr = sr[sr > 0]
rect = axes[1].plot(sr.index, sr.values)
plt.fill_between(sr.index, sr.values, color=f'C{pidx})
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/394384.html
標籤:Python matplotlib 图形
下一篇:如何創建適合高斯分布的3D資料集
