matplotlib中多个散点图中的意外颜色

时间:2016-08-11 16:41:07

标签: python pandas matplotlib

我确定我在这里搞砸了一些非常简单的东西,但似乎无法解决这个问题。我只是试图通过在数据帧中循环并重复调用ax.scatter来将每组数据绘制为每组不同颜色的散点图。一个最小的例子是:

import numpy as np; import pandas as pd; import matplotlib.pyplot as plt; import seaborn as sns
%matplotlib inline

df = pd.DataFrame({"Cat":list("AAABBBCCC"), "x":np.random.rand(9), "y":np.random.rand(9)})

fig, ax = plt.subplots()
for i,cat in enumerate(df.Cat.unique()):
    print i, cat, sns.color_palette("husl",3)[i]
    ax.scatter(df[df.Cat==cat].x.values, df[df.Cat==cat].y.values, marker="h",s=70,
               label = cat, color=sns.color_palette("husl",3)[i])
ax.legend(loc=2)

我为自己的理智添加了print声明,以确认我确实在组中骑自行车并选择不同的颜色。但输出如下:

enter image description here

(如果这有点难以察觉:根据图例,A,B和C组有三种非常相似的蓝色,但是所有散点都有不同且看似无关的颜色,这些颜色在各组之间都不相同)

这里发生了什么?

2 个答案:

答案 0 :(得分:1)

您可以使用pandas ax方法指定目标ax并重复绘制单个轴中的多个列组# set random seed np.random.seed(42) fig, ax = plt.subplots() for i,label in enumerate(df['Cat'].unique()): # select subset of columns equal to a given label df['X'] = df[df['Cat']==label]['x'] df['Y'] = df[df['Cat']==label]['y'] df.plot.scatter(x='X',y='Y',color=sns.color_palette("husl",3)[i],label=label,ax=ax) ax.legend(loc=2)

try:
    more = WebDriverWait(self.driver, 10,poll_frequency=2,ignored_exceptions=[ElementNotVisibleException, ElementNotSelectableException]).until(EC.element_to_be_clickable((By.Name, 'resourceModelTaxonomyTypeIds'))) 
except TimeoutException:
    break 

more.click()

scatter()

答案 1 :(得分:1)

应该花费更多时间来减少最小的工作示例。事实证明问题在于sns.color_palette的调用,它返回一个混淆(float,float,float)的{​​{1}}元组,因为它显然将其中一个数字解释为alpha值。

通过替换

解决了这个问题
scatter

color = sns.color_palette("husl",3)[i]

为alpha添加显式值。