首页 > 解决方案 > 使用 `plt.subplots()` 绘制 `sns.swarmplot` 时出现问题

问题描述

我想plt.subplots()与循环范围一起使用来绘制swarmplot何时特征 plate是不同的值。
所以我用一个简单的情节对其进行编码,这绝对是正确的。

#I just use i = 5 to specify a value
i = 5
sns.swarmplot(b[b['plate'] == 'BK0000' + str(i)]['plate'],\
              b[b['plate'] == 'BK0000' + str(i)]['tradeMoney'])

在此处输入图像描述

但是当我尝试如下编码时出现了问题:

nrows, ncols = 64, 1
fig, ax = plt.subplots(nrows=nrows, ncols=ncols, figsize=(9, 72), dpi=120)

month_cnt = 1
for i in range(nrows):
    i_ = i    
    if (i < 10):
        i = '0' + str(i)

    if (i == 32 | i == 58):
        continue    

    sns.swarmplot(b[b['plate'] == 'BK000' + str(i)]['plate'],\
                b[b['plate'] == 'BK000' + str(i)]['tradeMoney'],\
                ax=ax[i_])

    ax[i_].set_xlabel('BK000' + str(i))
    ax[i_].set_ylabel('tradeMoney')

和错误消息再次让我感到困惑。

-------------------------------------------------- -------------------------
ValueError Traceback(最近一次调用最后一次)在
12 sns.swarmplot(b[b['plate'] == ' BK000' + str(i)]['plate'],\
13 b[b['plate'] == 'BK000' + str(i)]['tradeMoney'],\
---> 14 ax=ax [i_])
15
16 ax[i_].set_xlabel('BK000' + str(i))

~\Anaconda3\lib\site-packages\seaborn\categorical.py in swarmplot(x, y, hue, data, order, hue_order, dodge, orient, color, palette, size, edgecolor, linewidth, ax, **kwargs)
2975
2976 绘图仪 = _SwarmPlotter(x,y,色调,数据,顺序,hue_order,
-> 2977 闪避,方向,颜色,调色板)
2978< 如果 ax 为无:
2979 ax = plt.gca()

~\Anaconda3\lib\site-packages\seaborn\categorical.py in init (self, x, y, hue, data, order, hue_order, dodge, orient, color, palette)
1213 """初始化绘图仪。"" "
1214
self.establish_variables(x, y, hue, data, orient, order, hue_order) ->
1215 self.establish_colors(color, palette, 1)
1216
1217 # 设置对象属性

~\Anaconda3\lib\site-packages\seaborn\categorical.py inestablish_colors(self, color, palette,saturation) 313 # 确定用于绘制绘图的线条的灰色
314 light_vals = [colorsys.rgb_to_hls(*c ) 1 for c in rgb_colors]
--> 315 lum = min(light_vals) * .6
316 gray = mpl.colors.rgb2hex((lum, lum, lum))
317

ValueError: min() arg 是一个空序列

而且情节都是空白的。

b['plate'].unique()

array(['BK00001', 'BK00002', 'BK00003', 'BK00004', 'BK00005', 'BK00006',
       'BK00007', 'BK00008', 'BK00009', 'BK00010', 'BK00011', 'BK00012',
       'BK00013', 'BK00014', 'BK00015', 'BK00016', 'BK00017', 'BK00018',
       'BK00019', 'BK00020', 'BK00021', 'BK00022', 'BK00023', 'BK00024',
       'BK00025', 'BK00026', 'BK00027', 'BK00028', 'BK00029', 'BK00030',
       'BK00031', 'BK00033', 'BK00034', 'BK00035', 'BK00036', 'BK00037',
       'BK00038', 'BK00039', 'BK00040', 'BK00041', 'BK00042', 'BK00043',
       'BK00044', 'BK00045', 'BK00046', 'BK00047', 'BK00048', 'BK00049',
       'BK00050', 'BK00051', 'BK00052', 'BK00053', 'BK00054', 'BK00055',
       'BK00056', 'BK00057', 'BK00059', 'BK00060', 'BK00061', 'BK00062',
       'BK00063', 'BK00064', 'BK00065', 'BK00066'], dtype=object)

即使我以前搜索过它,我也无法用错误消息修复它。
有人可以帮我吗?
提前致谢。

标签: pythonmatplotlibseaborn

解决方案


在第一次迭代期间,您似乎正在尝试对空数据帧进行 swarmplot。检查以确保 BK00000 存在或跳过绘制该值。


推荐阅读