在海边拍摄两块地块时,我会遇到奇怪的行为。条形图似乎工作正常,但regplot似乎是一个关闭。注意缺少x = 1的reg数据点,并将x = 2值与下表x中的值进行比较,它明显偏离一个。
我的pandas Dataframe看起来像这样:
Threshold per Day # Alarms Percent Reduction
0 1 791 96.72
1 2 539 93.90
2 3 439 91.94
3 4 361 89.82
4 5 317 88.26
5 6 263 85.94
6 7 233 84.41
7 8 205 82.78
8 9 196 82.17
9 10 176 80.66
我在这里使用的代码是:
%matplotlib inline
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax2 = ax.twinx()
sns.barplot(x='Threshold per Day', y="# Alarms", data=results_df, ax=ax, color='lightblue')
sns.regplot(x='Threshold per Day', y='Percent Reduction', data=results_df, marker='x', fit_reg=False, ax=ax2)
有什么想法或者如何修复它?
答案 0 :(得分:2)
警告:这只解决了可能的解决方法,我不知道matplotlib
中发生的为什么(但请参阅编辑和评论)
如果您在此期间想要获得一个不错的情节,我建议只切换到纯fig, ax = plt.subplots(1,1, sharex=True)
ax2 = ax.twinx()
ax.bar(results_df['Threshold per Day'], results_df['# Alarms'], color='lightblue')
ax2.scatter(results_df['Threshold per Day'], results_df['Percent Reduction'], marker='x')
ax.set_ylabel('# of Alarms')
ax2.set_ylabel('Percent Reduction')
ax.set_xlabel('Threshold Per Day')
plt.xticks(range(1,11))
plt.show()
,至少只是为了这个情节以及其他具有类似奇怪行为的情节。您可以使用以下代码获得非常相似的情节:
fig, ax = plt.subplots()
ax2 = ax.twinx()
sns.barplot(x=results_df['Threshold per Day'],
y=results_df["# Alarms"], ax=ax, color='lightblue')
sns.regplot(x=np.arange(0,len(results_df)),
y=results_df['Percent Reduction'], marker='x',
fit_reg=False, ax=ax2)
plt.show()
修改以考虑ImportanceOfBeingErnest的评论:
您可以使用以下方式在seaborn中获取此情节:
matplotlib
事实证明,在seaborn
中,barplot的类别似乎在可能的情况下被解释为数字,而在regplot
中,它被解释为字符串,并且位置从默认位置为0;当您的mongo --help
在x轴上均匀分布时,您可以将其位置强制为0到数据帧长度的范围,如上所述。