首页 > 解决方案 > Seaborn:在点图中绘制多色点而不用断线

问题描述

我有一个这样的数据集。是否有可能绘制点,当颜色变化时线条不会中断?线的颜色,将绿色连接到红色,或将红色连接到绿色,可以是绿色或红色(没关系)。

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

index = np.arange(1, 49, 1)
value = np.append(np.arange(1,25,1), np.arange(25,1,-1))
color_choice = np.random.choice(['YES', 'NO'], 48, p=[0.3, 0.7])

dt = pd.DataFrame(zip(index, value, color_choice), columns=['index', 'value', 'color_choice'])

plt.figure(figsize = (16, 5))
color_dict = dict({'NO':'green', 'YES':'red'})
sns.pointplot(x="index", y="value", data=dt, hue="color_choice", palette=color_dict);

在此处输入图像描述

我正在寻找的是应该有一个连续的图,点连接在一起,并且根据列color_choice中的条件,点是绿色或红色。它们之间的线可以是任何颜色

标签: pythonpython-3.xpandasmatplotlibseaborn

解决方案


您可以使用不那么优雅的方式来matplotlib代替seaborn

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
sns.set()

index = np.arange(1, 49, 1)
value = np.append(np.arange(1,25,1), np.arange(25,1,-1))
color_choice = np.random.choice(['YES', 'NO'], 48, p=[0.3, 0.7])

dt = pd.DataFrame(zip(index, value, color_choice), columns=['index', 'value', 'color_choice'])

plt.figure(figsize = (16, 5))
color_dict = dict({'NO':'green', 'YES':'red'})

plt.plot(dt["index"], dt["value"], color="green", lw=3)
plt.plot(dt[dt["color_choice"] == "NO"]["index"], dt[dt["color_choice"] == "NO"]["value"], "o", color = "green", markersize = 10)
plt.plot(dt[dt["color_choice"] == "YES"]["index"], dt[dt["color_choice"] == "YES"]["value"], "o", color = "red", markersize = 10)

plt.show()

这使:

在此处输入图像描述


推荐阅读