如何解决Python:在Seaborn中为一维矮线着色
我正在尝试使用以下数据框制作一维群图(仅显示前几行):
value color
0 0.446928 1
1 0.258523 0
2 0.716512 2
3 0.288698 0
4 0.132203 0
5 0.871158 3
6 0.613292 2
7 0.697033 2
8 0.333995 1
9 0.549433 2
使用以下代码,我绘制了一维群图:
import matplotlib.pyplot as plt
import seaborn as sns
plt.style.use('ggplot')
sns.swarmplot(x=df['value'],hue=df['color'])
这是生成的图:
这里的问题是我要为每个组定义颜色,例如从0到0.3的值应该具有红色(例如),从0.3到0.5的颜色应该具有第二种颜色(例如绿色),依此类推。为此,我已经在数据帧中定义了颜色列,但是在传递hue=df['color']
时,该图未生成颜色。我希望我的情节看起来像这样:
我应该对代码进行哪些更改,以使程序按预期运行?
解决方法
生成的散点存储在ax.collections[-1]
中。您可以提取它们的x坐标,使用np.digitize()
将其划分为组,然后使用这些值进行着色:
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
import seaborn as sns
import pandas as pd
import numpy as np
plt.style.use('ggplot')
df = pd.DataFrame({'value': np.random.uniform(0,1,1000)})
ax = sns.swarmplot(x=df['value'])
scatter_dots = ax.collections[-1]
xpos = scatter_dots.get_offsets()[:,0]
boundaries = [0,.3,.5,.7,1] # one more than the number of colors
colors = np.digitize(xpos,boundaries)
scatter_dots.set_array(colors)
scatter_dots.set_cmap(ListedColormap(['crimson','limegreen','gold','skyblue']))
plt.show()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。