g=sns.FacetGrid(unpaid,col="下单入口",hue="短信催款次数",sharex=True, sharey=True,col_wrap=2,palette="husl",height=6,aspect=1.5) #plt.suptitle("细分市场&4g流量&5g流量&label") plt.axhline.axvline(x=2, color='r', linestyle='--') plt.axhline.axvline(x=9, color='r', linestyle='--') plt.axhline.axvline(x=16, color='r', linestyle='--') g.map(plt.scatter,"逾期",'需付金额',alpha=0.7,s=30) #plt.xticks(rotation=90) g.add_legend() 'function' object has no attribute 'axvline'
时间: 2024-01-06 21:04:29 浏览: 42
这个错误提示是因为 `axvline` 是 `matplotlib.pyplot` 中的函数,而不是 `sns.FacetGrid` 对象的方法。你需要将 `axvline` 改为 `plt.axvline`,将 `axhline` 改为 `plt.axhline`,即可解决这个错误。修改后的代码如下:
```python
import matplotlib.pyplot as plt
import seaborn as sns
g = sns.FacetGrid(unpaid, col="下单入口", hue="短信催款次数", sharex=True, sharey=True, col_wrap=2, palette="husl", height=6, aspect=1.5)
plt.axhline(y=2, color='r', linestyle='--')
plt.axhline(y=9, color='r', linestyle='--')
plt.axhline(y=16, color='r', linestyle='--')
plt.axvline(x=2, color='r', linestyle='--')
plt.axvline(x=9, color='r', linestyle='--')
plt.axvline(x=16, color='r', linestyle='--')
g.map(plt.scatter, "逾期", '需付金额', alpha=0.7, s=30)
g.add_legend()
```
相关问题
g = sns.FacetGrid(unpaid, col="下单入口", hue="短信催款次数", sharex=True, sharey=True, col_wrap=2, palette="husl", height=6, aspect=1.5)有两列图,如何把plt.axvline(x=2, color='r', linestyle='--')放进两列图里
你可以使用 FacetGrid 对象的 `map()` 方法来对每个子图进行绘制。因此,你可以将 `plt.axvline()` 包装成一个函数,然后使用 `map()` 方法将这个函数映射到 FacetGrid 对象的每个子图上。
具体实现方法如下:
```python
import matplotlib.pyplot as plt
import seaborn as sns
# 定义绘制垂直线的函数
def draw_vline(x, color='r', linestyle='--'):
plt.axvline(x=x, color=color, linestyle=linestyle)
g = sns.FacetGrid(unpaid, col="下单入口", hue="短信催款次数", sharex=True, sharey=True, col_wrap=2, palette="husl", height=6, aspect=1.5)
g.map(plt.scatter, "逾期", '需付金额', alpha=0.7, s=30)
# 对每个子图绘制垂直线
g.map(draw_vline, "下单入口", x=2, color='r', linestyle='--')
g.map(draw_vline, "下单入口", x=9, color='r', linestyle='--')
g.map(draw_vline, "下单入口", x=16, color='r', linestyle='--')
g.add_legend()
```
在这个例子中,我们定义了一个名为 `draw_vline()` 的函数,用于在子图中绘制垂直线。然后,我们使用 `map()` 方法将这个函数映射到 FacetGrid 对象的每个子图上,同时传入需要绘制垂直线的位置 `x` 和其他参数。最后,我们调用 `add_legend()` 方法添加图例。
g=sns.FacetGrid(unpaid,col="下单入口",hue="短信催款次数",sharex=True, sharey=True,col_wrap=2,palette="husl",height=6,aspect=1.5) plt.axvline(x=2, color='r', linestyle='--') plt.axvline(x=9, color='r', linestyle='--') plt.axvline(x=16, color='r', linestyle='--') g.map(plt.scatter,"逾期",'需付金额',alpha=0.7,s=30) g.add_legend()把第一张图也加上线
你可以在 `map()` 方法之前,先绘制第一张子图的垂直线。具体实现方法如下:
```python
import matplotlib.pyplot as plt
import seaborn as sns
g = sns.FacetGrid(unpaid, col="下单入口", hue="短信催款次数", sharex=True, sharey=True, col_wrap=2, palette="husl", height=6, aspect=1.5)
# 绘制第一张子图的垂直线
plt.axvline(x=2, color='r', linestyle='--')
g.map(plt.scatter, "逾期", '需付金额', alpha=0.7, s=30)
# 对其他子图绘制垂直线
g.map(sns.lineplot, "逾期", '需付金额', alpha=0.7, s=30)
g.map(lambda **kwargs: plt.axvline(x=9, color='r', linestyle='--'), "下单入口")
g.map(lambda **kwargs: plt.axvline(x=16, color='r', linestyle='--'), "下单入口")
g.add_legend()
```
在这个例子中,我们先使用 `plt.axvline()` 函数绘制了第一张子图的垂直线。然后,在 `map()` 方法中使用 `sns.lineplot()` 函数绘制了其他子图的散点图,并使用 lambda 函数在指定的列中绘制垂直线。最后,我们调用 `add_legend()` 方法添加图例。