提问人:Mario 提问时间:11/4/2023 最后编辑:Goku - stands with PalestineMario 更新时间:11/4/2023 访问量:227
AttributeError:“GrouperView”对象没有属性“join”
AttributeError: 'GrouperView' object has no attribute 'join'
问:
我正在尝试重现此答案,但出现以下错误:
AttributeError:“GrouperView”对象没有属性“join”
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[283], line 7
4 flights = flights.pivot("month", "year", "passengers")
5 f,(ax1,ax2,ax3, axcb) = plt.subplots(1,4,
6 gridspec_kw={'width_ratios':[1,1,1,0.08]})
----> 7 ax1.get_shared_y_axes().join(ax2,ax3)
8 g1 = sns.heatmap(flights,cmap="YlGnBu",cbar=False,ax=ax1)
9 g1.set_ylabel('')
AttributeError: 'GrouperView' object has no attribute 'join'
此外,seaborn版本如下:
print(sns.__version__) #0.13.0
import matplotlib
print('matplotlib: {}'.format(matplotlib.__version__) #matplotlib: 3.8.1)
我检查了一些解决方法,但无法解决绘图中的问题,因为打印时没有真正的字符串:ax2,ax3
即使我降级了seaborn,但并没有基于这个线程解决问题
答:
1赞
Goku - stands with Palestine
11/4/2023
#1
解决方案:请将 matplotlib 降级到 3.7 或 3.6
你的错误与seaborn无关。
由于 matplotlib,您收到此错误:
当我将 matplotlib 升级到 .我收到此错误:3.8.1
AttributeError: 'GrouperView' object has no attribute 'join'
此外,我在 matplotlib 3.6 中收到弃用警告
MatplotlibDeprecation警告:join 函数在 Matplotlib 3.6 中已弃用,将在两个次要版本后删除。
我能够在 matplotlib 3.6 和 3.7 中重现该图形
代码如下:
import seaborn as sns
import matplotlib.pyplot as plt
flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
f,(ax1,ax2,ax3, axcb) = plt.subplots(1,4,
gridspec_kw={'width_ratios':[1,1,1,0.08]})
ax1.get_shared_y_axes().join(ax2,ax3)
g1 = sns.heatmap(flights,cmap="YlGnBu",cbar=False,ax=ax1)
g1.set_ylabel('')
g1.set_xlabel('')
g2 = sns.heatmap(flights,cmap="YlGnBu",cbar=False,ax=ax2)
g2.set_ylabel('')
g2.set_xlabel('')
g2.set_yticks([])
g3 = sns.heatmap(flights,cmap="YlGnBu",ax=ax3, cbar_ax=axcb)
g3.set_ylabel('')
g3.set_xlabel('')
g3.set_yticks([])
# may be needed to rotate the ticklabels correctly:
for ax in [g1,g2,g3]:
tl = ax.get_xticklabels()
ax.set_xticklabels(tl, rotation=90)
tly = ax.get_yticklabels()
ax.set_yticklabels(tly, rotation=0)
plt.show()
2赞
BigBen
11/4/2023
#2
正如 3.6 API 更改中建议的那样(并在 3.8 API 更改中重复),请使用 Axes.sharey
。
ax1.sharey(ax2)
ax2.sharey(ax3)
由于只能与另一个人共享,我不知道有一种替代方案可以一步与两者共享。Axes
sharey
Axes
ax1
ax2
ax3
评论