带有颜色标记(类别)和颜色图标记的seaborn swarmplot

时间:2020-09-04 17:07:11

标签: python matplotlib seaborn

我想绘制一个seaborn.swarmplot,其中类别(色相)表示为标记,而散点图的颜色定义了另一列的值。

我发现this great answer非常相似,但我想在数据框中添加另一列,我们将其命名为cat,用于分类变量,该变量设置为{{1} },而颜色列是通过列hue='cat'定义的。我希望类别不使用彩色类别,而是用标记进行标记。 c。我修改了上面提到的答案,以实现至少依赖于c的色图,但也可以按类别进行映射,但是为每个类别设置标记仍然失败

markers=['x', 'o', 'd']

是否知道如何整合标记以及如何使颜色仅取决于import pandas as pd import matplotlib.pyplot as plt import matplotlib.colorbar import matplotlib.colors import matplotlib.cm from mpl_toolkits.axes_grid1 import make_axes_locatable import seaborn as sns # dataframe df = pd.DataFrame( data={'a': [1, 4, 5, 6, 3, 4, 5, 6], 'c': [12, 35, 12, 46, 78, 45, 34, 70], 'cat': [0, 1, 1, 1, 0, 1, 0, 1], 'key': [1, 2, 2, 1, 1, 2, 1, 2]} ) # Create a matplotlib colormap from the sns seagreen color palette cmap = sns.light_palette("seagreen", reverse=False, as_cmap=True) # Normalize to the range of possible values from df["c"] norm = matplotlib.colors.Normalize(vmin=df["c"].min(), vmax=df["c"].max()) # create a color dictionary (value in c : color from colormap) colors = {} for cat, cval in zip(df['cat'], df["c"]): colors.update({'{0}-{1}'.format(cat, cval) : cmap(norm(cval))}) # save cat-col key as new reformed cat col: df['cat-color'] = list(colors.keys()) fig = plt.figure(figsize=(5,2.8)) # plot the swarmplot with the colors dictionary as palette m = sns.swarmplot(x='key', y='a', hue="cat-color", s=12, data=df, palette=colors, markers=['x', 'o', 'd']) ## create colorbar ## divider = make_axes_locatable(plt.gca()) ax_cb = divider.new_horizontal(size="5%", pad=0.05) fig.add_axes(ax_cb) cb1 = matplotlib.colorbar.ColorbarBase( ax_cb, cmap=cmap, norm=norm, orientation='vertical') plt.show() 而不取决于c
我还发现this answer处理标记,但是我看不出有什么方法可以将其结合成独立的标记和颜色。

0 个答案:

没有答案