为组合散点图创建不同的颜色条

时间:2020-04-26 20:33:25

标签: pandas matplotlib colorbar scatter

我可以有两个对应于每个散点图的颜色条吗?我不明白为什么第二个散点图会创建第二个色条,却使用前一个图的色图。

import pandas as pd
import matplotlib.pyplot as plt

fig = plt.figure(num=1, clear=True)
ax = fig.add_subplot()

d = pd.DataFrame({'a': range(10), 'b': range(10), 'c': range(10)})
e = pd.DataFrame({'a': range(1,11), 'b': range(10), 'c': range(10)})

d.plot.scatter(x='a', y='b', c='c', cmap='GnBu', ax=ax)
e.plot.scatter(x='a', y='b', c='c', cmap='RdPu', ax=ax)

enter image description here

1 个答案:

答案 0 :(得分:2)

Pandas绘图可以自动执行很多操作,但是事后更改并不总是那么容易。在这种情况下,大熊猫没有考虑使用两次相同的ax,而是两次调用plt.colorbar

如果需要操纵结果,通常更容易直接用matplotlib创建图。请注意,第二个颜色栏被绘制为最接近该图。因此,下面的代码将更改顺序。

import pandas as pd
import matplotlib.pyplot as plt

fig = plt.figure(num=1, clear=True)
ax = fig.add_subplot()

d = pd.DataFrame({'a': range(10), 'b': range(10), 'c': range(10)})
e = pd.DataFrame({'a': range(1,11), 'b': range(10), 'c': range(10)})

d_scatter = ax.scatter(x=d['a'], y=d['b'], c=d['c'], cmap='GnBu')
e_scatter = ax.scatter(x=e['a'], y=e['b'], c=e['c'], cmap='RdPu')
plt.colorbar(e_scatter)
plt.colorbar(d_scatter)

plt.show()

demo plot

PS:当有多个颜色条时,也可以将颜色条显式放入其自己的子图中。这样,可以更好地控制相互距离。尤其是当有3个或更多的颜色条时,否则看起来很难看。

import pandas as pd
import matplotlib.pyplot as plt

fig, axes = plt.subplots(ncols=3, gridspec_kw={'width_ratios': [15, 1, 1] })

d = pd.DataFrame({'a': range(10), 'b': range(10), 'c': range(10)})
e = pd.DataFrame({'a': range(1,11), 'b': range(10), 'c': range(10)})

d_scatter = axes[0].scatter(x=d['a'], y=d['b'], c=d['c'], cmap='GnBu')
e_scatter = axes[0].scatter(x=e['a'], y=e['b'], c=e['c'], cmap='RdPu')

plt.colorbar(d_scatter, cax=axes[1])
plt.colorbar(e_scatter, cax=axes[2])

plt.show()