简体   繁体   English

如何在Seaborn Jointplot中对单个标记进行着色?

[英]How to color individual markers in Seaborn Jointplot?

I believe seaborn wants RGBA color format so I gave it a list of RGBA tuples like in matplotlib but it didn't like it. 我相信seaborn RGBA颜色格式,所以我给它一个像matplotlib一样的RGBA元组列表,但它不喜欢它。 I tried doing something like g = sns.jointplot(plotdataandstuff) but I couldn't figure out how to navigate the <seaborn.axisgrid.JointGrid at 0x135943d30> object 我尝试过像g = sns.jointplot(plotdataandstuff)这样的东西,但我无法弄清楚如何<seaborn.axisgrid.JointGrid at 0x135943d30>对象中导航<seaborn.axisgrid.JointGrid at 0x135943d30>

u = np.array([ 3.41959, 1.79315, 1.17229, 1.59909, 1.27337, 1.21917, 2.60591, 2.0571 , 1.83865, 1.94869])
v = np.array([238614, 166714, 152668, 131310, 131249, 130562, 118618, 117329, 101841, 87626])
c = np.array([(0.38998137426811552, 0.61096214975059782, 0.40096663322878834, 1.0), 
              (0.91819597903385741, 0.79247826098536023, 0.76754610185633376, 1.0), 
              (0.80693280982205806, 0.72756928157840872, 0.59917426429032361, 1.0), 
              (0.67210067882600855, 0.69086449405289441, 0.48640673089730696, 1.0), 
              (0.57590730770024134, 0.66895624366124595, 0.43845220910273563, 1.0), 
              (0.63252315055536124, 0.68193477278802606, 0.4639878928469835, 1.0), (
                  0.72522872317321141, 0.70350066480196072, 0.52329091024506846, 1.0), 
              (0.67210067882600855, 0.69086449405289441, 0.48640673089730696, 1.0), 
              (0.93684201381384091, 0.81480601869516889, 0.81083911715694279, 1.0), 
              (0.83654311363401856, 0.73919037695009648, 0.63434086709274395, 1.0)], dtype=object)
sns.jointplot(x=u, y=v, color=c)

Here's the error 这是错误

TypeError                                 Traceback (most recent call last)
/Users/jespinoz/anaconda/lib/python3.5/site-packages/matplotlib/colors.py in to_rgba(c, alpha)
    140     try:
--> 141         rgba = _colors_full_map.cache[c, alpha]
    142     except (KeyError, TypeError):  # Not in cache, or unhashable.

TypeError: unhashable type: 'numpy.ndarray'

During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)
/Users/jespinoz/anaconda/lib/python3.5/site-packages/matplotlib/colors.py in _to_rgba_no_colorcycle(c, alpha)
    191     try:
--> 192         c = tuple(map(float, c))
    193     except TypeError:

TypeError: only length-1 arrays can be converted to Python scalars

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
<ipython-input-69-48b550e1edb6> in <module>()
     13               (0.93684201381384091, 0.81480601869516889, 0.81083911715694279, 1.0),
     14               (0.83654311363401856, 0.73919037695009648, 0.63434086709274395, 1.0)], dtype=object)
---> 15 sns.jointplot(x=u, y=v, color=c)

/Users/jespinoz/anaconda/lib/python3.5/site-packages/seaborn/distributions.py in jointplot(x, y, data, kind, stat_func, color, size, ratio, space, dropna, xlim, ylim, joint_kws, marginal_kws, annot_kws, **kwargs)
    789     if color is None:
    790         color = color_palette()[0]
--> 791     color_rgb = mpl.colors.colorConverter.to_rgb(color)
    792     colors = [set_hls_values(color_rgb, l=l) for l in np.linspace(1, 0, 12)]
    793     cmap = blend_palette(colors, as_cmap=True)

/Users/jespinoz/anaconda/lib/python3.5/site-packages/matplotlib/colors.py in to_rgb(arg)
    307         if *arg* is *RGBA*, the *A* will simply be discarded.
    308         """
--> 309         return to_rgb(arg)
    310 
    311     @staticmethod

/Users/jespinoz/anaconda/lib/python3.5/site-packages/matplotlib/colors.py in to_rgb(c)
    242     """Convert `c` to an RGB color, silently dropping the alpha channel.
    243     """
--> 244     return to_rgba(c)[:3]
    245 
    246 

/Users/jespinoz/anaconda/lib/python3.5/site-packages/matplotlib/colors.py in to_rgba(c, alpha)
    141         rgba = _colors_full_map.cache[c, alpha]
    142     except (KeyError, TypeError):  # Not in cache, or unhashable.
--> 143         rgba = _to_rgba_no_colorcycle(c, alpha)
    144         try:
    145             _colors_full_map.cache[c, alpha] = rgba

/Users/jespinoz/anaconda/lib/python3.5/site-packages/matplotlib/colors.py in _to_rgba_no_colorcycle(c, alpha)
    192         c = tuple(map(float, c))
    193     except TypeError:
--> 194         raise ValueError("Invalid RGBA argument: {!r}".format(orig_c))
    195     if len(c) not in [3, 4]:
    196         raise ValueError("RGBA sequence should have length 3 or 4")

ValueError: Invalid RGBA argument: array([[0.3899813742681155, 0.6109621497505978, 0.40096663322878834, 1.0],
       [0.9181959790338574, 0.7924782609853602, 0.7675461018563338, 1.0],
       [0.8069328098220581, 0.7275692815784087, 0.5991742642903236, 1.0],
       [0.6721006788260085, 0.6908644940528944, 0.48640673089730696, 1.0],
       [0.5759073077002413, 0.668956243661246, 0.43845220910273563, 1.0],
       [0.6325231505553612, 0.6819347727880261, 0.4639878928469835, 1.0],
       [0.7252287231732114, 0.7035006648019607, 0.5232909102450685, 1.0],
       [0.6721006788260085, 0.6908644940528944, 0.48640673089730696, 1.0],
       [0.9368420138138409, 0.8148060186951689, 0.8108391171569428, 1.0],
       [0.8365431136340186, 0.7391903769500965, 0.634340867092744, 1.0]], dtype=object)
sns.jointplot(u, v, joint_kws={'color':None, 'c':c.tolist()})

在此输入图像描述

A joinplot consist of the marginal plots on the sides (histograms by default) and the jointplot in the middle (a scatterplot by default), which you can read more about in the JointGrid documentation . 联接图由边上的边缘图(默认为直方图)和中间的联合图(默认为散点图)组成,您可以在JointGrid文档中阅读更多内容。

In this case, you want to pass arguments to the scatter plot in the middle, which you can do with the joint_kws parameter in sns.jointplot() . 在这种情况下,您希望将参数传递给中间的散点图,您可以使用sns.jointplot()joint_kws参数。 This parameter takes a dictionary of parameter names and their arguments, and passes it to the function used to create the middle plot, in this case plt.scatter() . 此参数接受参数名称及其参数的字典,并将其传递给用于创建中间图的函数,在本例中为plt.scatter() The c parameter controls the colors, and accepts a list of color tuples, so you will need to convert the array via c.tolist() . c参数控制颜色,并接受颜色元组列表,因此您需要通过c.tolist()转换数组。 One last caveat is that seaborn already passes a color to the color parameter of plt.scatter() , so we need to set this to None to avoid raising an error from trying to set the marker colors twice. 最后一个警告是seaborn已经将颜色传递给plt.scatter()color参数,因此我们需要将其设置为None以避免因尝试设置两次标记颜色而引发错误。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM