带有颜色值的python distplot

时间:2019-02-03 09:32:01

标签: python matplotlib plot visualization seaborn

我想创建一个具有不同颜色到不同值范围的dist绘图(最好使用seaborn)。 我有向量:

[3,1,2,3,5,6,8,0,0,5,7,0,1, 0.2]

我想创建一个distplot,使范围从0到1的所有部分将变为红色,而所有其他部分将变为蓝色。

这样做的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

我不知道seaborn中是否有简单的方法可以做到这一点,但是自己进行绘制可能要容易得多。首先,您需要获取大小相等的垃圾箱(如果需要),以使图看起来均匀( np.histogram )。然后,它只是您的观察结果和图上的单个numpy过滤器。

import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
x = np.array([3,1,2,3,5,6,8,0,0,5,7,0,1, 0.2])
# make equal binning through the range, you can adapt the bin size here
counts, bins = np.histogram(x, bins=10)

# here we do the filtering and split the observations based on your color code
x1 = x[(x <= 1) & (x >= 0)]
x2 = x[~((x <= 1) & (x >= 0))]

# finally, do the plot
f, ax = plt.subplots()
ax.hist(x1, bins=bins, color="tab:red")
ax.hist(x2, bins=bins, color="tab:blue")
ax.set(xlabel="Measurement", ylabel="Counts", title="histogram with 2 colors")
sns.despine()

给你:

0MQ Push-Pull Pattern

答案 1 :(得分:0)

我认为您需要一个散点图。在这种情况下,您可以尝试以下解决方案。在这里,您首先根据自己的条件创建一列颜色,然后将这些颜色分配给散点图。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

data = np.array([3, 1, 2, 3, 5, 6, 8, 0, 0, 5, 7, 0,1, 0.2])
df = pd.DataFrame({'data':data}).reset_index()

df['colors'] = np.where(data<1, 'red', 'blue')
plt.scatter(df['index'], df['data'], c=df['colors'])

enter image description here

替代是直接使用DataFrame进行绘制

data = np.array([3, 1, 2, 3, 5, 6, 8, 0, 0, 5, 7, 0,1, 0.2])
df = pd.DataFrame({'data':data}).reset_index()

colors = np.where(data<1, 'red', 'blue')
df.plot(kind='scatter', x='index', y='data',c=colors)