我有一个代表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)
结果:
其他的一切都一样。怎么一回事?
发布于 2021-12-26 16:45:32
如果您的目标是将分布曲线下的区域着色,我建议使用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})
发布于 2021-12-26 16:24:14
很难用手头的信息来说明,但我相信您的bar()的高度参数可能没有正确配置。高度应配置为每个分布的最大点。
https://stackoverflow.com/questions/70487869
复制相似问题