Seaborn在一个无花果上的两个图:x值是一个关闭

时间:2018-03-09 01:50:21

标签: python pandas seaborn

在海边拍摄两块地块时,我会遇到奇怪的行为。条形图似乎工作正常,但regplot似乎是一个关闭。注意缺少x = 1的reg数据点,并将x = 2值与下表x中的值进行比较,它明显偏离一个。

enter image description here

我的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)

有什么想法或者如何修复它?

1 个答案:

答案 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()

enter image description here

修改以考虑ImportanceOfBeingErnest的评论:

您可以使用以下方式在seaborn中获取此情节:

matplotlib

事实证明,在seaborn中,barplot的类别似乎在可能的情况下被解释为数字,而在regplot中,它被解释为字符串,并且位置从默认位置为0;当您的mongo --help在x轴上均匀分布时,您可以将其位置强制为0到数据帧长度的范围,如上所述。