<p>这里有两种解决方案。更简单(也是更好的解决方案)的方法是简单地将matplotlib升级到新版本</p>
<p>如果这不是一个选项,首选的替代方案是分别处理散点打印和勾号标记,这可以非常简单地完成。例如:</p>
<pre class="lang-py prettyprint-override"><code>import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.colors
import numpy as np
n_tile = 5
np.random.seed(0)
x = np.random.normal(150, 70, 3000,)
y = np.random.normal(1, 0.3, 3000)
r = np.random.normal(0.4, 0.1, 3000)
plot_data = pd.DataFrame({'x': x, 'y': y, 'r': r})
plot_data['x_group'] = pd.qcut(plot_data['x'], n_tile, duplicates='drop')
plot_data['y_group'] = pd.qcut(plot_data['y'], n_tile, duplicates='drop')
plot_data_grouped = plot_data.groupby(['x_group','y_group'], as_index=False).agg({'r':['mean','count']})
plot_data_grouped.columns = ['x','y','mean','count']
cmap = plt.cm.rainbow
norm = matplotlib.colors.Normalize(vmin=0, vmax=1)
plt.figure(figsize=(10,10))
x = range(len(plot_data_grouped['x']))
y = range(len(plot_data_grouped['y']))
X, Y = np.meshgrid(x, y)
plt.scatter(x=X.flatten(),
y=Y.flatten(),
s=plot_data_grouped["count"],
c=plot_data_grouped['mean'], cmap="RdYlGn", edgecolors="black")
plt.xticks(x, [str(e) for e in plot_data_grouped['x']])
plt.yticks(y, [str(e) for e in plot_data_grouped['y']])
plt.show()
</code></pre>