为组合散点图创建不同的颜色条
Create different colorbars for combined scatter plot
每个散点图可以对应两个颜色条吗?我不明白为什么第二个散点图创建了第二个颜色条但使用了前一个图的颜色图。
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)
Pandas 绘图会自动执行很多操作,但事后更改并不总是那么容易。在这种情况下,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()
PS:当有多个colorbar时,也可以将bars显式放入自己的subplot中。这样可以更好地控制相互距离。特别是当有 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()
每个散点图可以对应两个颜色条吗?我不明白为什么第二个散点图创建了第二个颜色条但使用了前一个图的颜色图。
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)
Pandas 绘图会自动执行很多操作,但事后更改并不总是那么容易。在这种情况下,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()
PS:当有多个colorbar时,也可以将bars显式放入自己的subplot中。这样可以更好地控制相互距离。特别是当有 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()